Handler.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Forum.BoardMeta.Get;
  5. public sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. var board = await db.Board
  10. .AsNoTracking()
  11. .FirstOrDefaultAsync(x => x.ID == request.BoardID, ct)
  12. ?? throw new KeyNotFoundException("게시판을 찾을 수 없습니다.");
  13. var meta = await db.BoardMeta
  14. .FirstOrDefaultAsync(x => x.BoardID == request.BoardID, ct);
  15. if (meta is null)
  16. {
  17. meta = new Domain.Entities.Forum.Boards.BoardMeta { BoardID = request.BoardID };
  18. db.BoardMeta.Add(meta);
  19. await db.SaveChangesAsync(ct);
  20. }
  21. return new Response(
  22. meta.ID,
  23. meta.BoardID,
  24. board.Code,
  25. board.Name,
  26. meta.List,
  27. meta.View,
  28. meta.Write,
  29. meta.Comment,
  30. meta.General,
  31. meta.Permission,
  32. meta.Notify,
  33. meta.NotifyTemplate,
  34. meta.Exp);
  35. }
  36. }