2024-06-15 03:10:24 -04:00

121 lines
4.5 KiB
C#

using comissions.app.api.Entities;
using comissions.app.api.Extensions;
using comissions.app.api.Models.PortfolioModel;
using comissions.app.api.Services.Payment;
using comissions.app.api.Services.Storage;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Novu;
namespace comissions.app.api.Controllers;
[Route("api/Artist")]
public class ArtistPortfolioController: Controller
{
private readonly ApplicationDbContext _dbContext;
private readonly IStorageService _storageService;
private readonly IPaymentService _paymentService;
private readonly NovuClient _client;
public ArtistPortfolioController(ApplicationDbContext dbContext, IPaymentService paymentService, IStorageService storageService, NovuClient client)
{
_client = client;
_paymentService = paymentService;
_storageService = storageService;
_dbContext = dbContext;
}
[HttpGet]
[Authorize("read:artist")]
[Route("{sellerServiceId:int}/Portfolio/{portfolioId:int}")]
public async Task<IActionResult> GetPortfolio(int sellerServiceId, int portfolioId)
{
var userId = User.GetUserId();
var existingArtist = await _dbContext.UserArtists.FirstOrDefaultAsync(Artist=>Artist.UserId==userId);
if (existingArtist == null)
{
var ArtistRequest = await _dbContext.ArtistRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false);
if(ArtistRequest!=null)
return BadRequest();
return Unauthorized();
}
var portfolio = await _dbContext.ArtistPortfolioPieces
.FirstAsync(x => x.ArtistId == existingArtist.Id && x.Id==portfolioId);
var content = await _storageService.DownloadImageAsync(portfolio.FileReference);
return new FileStreamResult(content, "application/octet-stream");
}
[HttpGet]
[Route("Portfolio")]
[Authorize("read:artist")]
public async Task<IActionResult> GetPortfolio()
{
var userId = User.GetUserId();
var existingArtist = await _dbContext.UserArtists.FirstOrDefaultAsync(Artist=>Artist.UserId==userId);
if (existingArtist == null)
{
var ArtistRequest = await _dbContext.ArtistRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false);
if(ArtistRequest!=null)
return BadRequest();
return Unauthorized();
}
var portfolio = await _dbContext.ArtistPortfolioPieces.Where(x=>x.ArtistId==existingArtist.Id).ToListAsync();
var result = portfolio.Select(x=>x.ToModel()).ToList();
return Ok(result);
}
[HttpPost]
[Route("Portfolio")]
[Authorize("write:artist")]
public async Task<IActionResult> AddPortfolio()
{
var userId = User.GetUserId();
var existingArtist = await _dbContext.UserArtists.FirstOrDefaultAsync(Artist=>Artist.UserId==userId);
if (existingArtist == null)
{
return BadRequest();
}
var url = await _storageService.UploadImageAsync(HttpContext.Request.Body, Guid.NewGuid().ToString());
var portfolio = new ArtistPortfolioPiece()
{
ArtistId = existingArtist.Id,
FileReference = url
};
portfolio.ArtistId = existingArtist.Id;
_dbContext.ArtistPortfolioPieces.Add(portfolio);
await _dbContext.SaveChangesAsync();
var result = portfolio.ToModel();
return Ok(result);
}
[HttpDelete]
[Authorize("write:artist")]
[Route("Portfolio/{portfolioId:int}")]
public async Task<IActionResult> DeletePortfolio(int portfolioId)
{
var userId = User.GetUserId();
var existingArtist = await _dbContext.UserArtists.FirstOrDefaultAsync(Artist=>Artist.UserId==userId);
if (existingArtist == null)
{
var ArtistRequest = await _dbContext.ArtistRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false);
if(ArtistRequest!=null)
return BadRequest();
return Unauthorized();
}
var portfolio = await _dbContext.ArtistPortfolioPieces.FirstOrDefaultAsync(x=>x.Id==portfolioId);
if(portfolio==null)
return NotFound();
if(portfolio.ArtistId!=existingArtist.Id)
return BadRequest();
_dbContext.ArtistPortfolioPieces.Remove(portfolio);
await _dbContext.SaveChangesAsync();
return Ok();
}
}