Handler.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. using SharedKernel.Results;
  5. namespace Application.Features.Admin.Store.Game.Get;
  6. public sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Result<Response>>
  7. {
  8. public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
  9. {
  10. var game = await db.Game
  11. .AsNoTracking()
  12. .Where(c => c.ID == request.ID)
  13. .Select(c => new
  14. {
  15. c.ID,
  16. c.Code,
  17. c.KorName,
  18. c.EngName,
  19. c.Publisher,
  20. c.Thumbnail,
  21. c.BigImage,
  22. c.Description,
  23. c.CommissionRate,
  24. c.ApiCommissionRate,
  25. c.Link,
  26. c.IsActive,
  27. c.Order,
  28. c.CreatedAt,
  29. c.UpdatedAt,
  30. c.TrailerUrl,
  31. c.MinSpec,
  32. c.RecommendedSpec,
  33. c.ReleaseDate
  34. })
  35. .FirstOrDefaultAsync(ct);
  36. if (game is null)
  37. {
  38. return Result.Failure<Response>(Error.NotFound("Game.NotFound", "게임을 찾을 수 없습니다."));
  39. }
  40. var genreIds = await db.GameGenreMap.AsNoTracking().Where(m => m.GameID == game.ID).Select(m => m.GameGenreID).ToListAsync(ct);
  41. var categoryIds = await db.GameCategoryMap.AsNoTracking().Where(m => m.GameID == game.ID).Select(m => m.GameCategoryID).ToListAsync(ct);
  42. var images = await db.GameImage.AsNoTracking().Where(i => i.GameID == game.ID && !i.IsDisabled).OrderBy(i => i.Order).ThenBy(i => i.ID).Select(i => new Response.ImageRow(i.ID, i.Url)).ToListAsync(ct);
  43. var languages = await db.GameLanguageSupport.AsNoTracking().Where(s => s.GameID == game.ID).Select(s => new Response.LanguageSupportRow(s.GameLanguageID, s.Interface, s.FullAudio, s.Subtitles)).ToListAsync(ct);
  44. return Result.Success(new Response(
  45. game.ID,
  46. game.Code,
  47. game.KorName,
  48. game.EngName,
  49. game.Publisher,
  50. game.Thumbnail,
  51. game.BigImage,
  52. game.Description,
  53. game.CommissionRate,
  54. game.ApiCommissionRate,
  55. game.Link,
  56. game.IsActive,
  57. game.Order,
  58. game.CreatedAt,
  59. game.UpdatedAt,
  60. game.TrailerUrl,
  61. game.MinSpec,
  62. game.RecommendedSpec,
  63. game.ReleaseDate,
  64. genreIds,
  65. categoryIds,
  66. images,
  67. languages
  68. ));
  69. }
  70. }