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); }
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 }); }
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()); }
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); }
public async Task UpdateAssigneeChangeAsync(InventoryAssigneeChange change, CancellationToken cancellationToken = default) { Guard.Argument(change, nameof(change)).NotNull(); await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false); }