| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Cache;
- using Application.Abstractions.Messaging;
- using Microsoft.EntityFrameworkCore;
- using SharedKernel.Results;
- namespace Application.Features.Api.Forum.BoardMeta.Get;
- public sealed class Handler(IAppDbContext db, ICacheService cache) : IQueryHandler<Query, Result<Response>>
- {
- public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
- {
- var cacheKey = CacheKeys.BoardMeta(request.BoardID);
- var cached = await cache.GetAsync<Response>(cacheKey, ct);
- if (cached is not null)
- {
- return cached;
- }
- var board = await db.Board.AsNoTracking().FirstOrDefaultAsync(x => x.ID == request.BoardID, ct);
- if (board is null)
- {
- return Result.Failure<Response>(Error.NotFound("BoardMeta.NotFound", "게시판을 찾을 수 없습니다."));
- }
- var meta = await db.BoardMeta.FirstOrDefaultAsync(x => x.BoardID == request.BoardID, ct);
- if (meta is null)
- {
- meta = new Domain.Entities.Forum.Boards.BoardMeta {
- BoardID = request.BoardID
- };
- await db.BoardMeta.AddAsync(meta, ct);
- await db.SaveChangesAsync(ct);
- }
- var response = new Response(
- meta.ID,
- meta.BoardID,
- board.Code,
- board.Name,
- meta.List,
- meta.View,
- meta.Write,
- meta.Comment,
- meta.General,
- meta.Permission,
- meta.Notify,
- meta.NotifyTemplate,
- meta.Exp);
- await cache.SetAsync(cacheKey, response, ct);
- return response;
- }
- }
|