From 4d75bf1ec9f13ae52c794d82ee08a02a06536640 Mon Sep 17 00:00:00 2001 From: Sergey Karmanov Date: Sun, 30 Jul 2023 07:39:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BE=D1=84=D1=84=D0=B5=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=84=D1=80=D0=BE=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PaydayBackend/Controllers/AdminController.cs | 22 ----------- PaydayBackend/Controllers/BankController.cs | 30 +++++++++++++- PaydayBackend/Controllers/PublicController.cs | 25 +++++++++--- PaydayBackend/Models/LoanTerm.cs | 2 +- PaydayBackend/Models/Offers.cs | 10 +++++ PaydayBackend/Services/IAdminService.cs | 14 +++++-- PaydayBackend/Services/IPublicService.cs | 39 +++++++++++++++++++ 7 files changed, 109 insertions(+), 33 deletions(-) create mode 100644 PaydayBackend/Models/Offers.cs diff --git a/PaydayBackend/Controllers/AdminController.cs b/PaydayBackend/Controllers/AdminController.cs index ca7a3b2..0418c6f 100644 --- a/PaydayBackend/Controllers/AdminController.cs +++ b/PaydayBackend/Controllers/AdminController.cs @@ -54,28 +54,6 @@ public class AdminController : ControllerBase return Ok(result); } - // TODO: Переделать - /// - /// Добавление условия кредитования - /// - [HttpPost("banks/{bank_id}/loanterms")] - public async Task AddLoanTerm(long bank_id, [FromBody] LoanTerm loanTerm) - { - await _adminService.AddLoanTerm(loanTerm); - return Ok(); - } - - /// - /// Удаление ВСЕХ условий кредитования - /// - /// Банк не найден - [HttpDelete("banks/{bank_id}/loanterms")] - public async Task AddLoanTerm(long bankId) - { - var result = await _adminService.RemoveAllLoanTermsByBankId(bankId); - return result == "OK" ? Ok() : BadRequest(result); - } - // -------------------------------------| Университеты |------------------------------------- /// diff --git a/PaydayBackend/Controllers/BankController.cs b/PaydayBackend/Controllers/BankController.cs index ba328e0..b05cff8 100644 --- a/PaydayBackend/Controllers/BankController.cs +++ b/PaydayBackend/Controllers/BankController.cs @@ -1,4 +1,6 @@ using Microsoft.AspNetCore.Mvc; +using PaydayBackend.Models; +using PaydayBackend.Services; namespace PaydayBackend.Controllers; @@ -6,9 +8,35 @@ namespace PaydayBackend.Controllers; [ApiController] public class BankController : ControllerBase { + private readonly IAdminService _adminService; - public BankController() + public BankController(IAdminService adminService) { + _adminService = adminService; + } + + /// + /// Удаление ВСЕХ условий кредитования + /// + /// Банк не найден + [HttpDelete("banks/{bank_id}/loanterms")] + public async Task AddLoanTerm(long bankId) + { + var result = await _adminService.RemoveAllLoanTermsByBankId(bankId); + return result == "OK" ? Ok() : BadRequest(result); + } + + /// + /// Добавление условия кредитования + /// + [HttpPost("banks/loanterms")] + public async Task AddLoanTerm([FromBody] LoanTerm loanTerm) + { + var result = await _adminService.AddLoanTerm(loanTerm); + if (result != "OK") + return BadRequest(result); + + return Ok(); } } \ No newline at end of file diff --git a/PaydayBackend/Controllers/PublicController.cs b/PaydayBackend/Controllers/PublicController.cs index d0560a3..1aa2d00 100644 --- a/PaydayBackend/Controllers/PublicController.cs +++ b/PaydayBackend/Controllers/PublicController.cs @@ -53,15 +53,30 @@ public class PublicController : ControllerBase return Ok(result); } - + /// - /// Получение всех возможных условий кредитования банков по стоймости направления + /// Получение одно направление по Id /// /// Направление не найдено - [HttpGet("credit/direction/{id}")] - public async Task>> GetAllTermsWithDirection(long id) + [HttpGet("direction/{id}")] + public async Task>> GetDirectionById(long id) { - var result = await _publicService.GetAllLoansByDirectionCost(id); + var result = await _publicService.GetDirectionById(id); + + if (result == null) + return BadRequest(); + + return Ok(result); + } + + /// + /// Получение всех возможных кредитов по стоймости направления от каждого банка по одному + /// + /// Направление не найдено + [HttpGet("credit/direction/{directionId}")] + public async Task>> GetOffers(long directionId) + { + var result = await _publicService.GetOffers(directionId); if (result == null) return BadRequest(); diff --git a/PaydayBackend/Models/LoanTerm.cs b/PaydayBackend/Models/LoanTerm.cs index 4484058..dea1193 100644 --- a/PaydayBackend/Models/LoanTerm.cs +++ b/PaydayBackend/Models/LoanTerm.cs @@ -6,7 +6,7 @@ public class LoanTerm { [Key] public long Id { get; set; } - public Bank Bank { get; set; } + public long BankId { get; set; } [Range(0f, 360f)] public float InterestRate { get; set; } public int LoanTermInMonths { get; set; } diff --git a/PaydayBackend/Models/Offers.cs b/PaydayBackend/Models/Offers.cs new file mode 100644 index 0000000..164d89b --- /dev/null +++ b/PaydayBackend/Models/Offers.cs @@ -0,0 +1,10 @@ +namespace PaydayBackend.Models; + +public class Offer +{ + public long DirectionId { get; set; } + public string BankIconUrl { get; set; } + public string BankName { get; set; } + public float BankPercent { get; set; } + public long BankId { get; set; } +} \ No newline at end of file diff --git a/PaydayBackend/Services/IAdminService.cs b/PaydayBackend/Services/IAdminService.cs index 71a164e..b2b3f66 100644 --- a/PaydayBackend/Services/IAdminService.cs +++ b/PaydayBackend/Services/IAdminService.cs @@ -10,7 +10,7 @@ public interface IAdminService // Bank public Task AddBank(string bankName, IFormFile file); public Task> GetAllBanks(); - public Task AddLoanTerm(LoanTerm loanTerm); + public Task AddLoanTerm(LoanTerm loanTerm); public Task RemoveAllLoanTermsByBankId(long bankId); public Task?> GetAllLoanTermsByBankId(long bankId); // University @@ -84,10 +84,16 @@ public class AdminService : IAdminService return await _databaseContext.Banks.ToListAsync(); } - public async Task AddLoanTerm(LoanTerm loanTerm) + public async Task AddLoanTerm(LoanTerm loanTerm) { + var bank = await _databaseContext.Banks.Where(x => x.Id == loanTerm.BankId).FirstOrDefaultAsync(); + if (bank == null) + return "Bank not found"; + await _databaseContext.LoanTerms.AddAsync(loanTerm); await _databaseContext.SaveChangesAsync(); + + return "OK"; } public async Task RemoveAllLoanTermsByBankId(long bankId) @@ -95,7 +101,7 @@ public class AdminService : IAdminService if (await BankIsExist(bankId)) return "Bank not found"; - var result = await _databaseContext.LoanTerms.Where(x => x.Bank.Id == bankId).ToListAsync(); + var result = await _databaseContext.LoanTerms.Where(x => x.BankId == bankId).ToListAsync(); _databaseContext.LoanTerms.RemoveRange(result); return "OK"; @@ -106,7 +112,7 @@ public class AdminService : IAdminService if (await BankIsExist(bankId)) return null; - return await _databaseContext.LoanTerms.Where(x => x.Bank.Id == bankId).ToListAsync(); + return await _databaseContext.LoanTerms.Where(x => x.BankId == bankId).ToListAsync(); } // -------------------------------------| Университеты |------------------------------------- diff --git a/PaydayBackend/Services/IPublicService.cs b/PaydayBackend/Services/IPublicService.cs index ac5a596..b70b771 100644 --- a/PaydayBackend/Services/IPublicService.cs +++ b/PaydayBackend/Services/IPublicService.cs @@ -7,9 +7,11 @@ public interface IPublicService { public Task> GetAllUniversity(); public Task?> GetAllUniversityDirectionByUniversityId(long universityId); + public Task GetDirectionById(long directionId); public Task?> GetAllLoansByDirectionCost(long universityDirectionId); public Task GetMinPlaceCostByUniversityId(long universityId); public Task GetAllUniversityById(long universityId); + public Task?> GetOffers(long directionId); } public class PublicService : IPublicService @@ -52,6 +54,15 @@ public class PublicService : IPublicService return dtos; } + public async Task GetDirectionById(long directionId) + { + var result = await _databaseContext.UniversityDirections.Where(x => x.Id == directionId).FirstAsync(); + if (result == null) + return null; + + return new UniversityDirectionDto(result.Id, result.UniversityId, result.Code, result.Name, result.Url, result.PlaceCost); + } + public async Task?> GetAllLoansByDirectionCost(long universityDirectionId) { var universityDirection = await _databaseContext.UniversityDirections.Where(x => x.Id == universityDirectionId).FirstOrDefaultAsync(); @@ -85,4 +96,32 @@ public class PublicService : IPublicService return new UniversityDto(university.Id, university.Name, university.FullName, university.ImageUrl); } + + public async Task?> GetOffers(long directionId) + { + var universityDirection = await _databaseContext.UniversityDirections.Where(x => x.Id == directionId).FirstOrDefaultAsync(); + if (universityDirection == null) + return null; + + ///// + var banks = _databaseContext.Banks.ToList(); + List offers = new List(); + foreach (var bank in banks) + { + var offer = new Offer(); + offer.DirectionId = directionId; + offer.BankName = bank.Name; + offer.BankIconUrl = bank.ImageUrl; + offer.BankId = bank.Id; + var percente = await _databaseContext.LoanTerms.OrderBy(x => x.InterestRate).Where(x => x.BankId == bank.Id).FirstAsync(); + if (percente == null) + offer.BankPercent = 5; + else + offer.BankPercent = percente.InterestRate; + + offers.Add(offer); + } + + return offers; + } } \ No newline at end of file