121 lines
4.1 KiB
C#
Raw Normal View History

2024-02-19 04:50:48 -05:00
using comissions.app.api.Extensions;
using comissions.app.api.Models.PortfolioModel;
using comissions.app.api.Models.Artist;
using comissions.app.api.Models.ArtistRequest;
using comissions.app.api.Services.Payment;
using comissions.app.api.Services.Storage;
using comissions.app.database;
using comissions.app.database.Entities;
2024-02-25 02:00:02 -05:00
using comissions.app.database.Models;
using comissions.app.database.Models.Request;
2024-02-19 04:50:48 -05:00
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
2024-02-22 20:36:37 -05:00
using Novu;
using Novu.DTO.Events;
2024-02-19 04:50:48 -05:00
namespace comissions.app.api.Controllers;
[ApiController]
[Route("api/[controller]")]
public class ArtistController : Controller
{
private readonly ApplicationDbContext _dbContext;
private readonly IStorageService _storageService;
private readonly IPaymentService _paymentService;
2024-02-22 20:36:37 -05:00
private readonly NovuClient _client;
2024-02-19 04:50:48 -05:00
2024-02-22 20:36:37 -05:00
public ArtistController(ApplicationDbContext dbContext, IPaymentService paymentService, IStorageService storageService, NovuClient client)
2024-02-19 04:50:48 -05:00
{
2024-02-22 20:36:37 -05:00
_client = client;
2024-02-19 04:50:48 -05:00
_paymentService = paymentService;
_storageService = storageService;
_dbContext = dbContext;
}
2024-03-01 16:20:32 -05:00
2024-02-19 04:50:48 -05:00
[HttpGet]
2024-02-19 19:22:38 -05:00
[Authorize("read:artist")]
2024-02-19 04:50:48 -05:00
public async Task<IActionResult> GetArtist()
{
var userId = User.GetUserId();
var Artist = await _dbContext.UserArtists.FirstOrDefaultAsync(Artist=>Artist.UserId==userId);
if(Artist==null)
{
var ArtistRequest = await _dbContext.ArtistRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false);
if(ArtistRequest!=null)
return BadRequest();
return Unauthorized();
}
var result = Artist.ToModel();
return Ok(result);
}
[HttpPut]
2024-02-19 19:22:38 -05:00
[Authorize("write:artist")]
2024-02-19 04:50:48 -05:00
public async Task<IActionResult> UpdateArtist(ArtistModel model)
{
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();
}
if (_dbContext.UserArtists.Any(x => x.Name.ToLower() == model.Name.ToLower()))
return BadRequest();
var updatedArtist = model.ToModel(existingArtist);
updatedArtist = _dbContext.UserArtists.Update(updatedArtist).Entity;
await _dbContext.SaveChangesAsync();
var result = updatedArtist.ToModel();
2024-02-22 20:36:37 -05:00
2024-02-22 21:07:58 -05:00
var newTriggerModel = new EventCreateData()
2024-02-22 20:36:37 -05:00
{
2024-02-22 20:44:19 -05:00
EventName = "artistupdated",
2024-02-22 20:36:37 -05:00
To =
{
SubscriberId = userId,
2024-02-22 20:44:19 -05:00
},
2024-02-22 21:07:58 -05:00
Payload = { }
};
await _client.Event.Trigger(newTriggerModel);
2024-02-22 20:36:37 -05:00
2024-02-19 04:50:48 -05:00
return Ok(result);
}
[HttpGet]
2024-02-19 19:22:38 -05:00
[Authorize("read:artist")]
2024-03-01 16:20:32 -05:00
[Route("Stats")]
public async Task<IActionResult> GetArtistStats()
2024-02-19 04:50:48 -05:00
{
var userId = User.GetUserId();
2024-03-01 16:20:32 -05:00
var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).FirstOrDefaultAsync(Artist=>Artist.UserId==userId);
2024-02-19 04:50:48 -05:00
if(Artist==null)
{
var ArtistRequest = await _dbContext.ArtistRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false);
if(ArtistRequest!=null)
return BadRequest();
return Unauthorized();
}
2024-03-01 16:20:32 -05:00
var result = Artist.ToStatsModel();
2024-02-19 04:50:48 -05:00
return Ok(result);
}
2024-03-01 16:20:32 -05:00
[HttpGet]
[Authorize("read:artist")]
[Route("Request")]
public async Task<IActionResult> GetArtistRequest()
{
var userId = User.GetUserId();
var ArtistRequest = await _dbContext.ArtistRequests.FirstOrDefaultAsync(request=>request.UserId==userId);
if(ArtistRequest==null)
return NotFound();
var result = ArtistRequest.ToModel();
return Ok(result);
}
2024-02-19 04:50:48 -05:00
}