diff --git a/PaydayBackend/Controllers/AdminController.cs b/PaydayBackend/Controllers/AdminController.cs index 8e0c12e..2c86cb3 100644 --- a/PaydayBackend/Controllers/AdminController.cs +++ b/PaydayBackend/Controllers/AdminController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc; +using System.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Mvc; using PaydayBackend.Models; using PaydayBackend.Services; @@ -21,10 +22,13 @@ public class AdminController : ControllerBase /// Добавление банка /// [HttpPost("banks")] - public async Task AddBank([FromBody] Bank bank) + public async Task AddBank([MaxLength(50)][MinLength(3)] string bankName, IFormFile file) { - await _adminService.AddBank(bank); - return Ok(); + string result = await _adminService.AddBank(bankName, file); + if (result == "ОК") + return Ok(result); + + return BadRequest(result); } /// @@ -78,12 +82,17 @@ public class AdminController : ControllerBase /// Добавление университета /// [HttpPost("universities")] - public async Task AddUniversity([FromBody] University university) + public async Task AddUniversity([MaxLength(15)][MinLength(2)] string shortName, [MaxLength(60)][MinLength(5)] string fullName, IFormFile file) { - await _adminService.AddUniversity(university); - return Ok(); + string result = await _adminService.AddUniversity(shortName, fullName, file); + if (result == "ОК") + return Ok(result); + + return BadRequest(result); } + + // TODO: Переделать /// /// Добавление направления университета diff --git a/PaydayBackend/Controllers/BankController.cs b/PaydayBackend/Controllers/BankController.cs new file mode 100644 index 0000000..ba328e0 --- /dev/null +++ b/PaydayBackend/Controllers/BankController.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Mvc; + +namespace PaydayBackend.Controllers; + +[Route("v1/api/bank")] +[ApiController] +public class BankController : ControllerBase +{ + + public BankController() + { + } + +} \ No newline at end of file diff --git a/PaydayBackend/Controllers/UniversityController.cs b/PaydayBackend/Controllers/UniversityController.cs new file mode 100644 index 0000000..4e33106 --- /dev/null +++ b/PaydayBackend/Controllers/UniversityController.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc; + +namespace PaydayBackend.Controllers; + +[Route("v1/api/university")] +[ApiController] +public class UniversityController : ControllerBase +{ + + public UniversityController() + { + } + + + +} \ No newline at end of file diff --git a/PaydayBackend/PaydayBackend.csproj b/PaydayBackend/PaydayBackend.csproj index a576401..67e3874 100644 --- a/PaydayBackend/PaydayBackend.csproj +++ b/PaydayBackend/PaydayBackend.csproj @@ -30,6 +30,7 @@ + diff --git a/PaydayBackend/Services/AdminService.cs b/PaydayBackend/Services/AdminService.cs deleted file mode 100644 index 37c4909..0000000 --- a/PaydayBackend/Services/AdminService.cs +++ /dev/null @@ -1,85 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using PaydayBackend.Models; - -namespace PaydayBackend.Services; - -public interface IAdminService -{ - public Task AddBank(Bank bank); - public Task> GetAllBanks(); - public Task AddLoanTerm(LoanTerm loanTerm); - public Task RemoveAllLoanTermsByBankId(long bankId); - public Task?> GetAllLoanTermsByBankId(long bankId); - public Task AddUniversity(University university); - public Task AddUniversityDirection(UniversityDirection universityDirection); -} - -public class AdminService : IAdminService -{ - private DatabaseContext _databaseContext; - - private async Task BankIsExist(long bankId) - { - if (await _databaseContext.Banks.Where(x => x.Id == bankId).FirstOrDefaultAsync() == null) - return false; - - return true; - } - - public AdminService(DatabaseContext databaseContext) - { - _databaseContext = databaseContext; - } - - // -------------------------------------| Банки |------------------------------------- - - public async Task AddBank(Bank bank) - { - await _databaseContext.Banks.AddAsync(bank); - await _databaseContext.SaveChangesAsync(); - } - - public async Task> GetAllBanks() - { - return await _databaseContext.Banks.ToListAsync(); - } - - public async Task AddLoanTerm(LoanTerm loanTerm) - { - await _databaseContext.LoanTerms.AddAsync(loanTerm); - await _databaseContext.SaveChangesAsync(); - } - - public async Task RemoveAllLoanTermsByBankId(long bankId) - { - if (await BankIsExist(bankId)) - return "Bank not found"; - - var result = await _databaseContext.LoanTerms.Where(x => x.Bank.Id == bankId).ToListAsync(); - _databaseContext.LoanTerms.RemoveRange(result); - - return "OK"; - } - - public async Task?> GetAllLoanTermsByBankId(long bankId) - { - if (await BankIsExist(bankId)) - return null; - - return await _databaseContext.LoanTerms.Where(x => x.Bank.Id == bankId).ToListAsync(); - } - - // -------------------------------------| Университеты |------------------------------------- - - public async Task AddUniversity(University university) - { - await _databaseContext.Universities.AddAsync(university); - await _databaseContext.SaveChangesAsync(); - } - - public async Task AddUniversityDirection(UniversityDirection universityDirection) - { - await _databaseContext.UniversityDirections.AddAsync(universityDirection); - await _databaseContext.SaveChangesAsync(); - } -} \ No newline at end of file diff --git a/PaydayBackend/Services/IAdminService.cs b/PaydayBackend/Services/IAdminService.cs new file mode 100644 index 0000000..5fa9e82 --- /dev/null +++ b/PaydayBackend/Services/IAdminService.cs @@ -0,0 +1,138 @@ +using Microsoft.EntityFrameworkCore; +using PaydayBackend.Models; +using PaydayBackend.Utils; +using UnidecodeSharpFork; + +namespace PaydayBackend.Services; + +public interface IAdminService +{ + public Task AddBank(string bankName, IFormFile file); + public Task> GetAllBanks(); + public Task AddLoanTerm(LoanTerm loanTerm); + public Task RemoveAllLoanTermsByBankId(long bankId); + public Task?> GetAllLoanTermsByBankId(long bankId); + public Task AddUniversity(string shortName, string fullName, IFormFile file); + public Task AddUniversityDirection(UniversityDirection universityDirection); +} + +public class AdminService : IAdminService +{ + private readonly DatabaseContext _databaseContext; + private readonly IStorageService _storageService; + + private async Task BankIsExist(long bankId) + { + if (await _databaseContext.Banks.Where(x => x.Id == bankId).FirstOrDefaultAsync() == null) + return false; + + return true; + } + + public AdminService(DatabaseContext databaseContext, IStorageService storageService) + { + _databaseContext = databaseContext; + _storageService = storageService; + } + + // -------------------------------------| Банки |------------------------------------- + + public async Task AddBank(string bankName, IFormFile file) + { + string sizeValidator = FileHelper.ValidateMaxFileSize(file, 5, new []{".png"}); + if (sizeValidator != "OK") + return sizeValidator; + + var fileStream = new MemoryStream(); + await file.CopyToAsync(fileStream); + fileStream.Position = 0; + string imageValidator = await FileHelper.ValidateImage(fileStream, null, 200, 200); + if (imageValidator != "OK") + return imageValidator; + + await FileHelper.CropImage(fileStream); + + var filename = bankName.Unidecode().Replace(" ", "-") + ".png"; + if (await _storageService.UploadFile(fileStream, "logos", filename)) + { + var bank = new Bank(); + bank.Name = bankName; + bank.ImageUrl = "https://payday.zetcraft.ru/logos/" + filename; + + await _databaseContext.Banks.AddAsync(bank); + await _databaseContext.SaveChangesAsync(); + return "ОК"; + } + + return "Image not uploaded"; + } + + public async Task> GetAllBanks() + { + return await _databaseContext.Banks.ToListAsync(); + } + + public async Task AddLoanTerm(LoanTerm loanTerm) + { + await _databaseContext.LoanTerms.AddAsync(loanTerm); + await _databaseContext.SaveChangesAsync(); + } + + public async Task RemoveAllLoanTermsByBankId(long bankId) + { + if (await BankIsExist(bankId)) + return "Bank not found"; + + var result = await _databaseContext.LoanTerms.Where(x => x.Bank.Id == bankId).ToListAsync(); + _databaseContext.LoanTerms.RemoveRange(result); + + return "OK"; + } + + public async Task?> GetAllLoanTermsByBankId(long bankId) + { + if (await BankIsExist(bankId)) + return null; + + return await _databaseContext.LoanTerms.Where(x => x.Bank.Id == bankId).ToListAsync(); + } + + // -------------------------------------| Университеты |------------------------------------- + + public async Task AddUniversity(string shortName, string fullName, IFormFile file) + { + string sizeValidator = FileHelper.ValidateMaxFileSize(file, 5, new []{".png"}); + if (sizeValidator != "OK") + return sizeValidator; + + var fileStream = new MemoryStream(); + await file.CopyToAsync(fileStream); + fileStream.Position = 0; + string imageValidator = await FileHelper.ValidateImage(fileStream, null, 200, 200); + if (imageValidator != "OK") + return imageValidator; + + await FileHelper.CropImage(fileStream); + + var filename = shortName.Unidecode().Replace(" ", "-") + ".png"; + if (await _storageService.UploadFile(fileStream, "logos", filename)) + { + var university = new University(); + university.Name = shortName; + university.FullName = fullName; + university.ImageUrl = "https://payday.zetcraft.ru/logos/" + filename; + + await _databaseContext.Universities.AddAsync(university); + await _databaseContext.SaveChangesAsync(); + return "ОК"; + } + + return "Image not uploaded"; + } + + public async Task AddUniversityDirection(UniversityDirection universityDirection) + { + await _databaseContext.UniversityDirections.AddAsync(universityDirection); + await _databaseContext.SaveChangesAsync(); + } +} \ No newline at end of file diff --git a/PaydayBackend/Services/PublicService.cs b/PaydayBackend/Services/IPublicService.cs similarity index 100% rename from PaydayBackend/Services/PublicService.cs rename to PaydayBackend/Services/IPublicService.cs diff --git a/PaydayBackend/Utils/FileHelper.cs b/PaydayBackend/Utils/FileHelper.cs index c2fdb4f..6098815 100644 --- a/PaydayBackend/Utils/FileHelper.cs +++ b/PaydayBackend/Utils/FileHelper.cs @@ -46,7 +46,7 @@ public static class FileHelper int minHeight = 0, int maxWidth = 0, int maxHeight = 0) { if (allowedExtensions == null) - allowedExtensions = new[] {"JPG", "JPEG"}; + allowedExtensions = new[] {"JPG", "JPEG", "PNG"}; try {