CrewMemberAdd.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System.Security.Claims;
  2. using Web.Api.Common;
  3. using Web.Api.Extensions;
  4. using MediatR;
  5. namespace Web.Api.Endpoints.Studio.Crew;
  6. /// <summary>크루원 초대 발송 (검색으로 찾은 회원에게 알림 전송)</summary>
  7. internal sealed class CrewMemberAdd : IEndpoint
  8. {
  9. internal sealed record AddRequest(
  10. int CrewID,
  11. int TargetMemberID,
  12. string Nickname,
  13. string? Role,
  14. int SortOrder = 0
  15. );
  16. public void MapEndpoint(IEndpointRouteBuilder app)
  17. {
  18. app.MapPost("api/studio/crew/member/add", async (
  19. AddRequest body,
  20. ClaimsPrincipal user,
  21. ISender sender,
  22. CancellationToken ct
  23. ) => {
  24. var memberID = user.GetRequiredMemberID();
  25. var command = new Application.Features.Api.Crew.AddMember.Command(
  26. body.CrewID, body.TargetMemberID, memberID, body.Nickname, body.Role, body.SortOrder
  27. );
  28. var result = await sender.Send(command, ct);
  29. return result.Match(
  30. data => ApiResponse.Ok(data),
  31. CustomResults.Problem
  32. );
  33. })
  34. .WithTags("StudioCrew")
  35. .RequireAuthorization();
  36. }
  37. }