Handler.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Cache;
  3. using Application.Abstractions.Messaging;
  4. using Microsoft.EntityFrameworkCore;
  5. using SharedKernel.Storage;
  6. namespace Application.Features.Admin.Forum.BoardMeta.Update;
  7. public sealed class Handler(IAppDbContext db, IEditorImageService editorImage, ICacheService cache) : ICommandHandler<Command>
  8. {
  9. public async Task Handle(Command request, CancellationToken ct)
  10. {
  11. var meta = await db.BoardMeta.FirstOrDefaultAsync(x => x.ID == request.ID && x.BoardID == request.BoardID, ct) ?? throw new KeyNotFoundException("게시판 설정을 찾을 수 없습니다.");
  12. if (request.List is not null)
  13. {
  14. meta.List = request.List;
  15. meta.List.HeaderContent = await SaveBytesAsync(request.BoardID, request.List.HeaderContent, UploadAddition.ListHeaderContent, ct);
  16. meta.List.FooterContent = await SaveBytesAsync(request.BoardID, request.List.FooterContent, UploadAddition.ListFooterContent, ct);
  17. }
  18. if (request.View is not null)
  19. {
  20. meta.View = request.View;
  21. }
  22. if (request.Write is not null)
  23. {
  24. meta.Write = request.Write;
  25. meta.Write.HeaderContent = await SaveBytesAsync(request.BoardID, request.Write.HeaderContent, UploadAddition.WriteHeaderContent, ct);
  26. meta.Write.FooterContent = await SaveBytesAsync(request.BoardID, request.Write.FooterContent, UploadAddition.WriteFooterContent, ct);
  27. }
  28. if (request.Comment is not null)
  29. {
  30. meta.Comment = request.Comment;
  31. }
  32. if (request.General is not null)
  33. {
  34. meta.General = request.General;
  35. }
  36. if (request.Permission is not null)
  37. {
  38. meta.Permission = request.Permission;
  39. }
  40. if (request.Notify is not null)
  41. {
  42. meta.Notify = request.Notify;
  43. }
  44. if (request.NotifyTemplate is not null)
  45. {
  46. meta.NotifyTemplate = request.NotifyTemplate;
  47. meta.NotifyTemplate.PostWriteEmailNotifyContent = await SaveBytesAsync(request.BoardID, request.NotifyTemplate.PostWriteEmailNotifyContent, UploadAddition.PostWriteEmailNotifyContent, ct);
  48. meta.NotifyTemplate.CommentWriteEmailNotifyContent = await SaveBytesAsync(request.BoardID, request.NotifyTemplate.CommentWriteEmailNotifyContent, UploadAddition.CommentWriteEmailNotifyContent, ct);
  49. meta.NotifyTemplate.ReplyWriteEmailNotifyContent = await SaveBytesAsync(request.BoardID, request.NotifyTemplate.ReplyWriteEmailNotifyContent, UploadAddition.ReplyWriteEmailNotifyContent, ct);
  50. }
  51. if (request.Exp is not null)
  52. {
  53. meta.Exp = request.Exp;
  54. }
  55. await db.SaveChangesAsync(ct);
  56. await cache.RemoveAsync(CacheKeys.BoardMeta(request.BoardID), ct);
  57. }
  58. private async Task<string?> SaveBytesAsync(int boardID, string? html, UploadAddition addition, CancellationToken ct = default)
  59. {
  60. var path = new FileStoragePath(UploadTarget.Editor, UploadFolder.Post, boardID, addition);
  61. return await editorImage.UploadAsync(html, path, ct);
  62. }
  63. }