Пример #1
0
        public async Task UpdateAssigneeAsync(InventoryAssignee assignee, InventoryAssigneeChange change, InventoryAssigneeSnapshot snapshot, CancellationToken cancellationToken = default)
        {
            Guard.Argument(assignee, nameof(assignee)).NotNull();
            Guard.Argument(change, nameof(change)).NotNull();
            Guard.Argument(snapshot, nameof(snapshot)).NotNull();

            var lastChange = await DbContext.InventoryAssigneeChanges
                             .Where(someChange => someChange.AssigneeId == assignee.Id)
                             .OrderBy(someChange => someChange.Sequence)
                             .LastAsync(cancellationToken).ConfigureAwait(false);

            var lastSnapshot = await DbContext.InventoryAssigneeSnapshots
                               .Where(someSnapshot => someSnapshot.AssigneeId == assignee.Id)
                               .OrderBy(someSnapshot => someSnapshot.Sequence)
                               .LastAsync(cancellationToken).ConfigureAwait(false);

            change.AssigneeId          = assignee.Id;
            change.Sequence            = lastChange.Sequence + 1;
            change.NewSnapshotSequence = lastSnapshot.Sequence + 1;
            DbContext.InventoryAssigneeChanges.Add(change);

            snapshot.AssigneeId = assignee.Id;
            snapshot.Sequence   = lastSnapshot.Sequence + 1;
            DbContext.InventoryAssigneeSnapshots.Add(snapshot);

            await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
        }
Пример #2
0
        public async Task <CreateAssigneeResponse> CreateAssignee(CreateAssigneeRequest request, CancellationToken cancellationToken)
        {
            var change = new InventoryAssigneeChange
            {
                UserId = AuthenticatedAppUserId,
                Date   = DateTimeOffset.Now
            };

            await _inventoryService.CreateAssigneeAsync(request.Assignee, change, request.Snapshot, cancellationToken).ConfigureAwait(false);

            return(new CreateAssigneeResponse
            {
                NewAssigneeId = request.Assignee.Id
            });
        }
Пример #3
0
        public async Task <ActionResult> DeleteAssignee(int assigneeId, CancellationToken cancellationToken)
        {
            var assignee = await _inventoryService.FindAssigneeByIdAsync(assigneeId, cancellationToken).ConfigureAwait(false);

            if (assignee is null)
            {
                return(NotFound());
            }

            var change = new InventoryAssigneeChange
            {
                UserId = AuthenticatedAppUserId,
                Date   = DateTimeOffset.Now
            };

            await _inventoryService.DeleteAssigneeAsync(assignee, change, cancellationToken).ConfigureAwait(false);

            return(Ok());
        }
Пример #4
0
        public async Task CreateAssigneeAsync(InventoryAssignee assignee, InventoryAssigneeChange change, InventoryAssigneeSnapshot snapshot, CancellationToken cancellationToken = default)
        {
            Guard.Argument(assignee, nameof(assignee)).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.InventoryAssignees.Add(assignee);
            await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

            change.AssigneeId          = assignee.Id;
            change.Sequence            = 1;
            change.NewSnapshotSequence = 1;
            DbContext.InventoryAssigneeChanges.Add(change);

            snapshot.AssigneeId = assignee.Id;
            snapshot.Sequence   = 1;
            DbContext.InventoryAssigneeSnapshots.Add(snapshot);

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

            await transaction.CommitAsync(cancellationToken).ConfigureAwait(false);
        }
Пример #5
0
 public async Task UpdateAssigneeChangeAsync(InventoryAssigneeChange change, CancellationToken cancellationToken = default)
 {
     Guard.Argument(change, nameof(change)).NotNull();
     await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
 }