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