RankConfigByToken.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Application.Abstractions.Data;
  2. using Web.Api.Common;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Web.Api.Endpoints.Widget;
  5. /// <summary>WidgetToken + configID로 RankConfig 조회 (위젯 스타일 적용용, 인증 불필요).
  6. /// configID 미지정 시 활성 첫 번째 자동 선택.</summary>
  7. internal sealed class RankConfigByToken : IEndpoint
  8. {
  9. public void MapEndpoint(IEndpointRouteBuilder app)
  10. {
  11. app.MapGet("api/widget/rank/config/{widgetToken}", async (
  12. string widgetToken,
  13. int? configID,
  14. IAppDbContext db,
  15. CancellationToken ct
  16. ) => {
  17. var channelID = await db.Channel.AsNoTracking()
  18. .Where(c => c.WidgetToken == widgetToken && c.IsActive)
  19. .Select(c => c.ID)
  20. .FirstOrDefaultAsync(ct);
  21. if (channelID == 0)
  22. {
  23. return ApiResponse.Ok((object?)null);
  24. }
  25. var query = db.DonationRankConfig.AsNoTracking()
  26. .Where(r => r.ChannelID == channelID);
  27. if (configID.HasValue)
  28. {
  29. query = query.Where(r => r.ID == configID.Value);
  30. }
  31. else
  32. {
  33. query = query.Where(r => r.IsActive);
  34. }
  35. var config = await query
  36. .OrderByDescending(r => r.ID)
  37. .Select(r => new
  38. {
  39. id = r.ID,
  40. title = r.Title,
  41. theme = (int)r.Theme,
  42. period = (int)r.Period,
  43. isShowAmount = r.IsShowAmount,
  44. maxRankCount = r.MaxRankCount,
  45. nameMode = r.NameMode,
  46. isActive = r.IsActive,
  47. titleFontFamily = r.TitleFontFamily,
  48. titleFontSizePx = r.TitleFontSizePx,
  49. titleFontColor = r.TitleFontColor,
  50. nameDisplayType = (int)r.NameDisplayType,
  51. isShowDonationCount = r.IsShowDonationCount,
  52. isShowGradeIcon = r.IsShowGradeIcon,
  53. isShowMemberIcon = r.IsShowMemberIcon,
  54. rank1FontFamily = r.Rank1FontFamily,
  55. rank1FontSizePx = r.Rank1FontSizePx,
  56. rank1FontColor = r.Rank1FontColor,
  57. rank2FontFamily = r.Rank2FontFamily,
  58. rank2FontSizePx = r.Rank2FontSizePx,
  59. rank2FontColor = r.Rank2FontColor,
  60. rank3FontFamily = r.Rank3FontFamily,
  61. rank3FontSizePx = r.Rank3FontSizePx,
  62. rank3FontColor = r.Rank3FontColor
  63. })
  64. .FirstOrDefaultAsync(ct);
  65. return ApiResponse.Ok((object?)config);
  66. })
  67. .WithTags("Widget")
  68. .AllowAnonymous();
  69. }
  70. }