Handler.cs 3.3 KB

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