| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using Application.Abstractions.Messaging;
- using Application.Abstractions.Data;
- using SharedKernel.Results;
- using Microsoft.EntityFrameworkCore;
- namespace Application.Features.Admin.Forum.Board.Create;
- public sealed class Handler(IAppDbContext db) : ICommandHandler<Command, Result>
- {
- public async Task<Result> Handle(Command request, CancellationToken ct)
- {
- if (!await db.BoardGroup.AnyAsync(x => x.ID == request.BoardGroupID, ct))
- {
- return Result.Failure(Error.NotFound("BoardGroup.NotFound", "게시판 분류를 찾을 수 없습니다."));
- }
- if (await db.Board.AnyAsync(x => x.Code == request.Code, ct))
- {
- return Result.Failure(Error.Conflict("Board.DuplicateCode", $"`{request.Code}`는 이미 등록된 게시판 주소입니다."));
- }
- var board = new Domain.Entities.Forum.Boards.Board
- {
- BoardGroupID = request.BoardGroupID,
- Code = request.Code,
- Name = request.Name,
- Order = request.Order,
- IsSearch = request.IsSearch,
- IsActive = request.IsActive
- };
- await db.Board.AddAsync(board, ct);
- await db.SaveChangesAsync(ct);
- // BoardMeta 동시 생성 (속성 초기화로 기본값 채워짐)
- db.BoardMeta.Add(new Domain.Entities.Forum.Boards.BoardMeta { BoardID = board.ID });
- await db.SaveChangesAsync(ct);
- // BoardGroup의 Boards 카운트 증가
- var boardGroup = await db.BoardGroup.FirstOrDefaultAsync(x => x.ID == request.BoardGroupID, ct);
- if (boardGroup is not null)
- {
- boardGroup.Boards++;
- boardGroup.UpdatedAt = DateTime.UtcNow;
- await db.SaveChangesAsync(ct);
- }
- return Result.Success();
- }
- }
|