View.cshtml.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using SharedKernel.Extensions;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.AspNetCore.Mvc.RazorPages;
  4. namespace Admin.Pages.Forum.Posts.List;
  5. public class ViewModel(IMediator mediator) : PageModel
  6. {
  7. public int ID { get; set; }
  8. public int BoardID { get; set; }
  9. public string BoardName { get; set; } = default!;
  10. public int? BoardPrefixID { get; set; }
  11. public string? BoardPrefixName { get; set; }
  12. public string? BoardPrefixColor { get; set; }
  13. public string Subject { get; set; } = default!;
  14. public new string Content { get; set; } = default!;
  15. public string? Thumbnail { get; set; }
  16. public string? Name { get; set; }
  17. public string? SID { get; set; }
  18. public bool IsNotice { get; set; }
  19. public bool IsSecret { get; set; }
  20. public bool IsAnonymous { get; set; }
  21. public bool IsSpeaker { get; set; }
  22. public bool IsDeleted { get; set; }
  23. public bool IsQnA { get; set; }
  24. public int Views { get; set; }
  25. public int Likes { get; set; }
  26. public int Dislikes { get; set; }
  27. public int CommentCount { get; set; }
  28. public string? UpdatedAt { get; set; }
  29. public string CreatedAt { get; set; } = default!;
  30. public List<FileItemView> Files { get; set; } = [];
  31. public List<ImageItemView> Images { get; set; } = [];
  32. public List<TagItemView> Tags { get; set; } = [];
  33. public string? ReturnUrl { get; set; }
  34. public string? QueryString { get; set; }
  35. public sealed record FileItemView(int ID, string FileName, string Url, string? Extension, long? Size, int Downloads);
  36. public sealed record ImageItemView(int ID, string FileName, string Url);
  37. public sealed record TagItemView(int TagID, string Name);
  38. public async Task OnGetAsync(int id, CancellationToken ct)
  39. {
  40. var postResult = await mediator.Send(new GetPost.Query(id), ct);
  41. if (postResult.IsFailure)
  42. {
  43. TempData["ErrorMessages"] = postResult.Error.Description;
  44. QueryString = Request.QueryString.ToString();
  45. ReturnUrl = Request.Headers.Referer.ToString();
  46. return;
  47. }
  48. var result = postResult.Value;
  49. ID = result.ID;
  50. BoardID = result.BoardID;
  51. BoardName = result.BoardName;
  52. BoardPrefixID = result.BoardPrefixID;
  53. BoardPrefixName = result.BoardPrefixName;
  54. BoardPrefixColor = result.BoardPrefixColor;
  55. Subject = result.Subject;
  56. Content = result.Content;
  57. Thumbnail = result.Thumbnail;
  58. Name = result.Name;
  59. SID = result.SID;
  60. IsNotice = result.IsNotice;
  61. IsSecret = result.IsSecret;
  62. IsAnonymous = result.IsAnonymous;
  63. IsSpeaker = result.IsSpeaker;
  64. IsDeleted = result.IsDeleted;
  65. IsQnA = result.IsQnA;
  66. Views = result.Views;
  67. Likes = result.Likes;
  68. Dislikes = result.Dislikes;
  69. CommentCount = result.Comments;
  70. UpdatedAt = result.UpdatedAt.GetDateAt();
  71. CreatedAt = result.CreatedAt.GetDateAt();
  72. Files = [..result.Files.Where(f => !f.IsDisabled).Select(f => new FileItemView(f.ID, f.FileName, f.Url, f.Extension, f.Size, f.Downloads))];
  73. Images = [..result.Images.Where(f => !f.IsDisabled).Select(f => new ImageItemView(f.ID, f.FileName, f.Url))];
  74. Tags = [..result.Tags.Select(t => new TagItemView(t.TagID, t.Name))];
  75. ReturnUrl = Request.Headers.Referer.ToString();
  76. QueryString = Request.QueryString.ToString();
  77. }
  78. }