post.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. 'use server';
  2. import PostReactionRequest from '@/dtos/request/forum/post/postReactionRequest';
  3. import PostBookmarkRequest from '@/dtos/request/forum/post/postBookmarkRequest';
  4. import PostReportRequest from '@/dtos/request/forum/post/postReportRequest';
  5. import PostFileDownLogRequest from '@/dtos/request/forum/post/postFileDownLogRequest';
  6. import PostCreateResponse from '@/dtos/response/forum/post/postCreateResponse';
  7. import PostUpdateResponse from '@/dtos/response/forum/post/postUpdateResponse';
  8. import PostResponse from '@/dtos/response/forum/post/postResponse';
  9. import { ResultDto } from '@/dtos/response/common';
  10. import { fetchJson } from '@/lib/utils/server';
  11. // 게시글 등록
  12. export async function fetchPostCreate(formData: FormData): Promise<ResultDto<PostCreateResponse>> {
  13. return await fetchJson<PostCreateResponse>('/api/forum/post/create', {
  14. method: 'POST',
  15. headers: {'Accept': 'application/json'},
  16. data: formData
  17. });
  18. }
  19. // 게시글 정보 조회
  20. export async function fetchPostData(postID: number): Promise<ResultDto<PostResponse>> {
  21. const post = await fetchJson<PostResponse>(`/api/forum/post/${postID}`, {
  22. method: 'GET',
  23. headers: {
  24. 'Accept': 'application/json'
  25. }
  26. });
  27. if (post.ok && post.data) {
  28. // 이미지 URL 변경
  29. post.data.content = post.data.content.replace(/<img\b[^>]*?\bsrc=["']?(\/[^"'\s>]*)["']?/gi, (match, src) => {
  30. return match.replace(src, process.env.API_URL + src);
  31. });
  32. }
  33. return post;
  34. }
  35. // 게시글 반응(좋아요/싫어요) 처리
  36. export async function fetchPostReaction(params: PostReactionRequest): Promise<ResultDto> {
  37. return await fetchJson('/api/forum/post/reaction', {
  38. method: 'POST',
  39. headers: {
  40. 'Accept': 'application/json',
  41. 'Content-Type': 'application/json'
  42. },
  43. data: params
  44. });
  45. }
  46. // 게시글 즐겨찾기 처리
  47. export async function fetchPostBookmark(params: PostBookmarkRequest): Promise<ResultDto> {
  48. return await fetchJson('/api/forum/post/bookmark', {
  49. method: 'POST',
  50. headers: {
  51. 'Accept': 'application/json',
  52. 'Content-Type': 'application/json'
  53. },
  54. data: params
  55. });
  56. }
  57. // 게시글 신고
  58. export async function fetchReport(params: PostReportRequest): Promise<ResultDto> {
  59. return await fetchJson('/api/forum/post/report', {
  60. method: 'POST',
  61. headers: {
  62. 'Accept': 'application/json',
  63. 'Content-Type': 'application/json'
  64. },
  65. data: params
  66. });
  67. }
  68. // 게시글 삭제
  69. export async function fetchPostDelete(postID: number): Promise<ResultDto> {
  70. return await fetchJson('/api/forum/post/delete', {
  71. method: 'POST',
  72. headers: {
  73. 'Accept': 'application/json',
  74. 'Content-Type': 'application/json'
  75. },
  76. data: { postID }
  77. });
  78. }
  79. // 게시글 수정
  80. export async function fetchPostUpdate(formData: FormData): Promise<ResultDto<PostUpdateResponse>> {
  81. return await fetchJson<PostUpdateResponse>('/api/forum/post/update', {
  82. method: 'POST',
  83. headers: {
  84. 'Accept': 'application/json',
  85. },
  86. data: formData
  87. });
  88. }
  89. // 파일 다운로드 기록
  90. export async function fetchFileDownLog(params: PostFileDownLogRequest): Promise<ResultDto<PostUpdateResponse>> {
  91. return await fetchJson<PostUpdateResponse>('/api/forum/post/file/download', {
  92. method: 'POST',
  93. headers: {
  94. 'Accept': 'application/json',
  95. 'Content-Type': 'application/json'
  96. },
  97. data: params
  98. });
  99. }