Handler.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Data;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Forum.Board.Create;
  5. public sealed class Handler(IAppDbContext db) : ICommandHandler<Command>
  6. {
  7. public async Task Handle(Command request, CancellationToken ct)
  8. {
  9. if (!await db.BoardGroup.AnyAsync(x => x.ID == request.BoardGroupID, ct))
  10. {
  11. throw new KeyNotFoundException("게시판 분류를 찾을 수 없습니다.");
  12. }
  13. if (await db.Board.AnyAsync(x => x.Code == request.Code, ct))
  14. {
  15. throw new InvalidOperationException($"`{request.Code}`는 이미 등록된 게시판 주소입니다.");
  16. }
  17. var board = new Domain.Entities.Forum.Boards.Board
  18. {
  19. BoardGroupID = request.BoardGroupID,
  20. Code = request.Code,
  21. Name = request.Name,
  22. Order = request.Order,
  23. IsSearch = request.IsSearch,
  24. IsActive = request.IsActive
  25. };
  26. await db.Board.AddAsync(board, ct);
  27. await db.SaveChangesAsync(ct);
  28. // BoardGroup의 Boards 카운트 증가
  29. var boardGroup = await db.BoardGroup.FirstOrDefaultAsync(x => x.ID == request.BoardGroupID, ct);
  30. if (boardGroup is not null)
  31. {
  32. boardGroup.Boards++;
  33. boardGroup.UpdatedAt = DateTime.UtcNow;
  34. await db.SaveChangesAsync(ct);
  35. }
  36. }
  37. }