using comissions.app.api.Models.ArtistRequest; using comissions.app.api.Services.Payment; using comissions.app.database; using comissions.app.database.Entities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace comissions.app.api.Controllers; [ApiController] [Authorize("admin")] [Route("api/admin/[controller]")] public class AdminArtistRequestsController : Controller { private readonly ApplicationDbContext _dbContext; private readonly IPaymentService _paymentService; public AdminArtistRequestsController(ApplicationDbContext dbContext, IPaymentService paymentService) { _paymentService = paymentService; _dbContext = dbContext; } /// /// Gets a list of all of the requests from users to become a seller. /// /// The offset to start at. /// The amount of records to return. /// A list of seller profile requests [HttpGet] [Authorize("read:seller-profile-request")] public async Task GetArtistRequests(int offset = 0, int pageSize = 10) { var requests = _dbContext.ArtistRequests.Skip(offset).Take(pageSize).ToList(); var result = requests.Select(x=>x.ToModel()).ToList(); return Ok(result); } /// /// Gets the amount of requests there are from users to become a seller. /// /// The number of requests. [HttpGet] [Authorize("read:seller-profile-request")] [Route("Count")] public async Task GetArtistRequestsCount() { var result = _dbContext.ArtistRequests.Count(); return Ok(result); } /// /// Accepts a request to become a seller from a user. /// /// The ID of the user to accept the request for. /// The new seller profile. [HttpPut] [Authorize("write:seller-profile-request")] [Route("{userId}")] public async Task AcceptArtistRequest(string userId) { var request = await _dbContext.ArtistRequests.FirstOrDefaultAsync(request=>request.UserId==userId); if(request==null) return NotFound("No request for that user exists."); if (request.Accepted == true) return BadRequest("User is already a seller."); request.Accepted = true; request.AcceptedDate = DateTime.UtcNow; var accountId = _paymentService.CreateArtistAccount(); var newArtist = new UserArtist() { UserId = userId, AgeRestricted = false, Description = string.Empty, StripeAccountId = accountId, SocialMediaLink1 = "", SocialMediaLink2 = "", SocialMediaLink3 = "", SocialMediaLink4 = "", RequestGuidelines = "", Name = "Default Shop", }; var dbProfile = _dbContext.UserArtists.Add(newArtist).Entity; await _dbContext.SaveChangesAsync(); var newSettings = new ArtistPageSettings() { ArtistId = dbProfile.Id, BackgroundColor = "rgb(126, 115, 115)", HeaderColor = "rgb(194, 187, 187)", HeaderTextSize = 5, HeaderUseImage = false, HeaderImageUrl = "", DescriptionHeaderText = "", DescriptionHeaderColor = "rgb(194, 187, 187)", DescriptionHeaderSize = 3, DescriptionHeaderUseImage = false, DescriptionHeaderImageUrl = "", DescriptionBackgroundColor = "rgb(103, 97, 97)", DescriptionTextColor = "rgb(186, 186, 186)", DescriptionTextSize = 1, PortfolionHeaderText = "", PortfolionHeaderColor = "rgb(194, 187, 187)", PortfolionHeaderSize = 3, PortfolionHeaderUseImage = false, PortfolionHeaderImageUrl = "", PortfolioBackgroundColor = "rgb(78, 73, 73)", PortfolioMasonry = true, PortfolioColumns = 3, PortfolioEnabledScrolling = true, PortfolioMaximumSize = 50, RequestHeaderText = "", RequestHeaderColor = "rgb(194, 187, 187)", RequestHeaderSize = 3, RequestHeaderUseImage = false, RequestHeaderImageUrl = "", RequestBackgroundColor = "rgb(103, 97, 97)", RequestTermsColor = "rgb(194, 187, 187)", RequestButtonBGColor = "rgb(101, 97, 97)", RequestButtonTextColor = "rgb(194, 187, 187)", RequestButtonHoverBGColor = "rgb(98, 98, 98)" }; var dbSettings = _dbContext.ArtistPageSettings.Add(newSettings).Entity; await _dbContext.SaveChangesAsync(); request = _dbContext.ArtistRequests.Update(request).Entity; await _dbContext.SaveChangesAsync(); var result = request.ToModel(); return Ok(result); } }