Exemple #1
0
        public async Task <IActionResult> RequestRefund([FromBody] RefundMessageDto refundMessage)
        {
            var customer = _usersRepository.GetCustomerById(Guid.Parse(User.Claims.FirstOrDefault(c => c.Type == Helpers.Constants.Strings.JwtClaimIdentifiers.CustomerId)?.Value));

            var trip = _tripsRepo.GetTrip(customer.Id, true);

            if (trip == null)
            {
                return(NotFound());
            }

            if (trip.DriverId == null)
            {
                ModelState.AddModelError(nameof(Trip), "Driver not assigned");
                return(BadRequest(ModelState));
            }

            var user = _usersRepository.GetCustomerById(trip.CustomerId);

            var refundCreationRes = Refund.Create((ulong)trip.ContractId, new DefaultControllerPattern(),
                                                  new User()
            {
                PrivateKey = user.Identity.PrivateKey
            }, ModelState);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var tripHistory = Helpers.ComplexMapping.HistoryFromTrip(trip);

            await _tripsRepo.AddTripHistory(tripHistory);

            var refundRequest = Mapper.Map <RefundRequest>(refundMessage);

            refundRequest.CreationTime = DateTime.UtcNow;

            refundRequest.CustomerId = customer.Id;

            refundRequest.TripHistoryId = tripHistory.Id;

            refundRequest.IdentityId = User.Claims
                                       .FirstOrDefault(c => c.Type == Helpers.Constants.Strings.JwtClaimIdentifiers.Id)?.Value;

            _tripsRepo.AddRefundRequest(refundRequest);

            _tripsRepo.RemoveTrip(customer.CurrentTrip.CustomerId);

            //TODO: Admin check refund

            return(Ok());
        }