Example #1
0
        /// <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;
            };
        }
Example #3
0
        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);
        }
Example #4
0
        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;
            };
        }