From facb0f88ce94ecdd1ea03af972264f19bb022582 Mon Sep 17 00:00:00 2001 From: Damien Ostler Date: Fri, 1 Mar 2024 16:20:32 -0500 Subject: [PATCH] feat: cleanup controllers --- .../Controllers/ArtistController.cs | 295 +------------ .../Controllers/ArtistPageController.cs | 63 +++ .../Controllers/ArtistPaymentController.cs | 106 +++++ .../Controllers/ArtistPortfolioController.cs | 128 ++++++ .../Controllers/ArtistRequestsController.cs | 393 ++++++++++++++++++ .../Controllers/ArtistReviewsController.cs | 103 +++++ ...oller.cs => CustomerRequestsController.cs} | 330 +++++---------- ...ions.app.database.migrator.AssemblyInfo.cs | 2 +- ...database.migrator.AssemblyInfoInputs.cache | 2 +- 9 files changed, 911 insertions(+), 511 deletions(-) create mode 100644 src/comissions.app.api/Controllers/ArtistPageController.cs create mode 100644 src/comissions.app.api/Controllers/ArtistPaymentController.cs create mode 100644 src/comissions.app.api/Controllers/ArtistPortfolioController.cs create mode 100644 src/comissions.app.api/Controllers/ArtistRequestsController.cs create mode 100644 src/comissions.app.api/Controllers/ArtistReviewsController.cs rename src/comissions.app.api/Controllers/{RequestsController.cs => CustomerRequestsController.cs} (83%) diff --git a/src/comissions.app.api/Controllers/ArtistController.cs b/src/comissions.app.api/Controllers/ArtistController.cs index 527726b..979b11c 100644 --- a/src/comissions.app.api/Controllers/ArtistController.cs +++ b/src/comissions.app.api/Controllers/ArtistController.cs @@ -34,6 +34,7 @@ public class ArtistController : Controller _dbContext = dbContext; } + [HttpGet] [Authorize("read:artist")] public async Task GetArtist() @@ -51,103 +52,6 @@ public class ArtistController : Controller return Ok(result); } - [HttpGet] - [Authorize("read:artist")] - [Route("Reviews")] - public async Task GetArtistReviews([FromQuery]int offset = 0, [FromQuery]int limit = 10) - { - var userId = User.GetUserId(); - var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).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.Requests.Where(x=>x.Reviewed).Skip(offset).Take(limit).Select(x=> new RequestReviewModel() - { - RequestId = x.Id, - Message = x.ReviewMessage, - Rating = x.Rating.Value, - ReviewDate = x.ReviewDate - }).ToList(); - - return Ok(result); - } - - [HttpGet] - [Authorize("read:artist")] - [Route("Reviews/Count")] - public async Task ReviewCount() - { - var userId = User.GetUserId(); - var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).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.Requests.Where(x=>x.Reviewed).Select(x=> new RequestReviewModel() - { - RequestId = x.Id, - Message = x.ReviewMessage, - Rating = x.Rating.Value, - ReviewDate = x.ReviewDate - }).ToList().Count; - - return Ok(result); - } - - - [HttpGet] - [Authorize("read:artist")] - [Route("Stats")] - public async Task GetArtistStats() - { - var userId = User.GetUserId(); - var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).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.ToStatsModel(); - return Ok(result); - } - - [HttpGet] - [Authorize("read:artist")] - [Route("Payout")] - public async Task Payout() - { - var userId = User.GetUserId(); - var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).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 account = _paymentService.GetAccount(Artist.StripeAccountId); - var balance = _paymentService.GetBalance(Artist.StripeAccountId); - var pendingBalance = _paymentService.GetPendingBalance(Artist.StripeAccountId); - var result = new PayoutModel() - { - Enabled = account.PayoutsEnabled, - Balance = balance, - PendingBalance = pendingBalance, - PayoutUrl = _paymentService.CreateDashboardUrl(Artist.StripeAccountId) - }; - return Ok(result); - } - [HttpPut] [Authorize("write:artist")] public async Task UpdateArtist(ArtistModel model) @@ -184,6 +88,24 @@ public class ArtistController : Controller return Ok(result); } + [HttpGet] + [Authorize("read:artist")] + [Route("Stats")] + public async Task GetArtistStats() + { + var userId = User.GetUserId(); + var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).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.ToStatsModel(); + return Ok(result); + } + [HttpGet] [Authorize("read:artist")] [Route("Request")] @@ -197,41 +119,6 @@ public class ArtistController : Controller return Ok(result); } - [HttpGet] - [Authorize("read:artist")] - [Route("Page")] - public async Task GetArtistPage() - { - var userId = User.GetUserId(); - var Artist = await _dbContext.UserArtists.Include(x=>x.ArtistPageSettings).FirstOrDefaultAsync(artist=>artist.UserId==userId); - if(Artist==null) - return NotFound(); - var result = Artist.ArtistPageSettings.ToModel(); - return Ok(result); - } - - - [HttpPut] - [Authorize("write:artist")] - [Route("Page")] - public async Task UpdateArtistPage([FromBody]ArtistPageSettingsModel model) - { - var userId = User.GetUserId(); - var existingArtist = await _dbContext.UserArtists - .Include(x=>x.ArtistPageSettings).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 updatedArtist = model.ToModel(existingArtist.ArtistPageSettings); - updatedArtist = _dbContext.ArtistPageSettings.Update(updatedArtist).Entity; - await _dbContext.SaveChangesAsync(); - var result = updatedArtist.ToModel(); - return Ok(result); - } [HttpPost] [Authorize("write:artist")] @@ -262,148 +149,4 @@ public class ArtistController : Controller return Ok(); } - [HttpGet] - [Authorize("read:artist")] - [Route("{sellerServiceId:int}/Portfolio/{portfolioId:int}")] - public async Task 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(); - } - if(existingArtist.Suspended) - return BadRequest(); - - 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 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(); - } - if(existingArtist.Suspended) - return BadRequest(); - 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 AddPortfolio() - { - var userId = User.GetUserId(); - var existingArtist = await _dbContext.UserArtists.FirstOrDefaultAsync(Artist=>Artist.UserId==userId); - if (existingArtist == null) - { - return BadRequest(); - } - - if(existingArtist.Suspended) - 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 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(); - } - if(existingArtist.Suspended) - return BadRequest(); - 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(); - } - - [HttpGet] - [Authorize("write:artist")] - [Route("Onboard")] - public async Task PaymentAccountStatus() - { - 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 BadRequest(); - } - - if(existingArtist.Suspended) - return BadRequest(); - var result = _paymentService.ArtistAccountIsOnboarded(existingArtist.StripeAccountId); - return Ok(new ArtistOnboardStatusModel(){ Onboarded= result }); - } - - [HttpGet] - [Authorize("write:artist")] - [Route("Onboard/Url")] - public async Task GetPaymentAccount() - { - 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(existingArtist.Suspended) - return BadRequest(); - if(existingArtist.StripeAccountId==null) - return BadRequest(); - - var result = _paymentService.CreateArtistAccountOnboardingUrl(existingArtist.StripeAccountId); - return Ok(new ArtistOnboardUrlModel() - { - OnboardUrl = result - }); - } - } \ No newline at end of file diff --git a/src/comissions.app.api/Controllers/ArtistPageController.cs b/src/comissions.app.api/Controllers/ArtistPageController.cs new file mode 100644 index 0000000..6bdd28c --- /dev/null +++ b/src/comissions.app.api/Controllers/ArtistPageController.cs @@ -0,0 +1,63 @@ +using comissions.app.api.Extensions; +using comissions.app.api.Models.Artist; +using comissions.app.api.Services.Payment; +using comissions.app.api.Services.Storage; +using comissions.app.database; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Novu; + +namespace comissions.app.api.Controllers; + + +[Route("api/Artist")] +public class ArtistPageController: Controller +{ + private readonly ApplicationDbContext _dbContext; + private readonly IStorageService _storageService; + private readonly IPaymentService _paymentService; + private readonly NovuClient _client; + + public ArtistPageController(ApplicationDbContext dbContext, IPaymentService paymentService, IStorageService storageService, NovuClient client) + { + _client = client; + _paymentService = paymentService; + _storageService = storageService; + _dbContext = dbContext; + } + [HttpGet] + [Authorize("read:artist")] + [Route("Page")] + public async Task GetArtistPage() + { + var userId = User.GetUserId(); + var Artist = await _dbContext.UserArtists.Include(x=>x.ArtistPageSettings).FirstOrDefaultAsync(artist=>artist.UserId==userId); + if(Artist==null) + return NotFound(); + var result = Artist.ArtistPageSettings.ToModel(); + return Ok(result); + } + + [HttpPut] + [Authorize("write:artist")] + [Route("Page")] + public async Task UpdateArtistPage([FromBody]ArtistPageSettingsModel model) + { + var userId = User.GetUserId(); + var existingArtist = await _dbContext.UserArtists + .Include(x=>x.ArtistPageSettings).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 updatedArtist = model.ToModel(existingArtist.ArtistPageSettings); + updatedArtist = _dbContext.ArtistPageSettings.Update(updatedArtist).Entity; + await _dbContext.SaveChangesAsync(); + var result = updatedArtist.ToModel(); + return Ok(result); + } +} \ No newline at end of file diff --git a/src/comissions.app.api/Controllers/ArtistPaymentController.cs b/src/comissions.app.api/Controllers/ArtistPaymentController.cs new file mode 100644 index 0000000..ff6a9c4 --- /dev/null +++ b/src/comissions.app.api/Controllers/ArtistPaymentController.cs @@ -0,0 +1,106 @@ +using comissions.app.api.Extensions; +using comissions.app.api.Models.Artist; +using comissions.app.api.Services.Payment; +using comissions.app.api.Services.Storage; +using comissions.app.database; +using comissions.app.database.Entities; +using comissions.app.database.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Novu; + +namespace comissions.app.api.Controllers; + +public class ArtistPaymentController:Controller +{ + + private readonly ApplicationDbContext _dbContext; + private readonly IStorageService _storageService; + private readonly IPaymentService _paymentService; + private readonly NovuClient _client; + + public ArtistPaymentController(ApplicationDbContext dbContext, IPaymentService paymentService, IStorageService storageService, NovuClient client) + { + _client = client; + _paymentService = paymentService; + _storageService = storageService; + _dbContext = dbContext; + } + + + [HttpGet] + [Authorize("read:artist")] + [Route("Payout")] + public async Task Payout() + { + var userId = User.GetUserId(); + var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).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 account = _paymentService.GetAccount(Artist.StripeAccountId); + var balance = _paymentService.GetBalance(Artist.StripeAccountId); + var pendingBalance = _paymentService.GetPendingBalance(Artist.StripeAccountId); + var result = new PayoutModel() + { + Enabled = account.PayoutsEnabled, + Balance = balance, + PendingBalance = pendingBalance, + PayoutUrl = _paymentService.CreateDashboardUrl(Artist.StripeAccountId) + }; + return Ok(result); + } + + [HttpGet] + [Authorize("write:artist")] + [Route("Onboard")] + public async Task PaymentAccountStatus() + { + 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 BadRequest(); + } + + if(existingArtist.Suspended) + return BadRequest(); + var result = _paymentService.ArtistAccountIsOnboarded(existingArtist.StripeAccountId); + return Ok(new ArtistOnboardStatusModel(){ Onboarded= result }); + } + + [HttpGet] + [Authorize("write:artist")] + [Route("Onboard/Url")] + public async Task GetPaymentAccount() + { + 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(existingArtist.Suspended) + return BadRequest(); + if(existingArtist.StripeAccountId==null) + return BadRequest(); + + var result = _paymentService.CreateArtistAccountOnboardingUrl(existingArtist.StripeAccountId); + return Ok(new ArtistOnboardUrlModel() + { + OnboardUrl = result + }); + } +} \ No newline at end of file diff --git a/src/comissions.app.api/Controllers/ArtistPortfolioController.cs b/src/comissions.app.api/Controllers/ArtistPortfolioController.cs new file mode 100644 index 0000000..6e97a17 --- /dev/null +++ b/src/comissions.app.api/Controllers/ArtistPortfolioController.cs @@ -0,0 +1,128 @@ +using comissions.app.api.Extensions; +using comissions.app.api.Models.PortfolioModel; +using comissions.app.api.Services.Payment; +using comissions.app.api.Services.Storage; +using comissions.app.database; +using comissions.app.database.Entities; +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 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(); + } + if(existingArtist.Suspended) + return BadRequest(); + + 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 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(); + } + if(existingArtist.Suspended) + return BadRequest(); + 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 AddPortfolio() + { + var userId = User.GetUserId(); + var existingArtist = await _dbContext.UserArtists.FirstOrDefaultAsync(Artist=>Artist.UserId==userId); + if (existingArtist == null) + { + return BadRequest(); + } + + if(existingArtist.Suspended) + 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 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(); + } + if(existingArtist.Suspended) + return BadRequest(); + 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(); + } +} \ No newline at end of file diff --git a/src/comissions.app.api/Controllers/ArtistRequestsController.cs b/src/comissions.app.api/Controllers/ArtistRequestsController.cs new file mode 100644 index 0000000..87fa342 --- /dev/null +++ b/src/comissions.app.api/Controllers/ArtistRequestsController.cs @@ -0,0 +1,393 @@ +using comissions.app.api.Extensions; +using comissions.app.api.Services.Payment; +using comissions.app.api.Services.Storage; +using comissions.app.database; +using comissions.app.database.Entities; +using comissions.app.database.Models.Request; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Novu; +using Novu.DTO.Events; + +namespace comissions.app.api.Controllers; + +[Route("api/Requests")] +public class ArtistRequestsController: Controller +{ + + private readonly ApplicationDbContext _dbContext; + private readonly IStorageService _storageService; + private readonly IPaymentService _paymentService; + private readonly NovuClient _client; + private readonly string _webHookSecret; + + public ArtistRequestsController(ApplicationDbContext dbContext, NovuClient client, IPaymentService paymentService, IStorageService storageService, IConfiguration configuration) + { + _client = client; + _webHookSecret = configuration.GetValue("Stripe:WebHookSecret"); + _paymentService = paymentService; + _storageService = storageService; + _dbContext = dbContext; + } + + + + [HttpGet] + [Route("Artist/{requestId:int}/References")] + [Authorize("read:request")] + public async Task GetArtistReferences(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var references = await _dbContext.RequestReferences + .Where(x=>x.RequestId==requestId) + .ToListAsync(); + var result = references.Select(x=>x.ToModel()).ToList(); + return Ok(result); + } + + [HttpGet] + [Route("Artist/{requestId:int}/References/Count")] + [Authorize("read:request")] + public async Task GetArtistReferencesCount(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var references = await _dbContext.RequestReferences + .Where(x=>x.RequestId==requestId) + .ToListAsync(); + var result = references.Select(x=>x.ToModel()).Count(); + return Ok(result); + } + + [HttpGet] + [Route("Artist/{requestId:int}/References/{referenceId:int}")] + [Authorize("read:request")] + public async Task GetArtistReferenceImage(int requestId, int referenceId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var reference = await _dbContext.RequestReferences + .Where(x=>x.RequestId==requestId) + .FirstOrDefaultAsync(x=>x.Id==referenceId); + if(reference==null) + return NotFound(); + var content = await _storageService.DownloadImageAsync(reference.FileReference); + return new FileStreamResult(content, "application/octet-stream"); + } + + [HttpGet] + [Route("Artist/{requestId:int}/Assets")] + [Authorize("read:request")] + public async Task GetArtistAssets(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var references = await _dbContext.RequestAssets + .Where(x=>x.RequestId==requestId) + .ToListAsync(); + var result = references.Select(x=>x.ToModel()).ToList(); + return Ok(result); + } + + [HttpGet] + [Route("Artist/{requestId:int}/Assets/Count")] + [Authorize("read:request")] + public async Task GetArtistAssetsCount(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var references = await _dbContext.RequestAssets + .Where(x=>x.RequestId==requestId) + .ToListAsync(); + var result = references.Select(x=>x.ToModel()).Count(); + return Ok(result); + } + + [HttpGet] + [Route("Artist/{requestId:int}/Assets/{referenceId:int}")] + [Authorize("read:request")] + public async Task GetArtistAssetImage(int requestId, int referenceId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var reference = await _dbContext.RequestAssets + .Where(x=>x.RequestId==requestId) + .FirstOrDefaultAsync(x=>x.Id==referenceId); + if(reference==null) + return NotFound(); + var content = await _storageService.DownloadImageAsync(reference.FileReference); + return new FileStreamResult(content, "application/octet-stream"); + } + + + [HttpPost] + [Route("Artist/{requestId:int}/References")] + [Authorize("write:request")] + public async Task AddArtistAsset(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + + if(request.Accepted==false) + return BadRequest("Request has not been accepted."); + + if(request.Paid==false) + return BadRequest("Request has not been paid."); + + if(request.Completed) + return BadRequest("Request has already been completed."); + + var references = await _dbContext.RequestAssets + .Where(x=>x.RequestId==requestId) + .ToListAsync(); + + if(references.Count>=10) + return BadRequest("You can only add 10 assets to a request."); + + + + var url = await _storageService.UploadImageAsync(HttpContext.Request.Body, Guid.NewGuid().ToString()); + var requestReference = new RequestAsset() + { + RequestId = request.Id, + FileReference = url + }; + _dbContext.RequestAssets.Add(requestReference); + await _dbContext.SaveChangesAsync(); + var result = requestReference.ToModel(); + return Ok(result); + } + + + + + + + [Authorize("read:request")] + [HttpGet] + [Route("Artist")] + public async Task GetArtistRequests(string search="",int offset = 0, int pageSize = 10) + { + var userId = User.GetUserId(); + var query = _dbContext.Requests.Include(x=>x.Artist) + .Where(x => x.Artist.UserId == userId); + + + if (!string.IsNullOrWhiteSpace(search)) + { + query = query.Where(x => x.Artist.Name.Contains(search) || x.Message.Contains(search)); + } + + var requests = await query + .Include(x => x.Artist) + .Skip(offset) + .Take(pageSize) + .ToListAsync(); + + var result = requests.Select(x => x.ToModel()).ToList(); + return Ok(result); + } + + [Authorize("read:request")] + [HttpGet] + [Route("Artist/Count")] + public async Task GetArtistRequestCount(string search="") + { + var userId = User.GetUserId(); + var query = _dbContext.Requests.Include(x=>x.Artist) + .Where(x => x.Artist.UserId == userId); + + if (!string.IsNullOrWhiteSpace(search)) + { + query = query.Where(x => x.Artist.Name.Contains(search) || x.Message.Contains(search)); + } + + var result = query.Count(); + return Ok(result); + } + + [Authorize("read:request")] + [HttpGet] + [Route("Artist/{requestId:int}")] + public async Task GetArtistRequest(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Include(x=>x.Artist) + .Where(x=>x.Artist.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var result = request.ToModel(); + return Ok(result); + } + + [Authorize("write:request")] + [HttpPut] + [Route("Artist/{requestId:int}/Complete")] + public async Task CompleteRequest(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Include(x=>x.RequestAssets) + .Include(x=>x.RequestReferences) + .Include(x=>x.Artist) + .Where(x=>x.Artist.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + + if(request.RequestAssets.Count()==0) + return BadRequest("You must add at least one asset to complete the request."); + + if(request.Accepted==false) + return BadRequest("Request has not been accepted."); + + if (request.Declined) + return BadRequest("Request has already been declined."); + + if(request==null) + return NotFound(); + + request.Completed = true; + request.CompletedDate = DateTime.UtcNow; + _dbContext.Entry(request).State = EntityState.Modified; + await _dbContext.SaveChangesAsync(); + + var result = request.ToModel(); + var newTriggerModel = new EventCreateData() + { + EventName = "requestcompleted", + To = + { + SubscriberId = request.UserId + }, + Payload = { } + }; + await _client.Event.Trigger(newTriggerModel); + return Ok(result); + } + + + [Authorize("write:request")] + [HttpPut] + [Route("Artist/{requestId:int}/Accept")] + public async Task AcceptRequest(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Include(x=>x.Artist) + .Where(x=>x.Artist.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + + if(request.Completed) + return BadRequest("Request has already been completed."); + + if(request.Accepted) + return BadRequest("Request has already been accepted."); + + if (request.Declined) + return BadRequest("Request has already been declined."); + + if(request==null) + return NotFound(); + var paymentUrl = _paymentService.Charge(request.Id,request.Artist.StripeAccountId,Convert.ToDouble(request.Amount)); + request.Accepted = true; + request.AcceptedDate = DateTime.UtcNow; + request.Paid = false; + request.PaymentUrl = paymentUrl; + _dbContext.Entry(request).State = EntityState.Modified; + await _dbContext.SaveChangesAsync(); + var newTriggerModel = new EventCreateData() + { + EventName = "requestacceptedbuyer", + To = + { + SubscriberId = request.UserId + }, + Payload = { } + }; + await _client.Event.Trigger(newTriggerModel); + var newTriggerArtistModel = new EventCreateData() + { + EventName = "requestacceptedartist", + To = + { + SubscriberId = request.Artist.UserId + }, + Payload = { } + }; + await _client.Event.Trigger(newTriggerModel); + + var result = request.ToModel(); + return Ok(result); + } + + + [Authorize("write:request")] + [HttpPut] + [Route("Artist/{requestId:int}/Deny")] + public async Task DenyRequest(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Include(x=>x.Artist) + .Where(x=>x.Artist.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + + if(request.Completed) + return BadRequest("Request has already been completed."); + + if(request.Accepted) + return BadRequest("Request has already been accepted."); + + if (request.Declined) + return BadRequest("Request has already been declined."); + request.Declined = true; + request.DeclinedDate = DateTime.UtcNow; + _dbContext.Entry(request).State = EntityState.Modified; + await _dbContext.SaveChangesAsync(); + var result = request.ToModel(); + var newTriggerModel = new EventCreateData() + { + EventName = "requestdenied", + To = + { + SubscriberId = request.UserId + }, + Payload = { } + }; + await _client.Event.Trigger(newTriggerModel); + return Ok(result); + } +} \ No newline at end of file diff --git a/src/comissions.app.api/Controllers/ArtistReviewsController.cs b/src/comissions.app.api/Controllers/ArtistReviewsController.cs new file mode 100644 index 0000000..b2de271 --- /dev/null +++ b/src/comissions.app.api/Controllers/ArtistReviewsController.cs @@ -0,0 +1,103 @@ +using comissions.app.api.Extensions; +using comissions.app.api.Models.Artist; +using comissions.app.api.Services.Payment; +using comissions.app.api.Services.Storage; +using comissions.app.database; +using comissions.app.database.Models.Request; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Novu; + +namespace comissions.app.api.Controllers; + +[Route("api/Artist")] +public class ArtistReviewsController: Controller +{ + private readonly ApplicationDbContext _dbContext; + private readonly IStorageService _storageService; + private readonly IPaymentService _paymentService; + private readonly NovuClient _client; + + public ArtistReviewsController(ApplicationDbContext dbContext, IPaymentService paymentService, IStorageService storageService, NovuClient client) + { + _client = client; + _paymentService = paymentService; + _storageService = storageService; + _dbContext = dbContext; + } + + [HttpGet] + [Authorize("read:artist")] + [Route("Reviews")] + public async Task GetArtistReviews([FromQuery]int offset = 0, [FromQuery]int limit = 10) + { + var userId = User.GetUserId(); + var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).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.Requests.Where(x=>x.Reviewed).Skip(offset).Take(limit).Select(x=> new RequestReviewModel() + { + RequestId = x.Id, + Message = x.ReviewMessage, + Rating = x.Rating.Value, + ReviewDate = x.ReviewDate + }).ToList(); + + return Ok(result); + } + + [HttpGet] + [Authorize("read:artist")] + [Route("Reviews/Count")] + public async Task ReviewCount() + { + var userId = User.GetUserId(); + var Artist = await _dbContext.UserArtists.Include(x=>x.Requests).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.Requests.Where(x=>x.Reviewed).Select(x=> new RequestReviewModel() + { + RequestId = x.Id, + Message = x.ReviewMessage, + Rating = x.Rating.Value, + ReviewDate = x.ReviewDate + }).ToList().Count; + + return Ok(result); + } +} + + +// using comissions.app.api.Services.Payment; +// using comissions.app.api.Services.Storage; +// using comissions.app.database; +// using Novu; +// +// namespace comissions.app.api.Controllers; +//[Route("api/Artist")] +// public class ArtistReviews +// { +// private readonly ApplicationDbContext _dbContext; +// private readonly IStorageService _storageService; +// private readonly IPaymentService _paymentService; +// private readonly NovuClient _client; +// +// public ArtistReviews(ApplicationDbContext dbContext, IPaymentService paymentService, IStorageService storageService, NovuClient client) +// { +// _client = client; +// _paymentService = paymentService; +// _storageService = storageService; +// _dbContext = dbContext; +// } +// } \ No newline at end of file diff --git a/src/comissions.app.api/Controllers/RequestsController.cs b/src/comissions.app.api/Controllers/CustomerRequestsController.cs similarity index 83% rename from src/comissions.app.api/Controllers/RequestsController.cs rename to src/comissions.app.api/Controllers/CustomerRequestsController.cs index 8728d6f..e6ca34b 100644 --- a/src/comissions.app.api/Controllers/RequestsController.cs +++ b/src/comissions.app.api/Controllers/CustomerRequestsController.cs @@ -16,8 +16,8 @@ using Stripe.Checkout; namespace comissions.app.api.Controllers; [ApiController] -[Route("api/[controller]")] -public class RequestsController : Controller +[Route("api/Requests")] +public class CustomerRequestsController : Controller { private readonly ApplicationDbContext _dbContext; private readonly IStorageService _storageService; @@ -25,7 +25,7 @@ public class RequestsController : Controller private readonly NovuClient _client; private readonly string _webHookSecret; - public RequestsController(ApplicationDbContext dbContext, NovuClient client, IPaymentService paymentService, IStorageService storageService, IConfiguration configuration) + public CustomerRequestsController(ApplicationDbContext dbContext, NovuClient client, IPaymentService paymentService, IStorageService storageService, IConfiguration configuration) { _client = client; _webHookSecret = configuration.GetValue("Stripe:WebHookSecret"); @@ -662,7 +662,9 @@ public class RequestsController : Controller } return Ok(); } - + + + #region Customer [Authorize("read:request")] [HttpGet] [Route("Customer")] @@ -766,35 +768,10 @@ public class RequestsController : Controller return Ok(result); } - [Authorize("write:request")] - [HttpPost] - [Route("Artist/{requestId:int}/Asset")] - public async Task AddAsset(int requestId, List assetImages) - { - var userId = User.GetUserId(); - var request = await _dbContext.Requests - .Where(x=>x.UserId==userId) - .FirstOrDefaultAsync(x=>x.Id==requestId); - if(request==null) - return NotFound(); - - var references = new List(); - foreach (var file in assetImages) - { - var reference = new RequestAsset() - { - RequestId = requestId, - FileReference = await _storageService.UploadImageAsync(file.OpenReadStream(), Guid.NewGuid().ToString()) - }; - references.Add(reference); - } - _dbContext.RequestAssets.AddRange(references); - await _dbContext.SaveChangesAsync(); - return Ok(); - } [HttpGet] - [Route("Customer/{requestId:int}/Reference")] + [Route("Customer/{requestId:int}/References")] + [Authorize("read:request")] public async Task GetReferences(int requestId) { var userId = User.GetUserId(); @@ -811,7 +788,79 @@ public class RequestsController : Controller } [HttpGet] - [Route("Customer/{requestId:int}/Asset")] + [Route("Customer/{requestId:int}/References/Count")] + [Authorize("read:request")] + public async Task GetReferencesCount(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var references = await _dbContext.RequestReferences + .Where(x=>x.RequestId==requestId) + .ToListAsync(); + var result = references.Select(x=>x.ToModel()).Count(); + return Ok(result); + } + + [HttpGet] + [Route("Customer/{requestId:int}/References/{referenceId:int}")] + [Authorize("read:request")] + public async Task GetReferenceImage(int requestId, int referenceId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + var reference = await _dbContext.RequestReferences + .Where(x=>x.RequestId==requestId) + .FirstOrDefaultAsync(x=>x.Id==referenceId); + if(reference==null) + return NotFound(); + var content = await _storageService.DownloadImageAsync(reference.FileReference); + return new FileStreamResult(content, "application/octet-stream"); + } + + [HttpPost] + [Route("Customer/{requestId:int}/References")] + [Authorize("write:request")] + public async Task AddReference(int requestId) + { + var userId = User.GetUserId(); + var request = await _dbContext.Requests + .Where(x=>x.UserId==userId) + .FirstOrDefaultAsync(x=>x.Id==requestId); + if(request==null) + return NotFound(); + + if (request.Accepted || request.Declined) + return BadRequest("Request has already been accepted or declined."); + + var references = await _dbContext.RequestReferences + .Where(x=>x.RequestId==requestId) + .ToListAsync(); + if(references.Count>=10) + return BadRequest("You can only add 10 references to a request."); + + var url = await _storageService.UploadImageAsync(HttpContext.Request.Body, Guid.NewGuid().ToString()); + var requestReference = new RequestReference() + { + RequestId = request.Id, + FileReference = url + }; + _dbContext.RequestReferences.Add(requestReference); + await _dbContext.SaveChangesAsync(); + var result = requestReference.ToModel(); + return Ok(result); + } + + [HttpGet] + [Route("Customer/{requestId:int}/Assets")] + [Authorize("read:request")] public async Task GetAssets(int requestId) { var userId = User.GetUserId(); @@ -828,25 +877,9 @@ public class RequestsController : Controller } [HttpGet] - [Route("Artist/{requestId:int}/Reference")] - public async Task GetArtistReferences(int requestId) - { - var userId = User.GetUserId(); - var request = await _dbContext.Requests - .Where(x=>x.UserId==userId) - .FirstOrDefaultAsync(x=>x.Id==requestId); - if(request==null) - return NotFound(); - var references = await _dbContext.RequestReferences - .Where(x=>x.RequestId==requestId) - .ToListAsync(); - var result = references.Select(x=>x.ToModel()).ToList(); - return Ok(result); - } - - [HttpGet] - [Route("Artist/{requestId:int}/Asset")] - public async Task GetArtistAssets(int requestId) + [Route("Customer/{requestId:int}/Assets/Count")] + [Authorize("read:request")] + public async Task GetAssetsCount(int requestId) { var userId = User.GetUserId(); var request = await _dbContext.Requests @@ -857,202 +890,33 @@ public class RequestsController : Controller var references = await _dbContext.RequestAssets .Where(x=>x.RequestId==requestId) .ToListAsync(); - var result = references.Select(x=>x.ToModel()).ToList(); + var result = references.Select(x=>x.ToModel()).Count(); return Ok(result); } - - [Authorize("read:request")] + [HttpGet] - [Route("Artist")] - public async Task GetArtistRequests(string search="",int offset = 0, int pageSize = 10) - { - var userId = User.GetUserId(); - var query = _dbContext.Requests.Include(x=>x.Artist) - .Where(x => x.Artist.UserId == userId); - - - if (!string.IsNullOrWhiteSpace(search)) - { - query = query.Where(x => x.Artist.Name.Contains(search) || x.Message.Contains(search)); - } - - var requests = await query - .Include(x => x.Artist) - .Skip(offset) - .Take(pageSize) - .ToListAsync(); - - var result = requests.Select(x => x.ToModel()).ToList(); - return Ok(result); - } - + [Route("Customer/{requestId:int}/Assets/{referenceId:int}")] [Authorize("read:request")] - [HttpGet] - [Route("Artist/Count")] - public async Task GetArtistRequestCount(string search="") - { - var userId = User.GetUserId(); - var query = _dbContext.Requests.Include(x=>x.Artist) - .Where(x => x.Artist.UserId == userId); - - if (!string.IsNullOrWhiteSpace(search)) - { - query = query.Where(x => x.Artist.Name.Contains(search) || x.Message.Contains(search)); - } - - var result = query.Count(); - return Ok(result); - } - - [Authorize("read:request")] - [HttpGet] - [Route("Artist/{requestId:int}")] - public async Task GetArtistRequest(int requestId) + public async Task GetAssetImage(int requestId, int referenceId) { var userId = User.GetUserId(); var request = await _dbContext.Requests - .Include(x=>x.Artist) - .Where(x=>x.Artist.UserId==userId) + .Where(x=>x.UserId==userId) .FirstOrDefaultAsync(x=>x.Id==requestId); if(request==null) return NotFound(); - var result = request.ToModel(); - return Ok(result); + var reference = await _dbContext.RequestAssets + .Where(x=>x.RequestId==requestId) + .FirstOrDefaultAsync(x=>x.Id==referenceId); + if(reference==null) + return NotFound(); + var content = await _storageService.DownloadImageAsync(reference.FileReference); + return new FileStreamResult(content, "application/octet-stream"); } + #endregion - [Authorize("write:request")] - [HttpPut] - [Route("Artist/{requestId:int}/Complete")] - public async Task CompleteRequest(int requestId) - { - var userId = User.GetUserId(); - var request = await _dbContext.Requests - .Include(x=>x.Artist) - .Where(x=>x.Artist.UserId==userId) - .FirstOrDefaultAsync(x=>x.Id==requestId); - - if(request.Accepted==false) - return BadRequest("Request has not been accepted."); - - if (request.Declined) - return BadRequest("Request has already been declined."); - - if(request==null) - return NotFound(); - - request.Completed = true; - request.CompletedDate = DateTime.UtcNow; - _dbContext.Entry(request).State = EntityState.Modified; - await _dbContext.SaveChangesAsync(); - - var result = request.ToModel(); - var newTriggerModel = new EventCreateData() - { - EventName = "requestcompleted", - To = - { - SubscriberId = request.UserId - }, - Payload = { } - }; - await _client.Event.Trigger(newTriggerModel); - return Ok(result); - } - - [Authorize("write:request")] - [HttpPut] - [Route("Artist/{requestId:int}/Accept")] - public async Task AcceptRequest(int requestId) - { - var userId = User.GetUserId(); - var request = await _dbContext.Requests - .Include(x=>x.Artist) - .Where(x=>x.Artist.UserId==userId) - .FirstOrDefaultAsync(x=>x.Id==requestId); - - if(request.Completed) - return BadRequest("Request has already been completed."); - - if(request.Accepted) - return BadRequest("Request has already been accepted."); - - if (request.Declined) - return BadRequest("Request has already been declined."); - - if(request==null) - return NotFound(); - var paymentUrl = _paymentService.Charge(request.Id,request.Artist.StripeAccountId,Convert.ToDouble(request.Amount)); - request.Accepted = true; - request.AcceptedDate = DateTime.UtcNow; - request.Paid = false; - request.PaymentUrl = paymentUrl; - _dbContext.Entry(request).State = EntityState.Modified; - await _dbContext.SaveChangesAsync(); - var newTriggerModel = new EventCreateData() - { - EventName = "requestacceptedbuyer", - To = - { - SubscriberId = request.UserId - }, - Payload = { } - }; - await _client.Event.Trigger(newTriggerModel); - var newTriggerArtistModel = new EventCreateData() - { - EventName = "requestacceptedartist", - To = - { - SubscriberId = request.Artist.UserId - }, - Payload = { } - }; - await _client.Event.Trigger(newTriggerModel); - - var result = request.ToModel(); - return Ok(result); - } - - [Authorize("write:request")] - [HttpPut] - [Route("Artist/{requestId:int}/Deny")] - public async Task DenyRequest(int requestId) - { - var userId = User.GetUserId(); - var request = await _dbContext.Requests - .Include(x=>x.Artist) - .Where(x=>x.Artist.UserId==userId) - .FirstOrDefaultAsync(x=>x.Id==requestId); - if(request==null) - return NotFound(); - - if(request.Completed) - return BadRequest("Request has already been completed."); - - if(request.Accepted) - return BadRequest("Request has already been accepted."); - - if (request.Declined) - return BadRequest("Request has already been declined."); - request.Declined = true; - request.DeclinedDate = DateTime.UtcNow; - _dbContext.Entry(request).State = EntityState.Modified; - await _dbContext.SaveChangesAsync(); - var result = request.ToModel(); - var newTriggerModel = new EventCreateData() - { - EventName = "requestdenied", - To = - { - SubscriberId = request.UserId - }, - Payload = { } - }; - await _client.Event.Trigger(newTriggerModel); - return Ok(result); - } [Authorize("write:request")] [HttpPost] diff --git a/src/comissions.app.database.migrator/obj/Debug/net8.0/comissions.app.database.migrator.AssemblyInfo.cs b/src/comissions.app.database.migrator/obj/Debug/net8.0/comissions.app.database.migrator.AssemblyInfo.cs index 3a9a22a..735c270 100644 --- a/src/comissions.app.database.migrator/obj/Debug/net8.0/comissions.app.database.migrator.AssemblyInfo.cs +++ b/src/comissions.app.database.migrator/obj/Debug/net8.0/comissions.app.database.migrator.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("comissions.app.database.migrator")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c5fed0846312ca59c154d519173ea8bfac18d602")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+cc2c4ff3c89a7466e4e094e4da0675172ef50ce6")] [assembly: System.Reflection.AssemblyProductAttribute("comissions.app.database.migrator")] [assembly: System.Reflection.AssemblyTitleAttribute("comissions.app.database.migrator")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/src/comissions.app.database.migrator/obj/Debug/net8.0/comissions.app.database.migrator.AssemblyInfoInputs.cache b/src/comissions.app.database.migrator/obj/Debug/net8.0/comissions.app.database.migrator.AssemblyInfoInputs.cache index f91e5d8..298ae81 100644 --- a/src/comissions.app.database.migrator/obj/Debug/net8.0/comissions.app.database.migrator.AssemblyInfoInputs.cache +++ b/src/comissions.app.database.migrator/obj/Debug/net8.0/comissions.app.database.migrator.AssemblyInfoInputs.cache @@ -1 +1 @@ -423f68777d61ee74d51ce0198a0ec1b7acb5b22c296ca2f357c18da0a527af9c +c901efee444e48a2ac81df6448d2a1b2558f7eeb98830f81e82392ae9e03c84d