public async Task Handle(DeleteTravel command) { if (command.AggregateId == null || command.AggregateId == Guid.Empty) { throw new IncorrectRequestException(ErrorCodes.ParameterCannotBeEmpty, nameof(command.AggregateId)); } Models.Travel travel = await store.Get(command.AggregateId); if (travel == null || travel.Deleted) { throw new IncorrectRequestException(ErrorCodes.ResourceDoesNotExist, nameof(travel)); } if (travel.Version != command.AggregateVersion) { throw new ResourceStateChangedException(nameof(Travel), travel.Id, travel.Version); } Identity identity = identityProvider.GetIdentity(); if (travel.Owner != identity.Username && identity.Role != Roles.Admin) { throw new UnauthorizedUserException(); } var @event = new TravelDeleted { RelatedCommandId = command.CommandId, Id = command.AggregateId, }; travel.ApplyEvent(@event); @event.AggregateVersion = travel.Version; await eventPublisher.Publish(@event); }
public void Apply(TravelDeleted @event) { Deleted = true; }