board.ts 2.7 KB

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