Skip to main content

arolariu.Backend.Domain.Invoices.Services.Foundation.MerchantStorage

arolariu.Backend.Domain.Invoices

arolariu.Backend.Domain.Invoices.Services.Foundation.MerchantStorage Namespace

Classes

MerchantStorageFoundationService Class

Class that implements the merchant storage foundation service.

public class MerchantStorageFoundationService : arolariu.Backend.Domain.Invoices.Services.Foundation.MerchantStorage.IMerchantStorageFoundationService

Inheritance System.Object 🡒 MerchantStorageFoundationService

Implements IMerchantStorageFoundationService

Constructors

MerchantStorageFoundationService(IInvoiceNoSqlBroker, ILoggerFactory) Constructor

Public constructor.

public MerchantStorageFoundationService(arolariu.Backend.Domain.Invoices.Brokers.DatabaseBroker.IInvoiceNoSqlBroker invoiceNoSqlBroker, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory);

Parameters

invoiceNoSqlBroker IInvoiceNoSqlBroker

loggerFactory Microsoft.Extensions.Logging.ILoggerFactory

Methods

MerchantStorageFoundationService.CreateMerchantObject(Merchant, Nullable<Guid>, CancellationToken) Method

Persists a new Merchant aggregate.

public System.Threading.Tasks.Task CreateMerchantObject(arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant merchant, System.Nullable<System.Guid> parentCompanyId=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

merchant Merchant

Merchant aggregate to persist (MUST NOT be null).

parentCompanyId System.Nullable<System.Guid>

Optional tenancy / partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Implements CreateMerchantObject(Merchant, Nullable<Guid>, CancellationToken)

Returns

System.Threading.Tasks.Task
Asynchronous task.

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Validation: Ensures merchant id not empty, required collections (e.g. ReferencedInvoices) initialized, and category values within allowed domain.

Failure Modes: Throws validation exceptions on invariant breach, dependency / dependency validation exceptions on broker-level persistence failures (conflicts, connectivity, serialization).

MerchantStorageFoundationService.DeleteMerchantObject(Guid, Nullable<Guid>, CancellationToken) Method

Deletes (logical or physical) a merchant.

public System.Threading.Tasks.Task DeleteMerchantObject(System.Guid identifier, System.Nullable<System.Guid> parentCompanyId=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

identifier System.Guid

Merchant identifier.

parentCompanyId System.Nullable<System.Guid>

Optional partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Implements DeleteMerchantObject(Guid, Nullable<Guid>, CancellationToken)

Returns

System.Threading.Tasks.Task
Asynchronous task.

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Idempotency: Repeated deletes yield same terminal state (absent / marked deleted).

Referential Integrity: This layer DOES NOT cascade / clean invoice references (belongs to orchestration / processing layers).

MerchantStorageFoundationService.ReadAllMerchantObjects(Guid, CancellationToken) Method

Enumerates all merchants under a partition (or across all when partition omitted).

public System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant>> ReadAllMerchantObjects(System.Guid parentCompanyId, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

parentCompanyId System.Guid

Partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Implements ReadAllMerchantObjects(Guid, CancellationToken)

Returns

System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<Merchant>>
Enumerable (empty if none).

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Pagination: Not implemented; large sets could be expensive (backlog: add paging and continuation tokens).

Filtering: Soft-deleted entities SHOULD be excluded if soft delete introduced.

MerchantStorageFoundationService.ReadMerchantObject(Guid, Nullable<Guid>, CancellationToken) Method

Retrieves a merchant by identifier (and optional partition).

public System.Threading.Tasks.Task<arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant> ReadMerchantObject(System.Guid identifier, System.Nullable<System.Guid> parentCompanyId=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

identifier System.Guid

Merchant identifier.

parentCompanyId System.Nullable<System.Guid>

Optional partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Implements ReadMerchantObject(Guid, Nullable<Guid>, CancellationToken)

Returns

System.Threading.Tasks.Task<Merchant>
The merchant or null.

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Return Semantics: Returns merchant or null if not found (implementations MAY alternatively raise a not-found validation exception depending on policy consistency with invoice storage).

Performance: SHOULD use point read within partition; cross-partition read when parentCompanyId absent may degrade throughput.

MerchantStorageFoundationService.UpdateMerchantObject(Merchant, Guid, Nullable<Guid>, CancellationToken) Method

Replaces existing merchant state with provided aggregate.

public System.Threading.Tasks.Task<arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant> UpdateMerchantObject(arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant updatedMerchant, System.Guid merchantIdentifier, System.Nullable<System.Guid> parentCompanyId=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

updatedMerchant Merchant

New merchant state.

merchantIdentifier System.Guid

Identifier of merchant being updated.

parentCompanyId System.Nullable<System.Guid>

Optional partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Implements UpdateMerchantObject(Merchant, Guid, Nullable<Guid>, CancellationToken)

Returns

System.Threading.Tasks.Task<Merchant>
Updated merchant.

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Preconditions: Merchant MUST already exist; invariants re-validated for updated state.

Concurrency: No optimistic concurrency yet (backlog: ETag / version field).

Interfaces

IMerchantStorageFoundationService Interface

Foundation storage contract for persisting and retrieving Merchant aggregates.

public interface IMerchantStorageFoundationService

Derived
MerchantStorageFoundationService

Remarks

Layer Role (The Standard): Direct broker-mediated CRUD plus invariant enforcement for a single aggregate type. NO cross-aggregate orchestration, NO multi-step workflows, NO external side-effects besides persistence.

Responsibilities:

  • Create, read, enumerate, update, delete merchants.
  • Validate structural and domain invariants (identifier, category validity, reference list initialization / bounds).
  • Normalize or sanitize simple fields (e.g. trimming display names) when required.

Partitioning: Optional parentCompanyId acts as logical partition / tenancy discriminator. Implementations SHOULD route queries through this key for cost efficiency. Null may trigger cross-partition scans (backlog: disallow).

Thread-Safety: Implementations SHOULD be stateless; any caching must be concurrency-safe.

Idempotency: Create is non-idempotent (duplicate ids rejected); delete and update are idempotent with respect to final persisted state.

Soft Delete: If soft deletion is adopted in future, this contract MAY evolve; current semantics imply physical or logical removal as defined by implementation.

Methods

IMerchantStorageFoundationService.CreateMerchantObject(Merchant, Nullable<Guid>, CancellationToken) Method

Persists a new Merchant aggregate.

System.Threading.Tasks.Task CreateMerchantObject(arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant merchant, System.Nullable<System.Guid> parentCompanyId=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

merchant Merchant

Merchant aggregate to persist (MUST NOT be null).

parentCompanyId System.Nullable<System.Guid>

Optional tenancy / partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Returns

System.Threading.Tasks.Task
Asynchronous task.

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Validation: Ensures merchant id not empty, required collections (e.g. ReferencedInvoices) initialized, and category values within allowed domain.

Failure Modes: Throws validation exceptions on invariant breach, dependency / dependency validation exceptions on broker-level persistence failures (conflicts, connectivity, serialization).

IMerchantStorageFoundationService.DeleteMerchantObject(Guid, Nullable<Guid>, CancellationToken) Method

Deletes (logical or physical) a merchant.

System.Threading.Tasks.Task DeleteMerchantObject(System.Guid identifier, System.Nullable<System.Guid> parentCompanyId=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

identifier System.Guid

Merchant identifier.

parentCompanyId System.Nullable<System.Guid>

Optional partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Returns

System.Threading.Tasks.Task
Asynchronous task.

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Idempotency: Repeated deletes yield same terminal state (absent / marked deleted).

Referential Integrity: This layer DOES NOT cascade / clean invoice references (belongs to orchestration / processing layers).

IMerchantStorageFoundationService.ReadAllMerchantObjects(Guid, CancellationToken) Method

Enumerates all merchants under a partition (or across all when partition omitted).

System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant>> ReadAllMerchantObjects(System.Guid parentCompanyId, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

parentCompanyId System.Guid

Partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Returns

System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<Merchant>>
Enumerable (empty if none).

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Pagination: Not implemented; large sets could be expensive (backlog: add paging and continuation tokens).

Filtering: Soft-deleted entities SHOULD be excluded if soft delete introduced.

IMerchantStorageFoundationService.ReadMerchantObject(Guid, Nullable<Guid>, CancellationToken) Method

Retrieves a merchant by identifier (and optional partition).

System.Threading.Tasks.Task<arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant> ReadMerchantObject(System.Guid identifier, System.Nullable<System.Guid> parentCompanyId=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

identifier System.Guid

Merchant identifier.

parentCompanyId System.Nullable<System.Guid>

Optional partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Returns

System.Threading.Tasks.Task<Merchant>
The merchant or null.

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Return Semantics: Returns merchant or null if not found (implementations MAY alternatively raise a not-found validation exception depending on policy consistency with invoice storage).

Performance: SHOULD use point read within partition; cross-partition read when parentCompanyId absent may degrade throughput.

IMerchantStorageFoundationService.UpdateMerchantObject(Merchant, Guid, Nullable<Guid>, CancellationToken) Method

Replaces existing merchant state with provided aggregate.

System.Threading.Tasks.Task<arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant> UpdateMerchantObject(arolariu.Backend.Domain.Invoices.DDD.Entities.Merchants.Merchant updatedMerchant, System.Guid merchantIdentifier, System.Nullable<System.Guid> parentCompanyId=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));

Parameters

updatedMerchant Merchant

New merchant state.

merchantIdentifier System.Guid

Identifier of merchant being updated.

parentCompanyId System.Nullable<System.Guid>

Optional partition discriminator.

cancellationToken System.Threading.CancellationToken

Optional cancellation token to abort the operation.

Returns

System.Threading.Tasks.Task<Merchant>
Updated merchant.

Exceptions

System.OperationCanceledException
Thrown if the operation is cancelled.

Remarks

Preconditions: Merchant MUST already exist; invariants re-validated for updated state.

Concurrency: No optimistic concurrency yet (backlog: ETag / version field).

// was this page useful?