/// <summary> /// https://enterprisecraftsmanship.com/posts/validate-commands-cqrs/ /// </summary> /// <param name="command"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public Task <Result> Handle(Command command, CancellationToken cancellationToken) { var driver = _db.Drivers.FirstOrDefault(d => d.Id == command.Id); string error = null; if (driver == null) { error = "Driver not found"; } else { _db.Drivers.Remove(driver); _db.SaveChanges(); // Or we could do the SOFT delete (like in EventSourcing): // // We'd still have the data in our event store. // We'd publish a 'deleted' event which would remove/mark the data as deleted in read model. // // ===== // In general: ORM + events = a giant pile of #fail (c) Greg Young // ===== } var result = new Result { Error = error }; if (error == null) { var @event = new DriverRemovedEvent() { DriverId = driver.Id }; _mediator.Publish(@event); } return(Task.FromResult(result)); }
public Task Handle(DriverRemovedEvent message, CancellationToken cancellationToken) { // Send some see you soon e-mail return(Task.CompletedTask); }
public void Apply(DriverRemovedEvent aggregateRegisteredEvent) { Driver.MarkAsRemoved(); }