using BuddyFinance.Common.Encryption; using BuddyFinance.Integration; using BuddyFinance.Integration.Integrators; using BuddyFinance.Integration.Models; using BuddyFinance.Integration.Models.Enums; using BuddyFinance.Integration.Models.LoanOffers; using BuddyFinance.Integration.Models.LoanRequests; using BuddyFinance.Integration.Models.Loans; using BuddyFinance.Integration.Models.PreLoanRequests; using BuddyFinance.WebApi.Filters; using System.Collections.Generic; using System.Web.Http; namespace BuddyFinance.WebApi.Controllers { /// /// Manage Loans /// [RoutePrefix("api/loans")] [Authenticate] public class LoansController : BaseController { private LoansIntegrator _loanIntegrator; private LoanRequestIntegrator _loanRequestIntegrator; private PreLoanRequestIntergrator _preLoanRequestIntergrator; /// /// /// public LoansController() { _loanIntegrator = new LoansIntegrator(); _loanRequestIntegrator = new LoanRequestIntegrator(); _preLoanRequestIntergrator = new PreLoanRequestIntergrator(); } /// /// Get All Loans /// /// /// public GetLoansResult GetAll() { return _loanIntegrator.GetAllLoans(); } /// /// Get loan by id /// /// loan Id /// /// public GetLoanResult GetLoan(int id) { return _loanIntegrator.GetLoan(id); } /// /// Get Loan by Id(encrypted) /// /// Loan Id /// public GetLoanResult GetLoan(string loanId) { var id_ = loanId.ToDecryptedInt(); return _loanIntegrator.GetLoan(id_); } /// /// Returns a Request(Loan Request) Loan /// /// Loan Request Id /// public GetLoanResult GetRequestLoan(int loanRequestId) { return _loanIntegrator.GetRequestLoan(loanRequestId); } /// /// Get all user loans /// /// Profile Id /// public GetLoansResult GetLoans(int profileId) { return _loanIntegrator.GetLoans(profileId); } /// /// get all profile loans /// /// profile number /// public GetLoansResult GetLoans(string profileNumber) { return _loanIntegrator.GetLoans(profileNumber); } /// /// Returns loans per offer /// /// Offer Id /// [HttpGet] [Route("offerloans")] public GetLoansResult GetOfferLoans(int offerId) { return _loanIntegrator.GetOfferLoans(offerId); } /// /// /// /// /// [HttpPost] [Route("accept/{loanId}")] //api/loans/accept/1 public AcceptLoanResult AcceptLoan(int loanId) { // var id_ = loanId.ToDecryptedInt(); return _loanIntegrator.AcceptLoan(loanId); } /// /// /// /// /// [HttpPost] public RequestLoanResult RequestLoan(RequestLoanRequest request) { return _loanRequestIntegrator.RequestLoan(request); } /// /// /// /// /// /// [HttpPost] public UpdateLoanStatusResult UpdateLoanStatus(int loanId, int statusId) { return _loanIntegrator.UpdateLoanStatus(loanId, statusId); } /// /// /// /// public GetLoanRequestsResult GetAllLoanRequests() { return _loanRequestIntegrator.GetLoanRequests(); } /// /// /// /// /// public GetLoanRequestResult GetRequest(int loanRequestId) { return _loanRequestIntegrator.GetLoanRequest(loanRequestId); } /// /// /// /// /// public GetLoanRequestResult GetRequest(string requestId) { var loanRequestId = requestId.ToDecryptedInt(); return _loanRequestIntegrator.GetLoanRequest(loanRequestId); } /// /// /// /// /// public GetLoanRequestsResult GetRequests(int profileId) { return _loanRequestIntegrator.GetLoanRequests(profileId); } /// /// Get Loan Request for list display /// /// /// [HttpGet] [Route("borrowerloanrequests")] public BaseResult> BorrowerLoanRequests(string profileId) { return _loanRequestIntegrator.BorrowerLoanRequests(profileId); } /// /// /// /// /// [HttpGet] [Route("lenderloanrequests")] public GetLoanRequestsResult GetLoanRequests(int profileId) { return _loanRequestIntegrator.GetLenderLoanRequests(profileId); } /// /// /// /// /// /// public GetProfileEarningBracketResult GetProfileEarningBracket(double amount, int? profileId = null) { return _loanIntegrator.GetProfileEarningBracket(amount, profileId); } /// /// /// /// /// [HttpPost] public AcceptLoanRequest AcceptLoanRequest(int loanRequestId) { return _loanRequestIntegrator.AcceptLoanRequests(loanRequestId); } /// /// /// /// /// [HttpGet] public GetLoansOffersResults GetLoansOffersResults(int profileId) { return _loanIntegrator.GetLoansOffersLoan(profileId); } /// /// Return Loans that resulted from offers from this lender profileId /// /// Lender Profile Id /// [HttpGet] public GetLoansOffersResults LenderOfferedLoans(string profileId) { var profileId_ = profileId.ToDecryptedInt(); return _loanIntegrator.GetLoansOffersLoan(profileId_); } /// /// /// /// /// [HttpPost] [Route("saverepayment")] public BaseResult SaveLoanRepayment(LoanRepaymentModel model) { if (!ModelState.IsValid) { string errorMessage = ""; foreach (var modelValue in ModelState.Values) { foreach (var error in modelValue.Errors) { errorMessage += $"{error.ErrorMessage}"; } } return new BaseResult { Result = false, ErrorCode = (int)ResponseCodes.ValidationError, ErrorMessage = errorMessage }; } return _loanIntegrator.SaveLoanRepayment(model); } /// /// /// /// /// [HttpGet] [Route("getrepayment")] public GetLoanRepaymentResult GetLoanRepayment(int repaymentId) { return _loanIntegrator.GetLoanRepayment(repaymentId); } /// /// /// /// /// [HttpGet] [Route("getrepayments")] public GetLoanRepaymentsResult GetLoanRepayments(int loanId) { return _loanIntegrator.GetLoanRepayments(loanId); } /// /// Returns the schedule for a given loan Id /// /// Loan ID /// [HttpGet] [Route("getschedule")] public BaseResult> Schedule(int loanId) { return _loanIntegrator.Schedule(loanId); } /// /// /// /// /// [HttpPost] [Route("allocatepayout")] public AllocatePayoutResult AllocatePayout(LoanPayoutModel model) { if (!ModelState.IsValid) { string errorMessage = ""; foreach (var modelValue in ModelState.Values) { foreach (var error in modelValue.Errors) { errorMessage += $"{error.ErrorMessage}"; } } return new AllocatePayoutResult { Result = false, ErrorCode = (int)ResponseCodes.ValidationError, ErrorMessage = errorMessage }; } return _loanIntegrator.AllocatePayout(model); } /// /// Returns a loan statement /// /// Loan ID /// [HttpGet] [Route("statement")] public BaseResult Statement(int loanId) { if (loanId == 0) return new BaseResult() { ErrorCode = (int)ResponseCodes.ValidationError, ErrorMessage = "Invalid Loan Identifier" }; return _loanIntegrator.Statement(loanId); } /// /// Get all loan request applications /// /// [HttpGet] [Route("loanrequestapplications")] public GetPreLoanRequestsResults GetLoanRequestApplications() { return _preLoanRequestIntergrator.GetPreLoanRequests(); } /// /// /// /// /// [HttpPost] public PreLoanRequestResult PreLoanRequestResult(PreLoanRequestModel model) { return _preLoanRequestIntergrator.RequestPreLoanRequest(model); } /// /// /// /// /// [HttpGet] public GetPreLoanRequestsResults GetPreLoanRequestsResultsByProfile(int profileId) { return _preLoanRequestIntergrator.GetPreLoanRequestByProfile(profileId); } /// /// /// /// /// [HttpGet] public GetPreLoanRequestResult GetPreLoanRequest(int preLoanId) { return _preLoanRequestIntergrator.GetPreLoanRequest(preLoanId); } /// /// /// /// /// [HttpGet] public GetPreLoanRequestResult GetPreLoanRequest(string loanRequestId) { int preLoanId = loanRequestId.ToDecryptedInt(); return _preLoanRequestIntergrator.GetPreLoanRequest(preLoanId); } /// /// /// /// /// [HttpPost] public DeletePreLoanRequest DeletePreLoanRequest(int preLoanId) { return _preLoanRequestIntergrator.DeletePreLoan(preLoanId); } /// /// /// /// /// [HttpPost] [Route("deactivateloan")] public DeactivateLoanResults DeactivateLoan(DeactivateLoan model) { return _loanIntegrator.DeactivateLoan(model.LoanId, model.Comment); } /// /// /// /// /// [HttpPost] [Route("decline")] public DeactivateLoanResults DeclineLoan(DeactivateLoan model) { return _loanIntegrator.DeclineLoan(model.LoanId, model.Comment); } } }