page.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. 'use server';
  2. import View from './view';
  3. import { notFound, forbidden, unauthorized } from 'next/navigation';
  4. import { checkAuthServer } from '@/lib/api/auth';
  5. import { fetchBoard, fetchBoardList } from '@/lib/api/forum/board';
  6. import { checkPermission } from '@/lib/utils/server';
  7. import PermissionDenied from '@/app/(main)/(forum)/board/_component/PermissionDenied';
  8. export default async function PostWrite({ searchParams }: { searchParams : Promise<{ board: string }> })
  9. {
  10. const { board: boardCode } = await searchParams;
  11. if (!boardCode) {
  12. return forbidden();
  13. }
  14. try {
  15. if (!await checkAuthServer()) {
  16. throw Error;
  17. }
  18. } catch {
  19. return unauthorized();
  20. }
  21. try {
  22. // 게시판 상세 조회
  23. const board = await fetchBoard(boardCode);
  24. if (!board.success || !board.data) {
  25. throw Error;
  26. }
  27. // 게시글 작성 권한 확인 (본인 글이면 스킵)
  28. if (!await checkPermission(board.data.boardMeta.permission.postWrite, board.data.boardManager)) {
  29. return <PermissionDenied _board={board.data} />;
  30. }
  31. // 게시판 목록 조회
  32. const boardList = await fetchBoardList(board.data.boardGroup.code);
  33. if (!boardList.success || !boardList.data) {
  34. throw Error;
  35. }
  36. return (
  37. <View _boardList={boardList.data} _board={board.data} />
  38. );
  39. } catch {
  40. return notFound();
  41. }
  42. }