Esempio n. 1
0
        public async Task UpdateItemAsync(InventoryItem item, InventoryItemChange change, InventoryItemSnapshot snapshot, CancellationToken cancellationToken = default)
        {
            Guard.Argument(item, nameof(item)).NotNull();
            Guard.Argument(change, nameof(change)).NotNull();
            Guard.Argument(snapshot, nameof(snapshot)).NotNull();

            var lastChange = await DbContext.InventoryItemChanges
                             .Where(someChange => someChange.ItemId == item.Id)
                             .OrderBy(someChange => someChange.Sequence)
                             .LastAsync(cancellationToken).ConfigureAwait(false);

            var lastSnapshot = await DbContext.InventoryItemSnapshots
                               .Where(someSnapshot => someSnapshot.ItemId == item.Id)
                               .OrderBy(someSnapshot => someSnapshot.Sequence)
                               .LastAsync(cancellationToken).ConfigureAwait(false);

            change.ItemId              = item.Id;
            change.Sequence            = lastChange.Sequence + 1;
            change.NewSnapshotSequence = lastSnapshot.Sequence + 1;
            DbContext.InventoryItemChanges.Add(change);

            snapshot.ItemId   = item.Id;
            snapshot.Sequence = lastSnapshot.Sequence + 1;
            DbContext.InventoryItemSnapshots.Add(snapshot);

            await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
        }
Esempio n. 2
0
        public async Task CreateItemAsync(InventoryItem item, InventoryItemChange change, InventoryItemSnapshot snapshot, CancellationToken cancellationToken = default)
        {
            Guard.Argument(item, nameof(item)).NotNull();
            Guard.Argument(change, nameof(change)).NotNull();
            Guard.Argument(snapshot, nameof(snapshot)).NotNull();

            await using var transaction = await DbContext.Database.BeginTransactionAsync(cancellationToken).ConfigureAwait(false);

            DbContext.InventoryItems.Add(item);
            await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

            change.ItemId              = item.Id;
            change.Sequence            = 1;
            change.NewSnapshotSequence = 1;
            DbContext.InventoryItemChanges.Add(change);

            snapshot.ItemId   = item.Id;
            snapshot.Sequence = 1;
            DbContext.InventoryItemSnapshots.Add(snapshot);

            await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

            await transaction.CommitAsync(cancellationToken).ConfigureAwait(false);
        }