board.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. 'use server';
  2. import {
  3. BoardPostsRequest,
  4. AllPostsRequest
  5. } from '@/types/request/forum/board';
  6. import {
  7. BoardResponse,
  8. BoardListResponse,
  9. BoardPostsResponse
  10. } from '@/types/response/forum/board';
  11. import { ResultDto } from '@/types/response/common';
  12. import { fetchJson } from '@/lib/utils/server';
  13. // 게시판 상세 조회
  14. export async function fetchBoard(boardCode: string): Promise<ResultDto<BoardResponse>>
  15. {
  16. return await fetchJson<BoardResponse>(`/api/forum/boards/${boardCode}`, {
  17. method: 'GET',
  18. headers: {
  19. 'Accept': 'application/json'
  20. }
  21. });
  22. }
  23. // 게시판 목록 조회
  24. export async function fetchBoardList(boardGroupCode?: string): Promise<ResultDto<BoardListResponse>>
  25. {
  26. const params = boardGroupCode ? `?boardGroupCode=${boardGroupCode}` : '';
  27. return await fetchJson<BoardListResponse>(`/api/forum/boards${params}`, {
  28. method: 'GET',
  29. headers: {
  30. 'Accept': 'application/json'
  31. }
  32. });
  33. }
  34. // 전체 게시글 조회
  35. export async function fetchAllPosts(params: AllPostsRequest): Promise<ResultDto<BoardPostsResponse>>
  36. {
  37. const queryParams = new URLSearchParams();
  38. queryParams.set('page', String(params.page));
  39. queryParams.set('perPage', String(params.perPage));
  40. if (params.sort !== undefined && params.sort !== null) queryParams.set('sort', String(params.sort));
  41. if (params.search !== undefined && params.search !== null) queryParams.set('search', String(params.search));
  42. if (params.keyword) queryParams.set('keyword', params.keyword);
  43. return await fetchJson<BoardPostsResponse>(`/api/forum/posts?${queryParams.toString()}`, {
  44. method: 'GET',
  45. headers: {
  46. 'Accept': 'application/json'
  47. }
  48. });
  49. }
  50. // 게시판 게시글 조회
  51. export async function fetchBoardPosts(params: BoardPostsRequest): Promise<ResultDto<BoardPostsResponse>>
  52. {
  53. const queryParams = new URLSearchParams();
  54. queryParams.set('boardID', String(params.boardID));
  55. queryParams.set('page', String(params.page));
  56. queryParams.set('perPage', String(params.perPage));
  57. if (params.boardPrefixID) queryParams.set('boardPrefixID', String(params.boardPrefixID));
  58. if (params.sort !== undefined && params.sort !== null) queryParams.set('sort', String(params.sort));
  59. if (params.search !== undefined && params.search !== null) queryParams.set('search', String(params.search));
  60. if (params.keyword) queryParams.set('keyword', params.keyword);
  61. return await fetchJson<BoardPostsResponse>(`/api/forum/posts?${queryParams.toString()}`, {
  62. method: 'GET',
  63. headers: {
  64. 'Accept': 'application/json'
  65. }
  66. });
  67. }