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"));
        }