Handler.cs 3.0 KB

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