CreateChannelTitle.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Security.Claims;
  2. using MediatR;
  3. using Web.Api.Common;
  4. using Web.Api.Extensions;
  5. namespace Web.Api.Endpoints.ChannelTitle;
  6. internal sealed class CreateChannelTitle : IEndpoint
  7. {
  8. public sealed record Request(
  9. int ChannelID,
  10. string Name,
  11. string? Description,
  12. long MinAmount,
  13. string Color,
  14. string? IconUrl
  15. );
  16. public void MapEndpoint(IEndpointRouteBuilder app)
  17. {
  18. app.MapPost("api/channel-titles", async (
  19. Request request,
  20. ClaimsPrincipal user,
  21. ISender sender,
  22. CancellationToken ct
  23. ) => {
  24. var memberID = user.GetMemberID();
  25. if (memberID is null)
  26. {
  27. return ApiResponse.Fail(StatusCodes.Status401Unauthorized, "Invalid token");
  28. }
  29. var command = new Application.Features.Api.ChannelTitle.CreateChannelTitle.Command(
  30. memberID.Value,
  31. request.ChannelID,
  32. request.Name,
  33. request.Description,
  34. request.MinAmount,
  35. request.Color,
  36. request.IconUrl
  37. );
  38. var result = await sender.Send(command, ct);
  39. return result.Match(
  40. id => ApiResponse.Ok(new { id }),
  41. CustomResults.Problem
  42. );
  43. })
  44. .WithTags("ChannelTitle")
  45. .RequireAuthorization();
  46. }
  47. }