board.ts 1.9 KB

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