/// <summary> /// Handles (reacts to) command. /// </summary> /// <param name="command">Command instance.</param> public void Handle(AddDrawing command) { var history = repository.GetById <History>(historyId); history.AddDrawing(command.Drawing); repository.Save(history); }
public AdminModule(IAggregateRootRepository repository, IIdGenerator idGenerator) : base("/write/admin") { this.RequiresAuthentication(); this.RequiresClaims(new[] { "Admin" }); Post["/account/create"] = parameters => { var model = this.Bind<EditableAccount>(); var account = new Domain.Account(idGenerator.NextGuid(), model.Name, model.FirstName, model.LastName, model.Email); var password = account.GeneratePassword(); repository.Save(account); return Json(new { Account = new Account(account), Password = password }); }; Post["/account/update/{id:guid}"] = parameters => { var model = this.Bind<EditableAccount>(); var account = repository.GetById<Domain.Account>((Guid)parameters.id); if (account != null) { account.ChangeDetails(model.Name, model.FirstName, model.LastName, model.Email); repository.Save(account); return Json(new { Account = new Account(account) }); } return null; }; Post["/account/{id:guid}/newpassword"] = parameters => { var model = this.Bind<AccountNewPassword>(); var account = repository.GetById<Domain.Account>((Guid)parameters.id); if (account != null) { account.ChangePassword(model.Password); repository.Save(account); } return null; }; }
private async Task <PendingBasket> AddItemToBasketHandler(Command <AddItemToBasket> cmd) { var basket = await _repository.GetById(cmd.Payload.AggregateRootId); var changedBasket = ((PendingBasket)basket).AddItem( cmd.Payload.ProductId, cmd.Payload.ProductName, new UnitQuantity(cmd.Payload.Quantity), new Price(cmd.Payload.Price) ); await _repository.Save(changedBasket, cmd.Metadata.CorrelationId, cmd.Id); await _bus.Dispatch(changedBasket.UncommittedEvents); return(changedBasket); }
private async Task <Product> SetProductQuantityHandler(Command <SetProductQuantity> cmd) { var product = await _repository.GetById(cmd.Payload.AggregateRootId); var changedProduct = product.SetQuantity(new UnitQuantity(cmd.Payload.Quantity)); await _repository.Save(changedProduct, cmd.Metadata.CorrelationId, cmd.Id); await _bus.Dispatch(changedProduct.UncommittedEvents); return(changedProduct); }
public ClientModule(IAggregateRootRepository repository, IIdGenerator idGenerator) :base("/write/client") { this.RequiresAuthentication(); Post["/create"] = parameters => { var model = this.Bind<EditableClient>(); var client = new Domain.Client(idGenerator.NextGuid(), model.Name); repository.Save(client); return Json(new { Client = new Client(client) }); }; Post["/update/{id:guid}"] = parameters => { var model = this.Bind<EditableClient>(); var client = repository.GetById<Domain.Client>((Guid)parameters.id); if (client != null) { client.ChangeDetails(model.Name); repository.Save(client); return Json(new { Client = new Client(client) }); } return null; }; }
public ProjectModule(IAggregateRootRepository repository, IIdGenerator idGenerator) :base("/write/project") { this.RequiresAuthentication(); Post["/create"] = parameters => { var model = this.Bind<EditableProject>(); var client = repository.GetById<Domain.Client>(model.ClientId); var project = new Domain.Project(idGenerator.NextGuid(), model.Name, model.Description, client); repository.Save(project); return Json(new { Project = new Project(client, project) }); }; Post["/update/{id:guid}"] = parameters => { var model = this.Bind<EditableProject>(); var project = repository.GetById<Domain.Project>((Guid)parameters.id); if (project != null) { project.ChangeDetails(model.Name, model.Description); if (model.Hidden) project.Hide(); else project.Unhide(); repository.Save(project); var client = repository.GetById<Domain.Client>(project.ClientId); return Json(new { Project = new Project(client, project) }); } return null; }; Post["/updatetasks/{id:guid}"] = parameters => { var model = this.Bind<EditableProjectTasks>(); var project = repository.GetById<Domain.Project>((Guid)parameters.id); if (project != null) { project.ChangeTasks(model.Tasks.Select(t => new Domain.ValueObjects.Task { Name = t.Name, Rate = t.Rate }).ToArray()); repository.Save(project); var client = repository.GetById<Domain.Client>(project.ClientId); return Json(new { Project = new Project(client, project) }); } return null; }; }
public TimeRegistrationModule(IAggregateRootRepository repository, IIdGenerator idGenerator) : base("/write/timeregistration") { this.RequiresAuthentication(); Post["/create"] = parameters => { var model = this.Bind<EditableTimeRegistration>(); var client = repository.GetById<Domain.Client>(model.ClientId); var project = repository.GetById<Domain.Project>(model.ProjectId); var task = project.FindTask(model.Task); var date = Date.Parse(model.Date); var from = Time.Parse(model.From); var to = Time.Parse(model.To); var timeRegistration = new Domain.TimeRegistration(idGenerator.NextGuid(), client, project, task, model.Description, date, from, to); if (model.CorrectedIncome.HasValue) timeRegistration.CorrectIncome(model.CorrectedIncome.Value, model.CorrectedIncomeMessage); repository.Save(timeRegistration); return Json(new { TimeRegistration = new TimeRegistration(timeRegistration, client, project) }); }; Post["/update/{id:guid}"] = parameters => { var model = this.Bind<EditableTimeRegistration>(); var timeRegistration = repository.GetById<Domain.TimeRegistration>((Guid)parameters.id); if (timeRegistration != null) { var client = repository.GetById<Domain.Client>(model.ClientId); var project = repository.GetById<Domain.Project>(model.ProjectId); var task = project.FindTask(model.Task); var date = Date.Parse(model.Date); var from = Time.Parse(model.From); var to = Time.Parse(model.To); timeRegistration.ChangeDetails(client, project, task, model.Description, date, from, to); if (model.CorrectedIncome.HasValue) timeRegistration.CorrectIncome(model.CorrectedIncome.Value, model.CorrectedIncomeMessage); else timeRegistration.ClearCorrectedIncome(); if (model.RefreshRate) timeRegistration.RefreshRate(task); repository.Save(timeRegistration); return Json(new { TimeRegistration = new TimeRegistration(timeRegistration, client, project) }); } return null; }; Post["/delete/{id:guid}"] = parameters => { var timeRegistration = repository.GetById<Domain.TimeRegistration>((Guid)parameters.id); if (timeRegistration != null) { timeRegistration.Delete(); repository.Save(timeRegistration); } return null; }; }