Добавил поддержку загрузки изображений
All checks were successful
Create and publish a Docker image / build-and-push-image (push) Successful in 1m23s

This commit is contained in:
Sergey Karmanov 2023-07-29 10:38:00 +03:00
parent 26e982c55e
commit 9b0636beb7
Signed by: serega404
GPG Key ID: B6AD49C8C835460C
8 changed files with 186 additions and 93 deletions

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc; using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
using PaydayBackend.Models; using PaydayBackend.Models;
using PaydayBackend.Services; using PaydayBackend.Services;
@ -21,10 +22,13 @@ public class AdminController : ControllerBase
/// Добавление банка /// Добавление банка
/// </summary> /// </summary>
[HttpPost("banks")] [HttpPost("banks")]
public async Task<ActionResult> AddBank([FromBody] Bank bank) public async Task<ActionResult> AddBank([MaxLength(50)][MinLength(3)] string bankName, IFormFile file)
{ {
await _adminService.AddBank(bank); string result = await _adminService.AddBank(bankName, file);
return Ok(); if (result == "ОК")
return Ok(result);
return BadRequest(result);
} }
/// <summary> /// <summary>
@ -78,12 +82,17 @@ public class AdminController : ControllerBase
/// Добавление университета /// Добавление университета
/// </summary> /// </summary>
[HttpPost("universities")] [HttpPost("universities")]
public async Task<ActionResult> AddUniversity([FromBody] University university) public async Task<ActionResult> AddUniversity([MaxLength(15)][MinLength(2)] string shortName, [MaxLength(60)][MinLength(5)] string fullName, IFormFile file)
{ {
await _adminService.AddUniversity(university); string result = await _adminService.AddUniversity(shortName, fullName, file);
return Ok(); if (result == "ОК")
return Ok(result);
return BadRequest(result);
} }
// TODO: Переделать // TODO: Переделать
/// <summary> /// <summary>
/// Добавление направления университета /// Добавление направления университета

View File

@ -0,0 +1,14 @@
using Microsoft.AspNetCore.Mvc;
namespace PaydayBackend.Controllers;
[Route("v1/api/bank")]
[ApiController]
public class BankController : ControllerBase
{
public BankController()
{
}
}

View File

@ -0,0 +1,16 @@
using Microsoft.AspNetCore.Mvc;
namespace PaydayBackend.Controllers;
[Route("v1/api/university")]
[ApiController]
public class UniversityController : ControllerBase
{
public UniversityController()
{
}
}

View File

@ -30,6 +30,7 @@
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" /> <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.0.1" /> <PackageReference Include="SixLabors.ImageSharp" Version="3.0.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="UnidecodeSharpFork" Version="1.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,85 +0,0 @@
using Microsoft.EntityFrameworkCore;
using PaydayBackend.Models;
namespace PaydayBackend.Services;
public interface IAdminService
{
public Task AddBank(Bank bank);
public Task<IEnumerable<Bank>> GetAllBanks();
public Task AddLoanTerm(LoanTerm loanTerm);
public Task<string> RemoveAllLoanTermsByBankId(long bankId);
public Task<IEnumerable<LoanTerm>?> GetAllLoanTermsByBankId(long bankId);
public Task AddUniversity(University university);
public Task AddUniversityDirection(UniversityDirection universityDirection);
}
public class AdminService : IAdminService
{
private DatabaseContext _databaseContext;
private async Task<bool> 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<IEnumerable<Bank>> GetAllBanks()
{
return await _databaseContext.Banks.ToListAsync();
}
public async Task AddLoanTerm(LoanTerm loanTerm)
{
await _databaseContext.LoanTerms.AddAsync(loanTerm);
await _databaseContext.SaveChangesAsync();
}
public async Task<string> 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<IEnumerable<LoanTerm>?> 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();
}
}

View File

@ -0,0 +1,138 @@
using Microsoft.EntityFrameworkCore;
using PaydayBackend.Models;
using PaydayBackend.Utils;
using UnidecodeSharpFork;
namespace PaydayBackend.Services;
public interface IAdminService
{
public Task<string> AddBank(string bankName, IFormFile file);
public Task<IEnumerable<Bank>> GetAllBanks();
public Task AddLoanTerm(LoanTerm loanTerm);
public Task<string> RemoveAllLoanTermsByBankId(long bankId);
public Task<IEnumerable<LoanTerm>?> GetAllLoanTermsByBankId(long bankId);
public Task<string> 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<bool> 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<string> 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<IEnumerable<Bank>> GetAllBanks()
{
return await _databaseContext.Banks.ToListAsync();
}
public async Task AddLoanTerm(LoanTerm loanTerm)
{
await _databaseContext.LoanTerms.AddAsync(loanTerm);
await _databaseContext.SaveChangesAsync();
}
public async Task<string> 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<IEnumerable<LoanTerm>?> GetAllLoanTermsByBankId(long bankId)
{
if (await BankIsExist(bankId))
return null;
return await _databaseContext.LoanTerms.Where(x => x.Bank.Id == bankId).ToListAsync();
}
// -------------------------------------| Университеты |-------------------------------------
public async Task<string> 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();
}
}

View File

@ -46,7 +46,7 @@ public static class FileHelper
int minHeight = 0, int maxWidth = 0, int maxHeight = 0) int minHeight = 0, int maxWidth = 0, int maxHeight = 0)
{ {
if (allowedExtensions == null) if (allowedExtensions == null)
allowedExtensions = new[] {"JPG", "JPEG"}; allowedExtensions = new[] {"JPG", "JPEG", "PNG"};
try try
{ {