public async Task <Result> Update(int agencyId, int discountId, EditDiscountRequest editDiscountRequest) { return(await Get(agencyId, discountId) .Check(_ => ValidatePercent(editDiscountRequest.DiscountPercent)) .Check(DiscountDoesntExceedMarkups) .BindWithTransaction(_context, discount => Result.Success(discount) .Tap(Update) .Bind(WriteAuditLog))); async Task <Result> DiscountDoesntExceedMarkups(Discount discount) { var markupPolicy = await _context.MarkupPolicies.SingleOrDefaultAsync(x => x.Id == discount.TargetPolicyId); var markupFunction = _templateService.CreateFunction(markupPolicy.TemplateId, markupPolicy.TemplateSettings); var allDiscounts = await _context.Discounts .Where(x => x.TargetPolicyId == markupPolicy.Id) .Where(d => d.TargetAgencyId == agencyId) .Where(d => d.IsActive) .Where(d => d.Id != discountId) // excluding discount we want to edit .Select(d => d.DiscountPercent) .ToListAsync(); allDiscounts.Add(editDiscountRequest.DiscountPercent); return(DiscountsValidator.DiscountsDontExceedMarkups(allDiscounts, markupFunction)); } Task Update(Discount discount) => this.Update(discount, d => { d.DiscountPercent = editDiscountRequest.DiscountPercent; d.Description = editDiscountRequest.Description; }); Task <Result> WriteAuditLog(Discount _) => _managementAuditService.Write(ManagementEventType.DiscountEdit, new DiscountEditEventData(agencyId, editDiscountRequest)); }
public async Task <IActionResult> UpdateDiscount(int agencyId, int discountId, [FromBody] EditDiscountRequest editDiscountRequest) { var(_, isFailure, error) = await _discountManagementService.Update(agencyId, discountId, editDiscountRequest); if (isFailure) { return(BadRequest(ProblemDetailsBuilder.Build(error))); } return(NoContent()); }
public DiscountEditEventData(int agencyId, EditDiscountRequest editDiscountRequest) { AgencyId = agencyId; EditDiscountRequest = editDiscountRequest; }