using System; using Svrnty.CQRS.Events.Abstractions.Streaming; using Svrnty.CQRS.Events.Abstractions.Delivery; using Svrnty.CQRS.Events.Abstractions.Models; using Svrnty.CQRS.Events.Abstractions.Configuration; namespace Svrnty.CQRS.Events.Abstractions.Streaming; /// /// Configuration for an event stream. /// Defines storage semantics, delivery guarantees, scope, and retention policies. /// /// /// /// Stream configuration determines how events are stored, delivered, and retained. /// Phase 1 focuses on basic configuration; additional properties will be added in later phases. /// /// public interface IStreamConfiguration { /// /// Name of the stream. /// /// /// Stream names should be descriptive and unique within the application. /// Common patterns: "{entity}-events", "{workflow-name}", "{domain}-stream" /// string StreamName { get; } /// /// Type of stream storage (Ephemeral or Persistent). /// /// /// Default: for Phase 1. /// Persistent streams will be fully implemented in Phase 2. /// StreamType Type { get; set; } /// /// Delivery guarantee semantics (AtMostOnce, AtLeastOnce, ExactlyOnce). /// /// /// Default: (recommended for most scenarios). /// ExactlyOnce will be fully implemented in Phase 3. /// DeliverySemantics DeliverySemantics { get; set; } /// /// Visibility scope (Internal or CrossService). /// /// /// Default: (secure by default). /// CrossService will be fully implemented in Phase 4 with RabbitMQ support. /// StreamScope Scope { get; set; } /// /// Retention policy for persistent streams (how long events are kept). /// Only applies to persistent streams; ignored for ephemeral streams. /// /// /// Default: null (no retention policy, keep events forever). /// Retention policies will be fully implemented in Phase 2. /// TimeSpan? Retention { get; set; } /// /// Whether event replay is enabled for this stream. /// Only applies to persistent streams; ignored for ephemeral streams. /// /// /// Default: false for Phase 1. /// Replay functionality will be fully implemented in Phase 2. /// bool EnableReplay { get; set; } }