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;
|
2024-02-27 20:48:25 -05:00
|
|
|
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-03-09 21:18:55 -05:00
|
|
|
}
|
2024-02-19 04:50:48 -05:00
|
|
|
}
|