public async Task <Result> Handle(CreateDealCommand request, CancellationToken cancellationToken) { Deal deal; if (request.IsPackageDeal) { deal = Deal.CreatePackageDiscountDeal(request.Name, request.Description, request.DescriptionEng, request.ImageUrl, request.StartDate, request.EndDate, request.PackageDiscountModel); } else if (request.IsFixedPriceDiscount) { deal = Deal.CreateFixedDiscountDeal(request.Name, request.Description, request.DescriptionEng, request.ImageUrl, request.StartDate, request.EndDate, request.FixedPriceModel); } else { deal = Deal.CreatePercentageDiscountDeal(request.Name, request.Description, request.DescriptionEng, request.ImageUrl, request.StartDate, request.EndDate, request.PercentageModel); } await _context.Deals.AddAsync(deal, cancellationToken); var result = await _unitOfWork.CommitAsync(cancellationToken); return(result > 0 ? Result.Ok("promotion created") : Result.Failure("failed to complete action")); }