Exemple #1
0
        public async Task <IActionResult> SubmitOrder([FromBody] CustomerSubmitOrderCommand model)
        {
            FirebaseUser user = HttpContext.GetFirebaseUser();

            model.firebaseId = user.UserId;
            ResultWrapper <CustomerSubmitOrderOutput> submitResult = await _mediator.Send(model);

            if (!submitResult.Status)
            {
                return(Ok(submitResult));
            }

            int orderId = submitResult.Result.Id;
            GetCustomerOrderDetailQuery detailModel = new GetCustomerOrderDetailQuery()
            {
                firebaseId = user.UserId,
                orderId    = orderId
            };
            ResultWrapper <GetCustomerOrderDetailOutput> result = await _mediator.Send(detailModel);

            return(Ok(result));
        }
Exemple #2
0
        public Task <ResultWrapper <CustomerSubmitOrderOutput> > Handle(CustomerSubmitOrderCommand request, CancellationToken cancellationToken)
        {
            ResultWrapper <CustomerSubmitOrderOutput> result = new ResultWrapper <CustomerSubmitOrderOutput>();

            try
            {
                using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    TUser tUser = _dbContext.TUser.FirstOrDefault(x => x.FireBaseId == request.firebaseId);
                    if (tUser == null)
                    {
                        result.Status  = false;
                        result.Message = "cannot find customer!";
                        return(Task.FromResult(result));
                    }

                    TOrder tOrder = _dbContext.TOrder
                                    .Include(x => x.TUser)
                                    .FirstOrDefault(x => x.TUser.FireBaseId == request.firebaseId && x.TrackingCode == request.UID.ToString());
                    if (tOrder == null)
                    {
                        result.Status  = false;
                        result.Message = "can't find order!";
                        return(Task.FromResult(result));
                    }

                    TPayment TPayment = _dbContext.TPayment
                                        .FirstOrDefault(x => x.UniqueId == request.UID && x.UserId == tUser.Id);
                    if (TPayment == null)
                    {
                        result.Status  = false;
                        result.Message = "cannot find uid!";
                        return(Task.FromResult(result));
                    }
                    if (TPayment.Used)
                    {
                        result.Status  = false;
                        result.Message = "already submited!";
                        return(Task.FromResult(result));
                    }

                    TPayment.Success = true;
                    TPayment.Used    = true;
                    _dbContext.TPayment.Update(TPayment);
                    _dbContext.SaveChanges();

                    tOrder.Submited = true;
                    _dbContext.TOrder.Update(tOrder);
                    _dbContext.SaveChanges();

                    transaction.Complete();

                    result.Status = true;
                    result.Result = new CustomerSubmitOrderOutput()
                    {
                        Id = tOrder.Id
                    };
                }
            }
            catch (Exception ex)
            {
                result.Status  = false;
                result.Message = ex.Message;
            }
            return(Task.FromResult(result));
        }