Добавил поддержку загрузки изображений
All checks were successful
Create and publish a Docker image / build-and-push-image (push) Successful in 1m23s
All checks were successful
Create and publish a Docker image / build-and-push-image (push) Successful in 1m23s
This commit is contained in:
parent
26e982c55e
commit
9b0636beb7
@ -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>
|
||||||
/// Добавление направления университета
|
/// Добавление направления университета
|
||||||
|
14
PaydayBackend/Controllers/BankController.cs
Normal file
14
PaydayBackend/Controllers/BankController.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace PaydayBackend.Controllers;
|
||||||
|
|
||||||
|
[Route("v1/api/bank")]
|
||||||
|
[ApiController]
|
||||||
|
public class BankController : ControllerBase
|
||||||
|
{
|
||||||
|
|
||||||
|
public BankController()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
16
PaydayBackend/Controllers/UniversityController.cs
Normal file
16
PaydayBackend/Controllers/UniversityController.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace PaydayBackend.Controllers;
|
||||||
|
|
||||||
|
[Route("v1/api/university")]
|
||||||
|
[ApiController]
|
||||||
|
public class UniversityController : ControllerBase
|
||||||
|
{
|
||||||
|
|
||||||
|
public UniversityController()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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>
|
||||||
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
138
PaydayBackend/Services/IAdminService.cs
Normal file
138
PaydayBackend/Services/IAdminService.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user