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