예제 #1
0
        public IActionResult PostToken([FromRoute] string bvn, [FromQuery] string otp = "")
        {
            Logger.LogInformation("UsersController GetToken method called");

            ApplicationUser user = null;

            try
            {
                user = UserRepository.Get(x => x.BVN == bvn)
                       .FirstOrDefault();
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error while logging user in");
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new string[] { "Could not complete request. Please retry later, or contact the support team" })));
            }

            if (user == null || user.ShouldDelete)
            {
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new List <string> {
                    "You do not have an account with us kindly proceed to signup."
                })));
            }

            TransactionToken transactionToken = null;

            try
            {
                transactionToken = TransactionTokenRepository.Get(x => x.OTP == otp &&
                                                                  !x.IsUsed &&
                                                                  !(x.ExpiryDate < DateTime.Now))
                                   .FirstOrDefault();
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error while logging user in");
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new string[] { "Could not complete request. Please retry later, or contact the support team" })));
            }

            if (transactionToken == null)
            {
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new List <string> {
                    "Invalid or expired token. Please provide a valid token."
                })));
            }

            // TODO
            // Process payment

            transactionToken.IsUsed = true;

            try
            {
                TransactionTokenRepository.Update(transactionToken);
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error while logging user in");
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new string[] { "Could not complete request. Please retry later, or contact the support team" })));
            }

            return(Ok(new DataResponseDTO <string>("Payment Successful!")));
        }
예제 #2
0
        public IActionResult GetToken([FromRoute] string bvn, [FromQuery] string amount = "0.00")
        {
            Logger.LogInformation("UsersController GetToken method called");

            ApplicationUser user = null;

            try
            {
                user = UserRepository.Get(x => x.BVN == bvn)
                       .FirstOrDefault();
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error while logging user in");
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new string[] { "Could not complete request. Please retry later, or contact the support team" })));
            }

            if (user == null || user.ShouldDelete)
            {
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new List <string> {
                    "You do not have an account with us kindly proceed to signup."
                })));
            }

            var transactionToken = new TransactionToken();

            try
            {
                transactionToken.Amount = double.Parse(amount);
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error while logging user in");
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new string[] { "Invalid amount entered. Please enter a valid amount for the transaction" })));
            }

            transactionToken.UserId = user.Id;
            while (TransactionTokenRepository.Get(x => x.OTP == transactionToken.OTP).Count() != 0)
            {
                transactionToken.OTP = Helper.GetRandomToken(30);
            }

            try
            {
                TransactionTokenRepository.Insert(transactionToken);
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error while logging user in");
                return(BadRequest(new ErrorResponseDTO(HttpStatusCode.BadRequest,
                                                       new string[] { "Could not complete request. Please retry later, or contact the support team" })));
            }

            var transactionTokenDTO = Mapper.Map <TransactionTokenResponseDTO>(transactionToken);

            transactionTokenDTO.User = Mapper.Map <UserProfileSummaryDTO>(user);

            return(Ok(new DataResponseDTO <TransactionTokenResponseDTO>(transactionTokenDTO, HttpStatusCode.OK)));
        }