DonationRankConfig.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System.Security.Claims;
  2. using MediatR;
  3. using Web.Api.Common;
  4. using Web.Api.Extensions;
  5. using Domain.Entities.Donations.ValueObject;
  6. namespace Web.Api.Endpoints.Studio.Donation;
  7. /// <summary>후원 순위 위젯 설정 (스튜디오 전용)</summary>
  8. internal sealed class DonationRankConfig : IEndpoint
  9. {
  10. internal sealed record SaveRequest(
  11. int? ID,
  12. int ChannelID,
  13. string Title,
  14. int Theme,
  15. int Period,
  16. DateTime? StartAt,
  17. DateTime? EndAt,
  18. bool IsShowAmount,
  19. int MaxRankCount,
  20. bool? NameMode,
  21. bool IsActive,
  22. string? TitleFontFamily,
  23. int TitleFontSizePx,
  24. string TitleFontColor,
  25. int NameDisplayType,
  26. bool IsShowDonationCount,
  27. bool IsShowGradeIcon,
  28. bool IsShowMemberIcon,
  29. string? Rank1FontFamily,
  30. int Rank1FontSizePx,
  31. string Rank1FontColor,
  32. string? Rank2FontFamily,
  33. int Rank2FontSizePx,
  34. string Rank2FontColor,
  35. string? Rank3FontFamily,
  36. int Rank3FontSizePx,
  37. string Rank3FontColor
  38. );
  39. public void MapEndpoint(IEndpointRouteBuilder app)
  40. {
  41. /// 순위 설정 목록 조회
  42. app.MapGet("api/studio/donation/rank/config/{channelID}", async (
  43. int channelID,
  44. ISender sender,
  45. CancellationToken ct
  46. ) => {
  47. var data = await sender.Send(new Application.Features.Api.DonationRank.GetConfig.Query(channelID), ct);
  48. return ApiResponse.Ok(data);
  49. })
  50. .WithTags("StudioDonationRank")
  51. .RequireAuthorization();
  52. /// 순위 설정 저장/수정
  53. app.MapPost("api/studio/donation/rank/config", async (
  54. SaveRequest body,
  55. ClaimsPrincipal user,
  56. ISender sender,
  57. CancellationToken ct
  58. ) => {
  59. var memberID = user.GetRequiredMemberID();
  60. var command = new Application.Features.Api.DonationRank.SaveConfig.Command(
  61. body.ChannelID, memberID, body.ID, body.Title,
  62. (RankThemeType)body.Theme, (RankPeriodType)body.Period,
  63. body.StartAt, body.EndAt,
  64. body.IsShowAmount, body.MaxRankCount, body.NameMode, body.IsActive,
  65. body.TitleFontFamily, body.TitleFontSizePx, body.TitleFontColor,
  66. (RankNameDisplayType)body.NameDisplayType,
  67. body.IsShowDonationCount, body.IsShowGradeIcon, body.IsShowMemberIcon,
  68. body.Rank1FontFamily, body.Rank1FontSizePx, body.Rank1FontColor,
  69. body.Rank2FontFamily, body.Rank2FontSizePx, body.Rank2FontColor,
  70. body.Rank3FontFamily, body.Rank3FontSizePx, body.Rank3FontColor
  71. );
  72. await sender.Send(command, ct);
  73. return ApiResponse.Ok();
  74. })
  75. .WithTags("StudioDonationRank")
  76. .RequireAuthorization();
  77. /// 순위 설정 삭제
  78. app.MapDelete("api/studio/donation/rank/config/{id}/{channelID}", async (
  79. int id,
  80. int channelID,
  81. ISender sender,
  82. CancellationToken ct
  83. ) => {
  84. await sender.Send(new Application.Features.Api.DonationRank.DeleteConfig.Command(id, channelID), ct);
  85. return ApiResponse.Ok();
  86. })
  87. .WithTags("StudioDonationRank")
  88. .RequireAuthorization();
  89. }
  90. }