From 3260da9b78ac981e4e791045b05c086959f732f3 Mon Sep 17 00:00:00 2001 From: Sergey Karmanov Date: Sat, 29 Jul 2023 20:53:19 +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=BC=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D1=83?= =?UTF-8?q?=D1=8E=20=D1=81=D1=83=D0=BC=D0=BC=D1=83=20=D0=BA=D1=83=D1=80?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=20=D0=B2=D1=83=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PaydayBackend/Controllers/AdminController.cs | 21 ++++++--- PaydayBackend/Controllers/PublicController.cs | 19 +++++++- PaydayBackend/Models/LoanTerm.cs | 1 + PaydayBackend/Models/University.cs | 1 + PaydayBackend/Models/UniversityDTO.cs | 18 ++++++++ PaydayBackend/Models/UniversityDirection.cs | 6 ++- PaydayBackend/Services/IAdminService.cs | 6 +++ PaydayBackend/Services/IPublicService.cs | 45 +++++++++++++++++-- 8 files changed, 104 insertions(+), 13 deletions(-) create mode 100644 PaydayBackend/Models/UniversityDTO.cs diff --git a/PaydayBackend/Controllers/AdminController.cs b/PaydayBackend/Controllers/AdminController.cs index 2c86cb3..70a46d4 100644 --- a/PaydayBackend/Controllers/AdminController.cs +++ b/PaydayBackend/Controllers/AdminController.cs @@ -58,12 +58,12 @@ public class AdminController : ControllerBase /// /// Добавление условия кредитования /// - // [HttpPost("banks/{bank_id}/loanterms")] - // public async Task AddLoanTerm(long bank_id, [FromBody] LoanTerm loanTerm) - // { - // await _adminService.AddLoanTerm(loanTerm); - // return Ok(); - // } + [HttpPost("banks/{bank_id}/loanterms")] + public async Task AddLoanTerm(long bank_id, [FromBody] LoanTerm loanTerm) + { + await _adminService.AddLoanTerm(loanTerm); + return Ok(); + } /// /// Удаление ВСЕХ условий кредитования @@ -78,6 +78,15 @@ public class AdminController : ControllerBase // -------------------------------------| Университеты |------------------------------------- + /// + /// Получение всех университетов + /// + [HttpGet("universities")] + public async Task> GetUniversity() + { + return await _adminService.GetAllUniversity(); + } + /// /// Добавление университета /// diff --git a/PaydayBackend/Controllers/PublicController.cs b/PaydayBackend/Controllers/PublicController.cs index 2fb14ea..533809d 100644 --- a/PaydayBackend/Controllers/PublicController.cs +++ b/PaydayBackend/Controllers/PublicController.cs @@ -19,7 +19,7 @@ public class PublicController : ControllerBase /// Получение всех университетов /// [HttpGet("university")] - public async Task> GetAllUniversity() + public async Task> GetAllUniversity() { return await _publicService.GetAllUniversity(); } @@ -29,9 +29,24 @@ public class PublicController : ControllerBase /// /// Университет не найден [HttpGet("university/{id}/direction")] - public async Task>> GetAllUniversityDirectionByUniversityId(long id) + public async Task>> GetAllUniversityDirectionByUniversityId(long id) { var result = await _publicService.GetAllUniversityDirectionByUniversityId(id); + + if (result == null) + return BadRequest(); + + return Ok(result); + } + + /// + /// Получение всех возможных условий кредитования банков по стоймости направления + /// + /// Направление не найдено + [HttpGet("credit/direction/{id}")] + public async Task>> GetAllTermsWithDirection(long id) + { + var result = await _publicService.GetAllLoansByDirectionCost(id); if (result == null) return BadRequest(); diff --git a/PaydayBackend/Models/LoanTerm.cs b/PaydayBackend/Models/LoanTerm.cs index 7c27c9d..4484058 100644 --- a/PaydayBackend/Models/LoanTerm.cs +++ b/PaydayBackend/Models/LoanTerm.cs @@ -11,5 +11,6 @@ public class LoanTerm public float InterestRate { get; set; } public int LoanTermInMonths { get; set; } public string Documents { get; set; } + public long MaxCost { get; set; } } \ No newline at end of file diff --git a/PaydayBackend/Models/University.cs b/PaydayBackend/Models/University.cs index c99ae1b..b794eeb 100644 --- a/PaydayBackend/Models/University.cs +++ b/PaydayBackend/Models/University.cs @@ -9,4 +9,5 @@ public class University public string Name { get; set; } public string FullName { get; set; } public string ImageUrl { get; set; } + public List Directions { get; set; } = null; } \ No newline at end of file diff --git a/PaydayBackend/Models/UniversityDTO.cs b/PaydayBackend/Models/UniversityDTO.cs new file mode 100644 index 0000000..c011ef1 --- /dev/null +++ b/PaydayBackend/Models/UniversityDTO.cs @@ -0,0 +1,18 @@ +namespace PaydayBackend.Models; + +public class UniversityDto +{ + public UniversityDto(long id, string name, string fullName, string imageUrl) + { + Id = id; + Name = name; + FullName = fullName; + ImageUrl = imageUrl; + } + + public long Id { get; set; } + public string Name { get; set; } + public string FullName { get; set; } + public string ImageUrl { get; set; } + public long MinPlaceCost { get; set; } +} \ No newline at end of file diff --git a/PaydayBackend/Models/UniversityDirection.cs b/PaydayBackend/Models/UniversityDirection.cs index 7137a26..8c0b58c 100644 --- a/PaydayBackend/Models/UniversityDirection.cs +++ b/PaydayBackend/Models/UniversityDirection.cs @@ -1,12 +1,16 @@ using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; namespace PaydayBackend.Models; public class UniversityDirection { [Key] + public long Id { get; set; } + public University University { get; set; } + [ForeignKey("University")] public long UniversityId { get; set; } public string Code { get; set; } public string Name { get; set; } - public int BudgetPlaces { get; set; } + public int PlaceCost { get; set; } } \ No newline at end of file diff --git a/PaydayBackend/Services/IAdminService.cs b/PaydayBackend/Services/IAdminService.cs index 5fa9e82..8aeb359 100644 --- a/PaydayBackend/Services/IAdminService.cs +++ b/PaydayBackend/Services/IAdminService.cs @@ -12,6 +12,7 @@ public interface IAdminService public Task AddLoanTerm(LoanTerm loanTerm); public Task RemoveAllLoanTermsByBankId(long bankId); public Task?> GetAllLoanTermsByBankId(long bankId); + public Task> GetAllUniversity(); public Task AddUniversity(string shortName, string fullName, IFormFile file); public Task AddUniversityDirection(UniversityDirection universityDirection); } @@ -99,6 +100,11 @@ public class AdminService : IAdminService // -------------------------------------| Университеты |------------------------------------- + public async Task> GetAllUniversity() + { + return await _databaseContext.Universities.ToListAsync(); + } + public async Task AddUniversity(string shortName, string fullName, IFormFile file) { string sizeValidator = FileHelper.ValidateMaxFileSize(file, 5, new []{".png"}); diff --git a/PaydayBackend/Services/IPublicService.cs b/PaydayBackend/Services/IPublicService.cs index cfc8e99..04a2fc0 100644 --- a/PaydayBackend/Services/IPublicService.cs +++ b/PaydayBackend/Services/IPublicService.cs @@ -5,9 +5,10 @@ namespace PaydayBackend.Services; public interface IPublicService { - public Task> GetAllUniversity(); + public Task> GetAllUniversity(); public Task?> GetAllUniversityDirectionByUniversityId(long universityId); - // public Task GetAllLoansByDirectionCost(); + public Task?> GetAllLoansByDirectionCost(long universityDirectionId); + public Task GetMinPlaceCostByUniversityId(long universityId); } public class PublicService : IPublicService @@ -19,9 +20,21 @@ public class PublicService : IPublicService _databaseContext = databaseContext; } - public async Task> GetAllUniversity() + + + public async Task> GetAllUniversity() { - return await _databaseContext.Universities.ToListAsync(); + var result = await _databaseContext.Universities.ToListAsync(); + + List dtos = new List(); + foreach (var item in result) + { + UniversityDto dto = new UniversityDto(item.Id, item.Name, item.FullName, item.ImageUrl); + dto.MinPlaceCost = await GetMinPlaceCostByUniversityId(item.Id); + dtos.Add(dto); + } + + return dtos; } public async Task?> GetAllUniversityDirectionByUniversityId(long universityId) @@ -31,5 +44,29 @@ public class PublicService : IPublicService return await _databaseContext.UniversityDirections.Where(x => x.UniversityId == universityId).ToListAsync(); } + + public async Task?> GetAllLoansByDirectionCost(long universityDirectionId) + { + var universityDirection = await _databaseContext.UniversityDirections.Where(x => x.Id == universityDirectionId).FirstOrDefaultAsync(); + if (universityDirection == null) + return null; + + List loanTerms = await _databaseContext.LoanTerms.Where(x => x.MaxCost >= universityDirection.PlaceCost).ToListAsync(); + return loanTerms; + } + public async Task GetMinPlaceCostByUniversityId(long universityId) + { + try + { + var universityDirection = await _databaseContext.UniversityDirections.OrderByDescending(x => x.PlaceCost).Where(x => x.UniversityId == universityId).FirstAsync(); + if (universityDirection == null) + return 0; + return universityDirection.PlaceCost; + } + catch (Exception e) + { + return 0; + } + } } \ No newline at end of file