게시글 생성 API 비즈니스 로직
- 게시글을 작성하려는 클라이언트가 로그인된 사용자인지 검증한다.
- 게시글 생성을 위한 title, content를 body로 전달받는다.
- Posts 테이블에 게시글을 생성한다.
게시글은 사용자 ( Users )는 여러개의 게시글 ( Posts )을 등록할 수 있다는 조건에 따라 사용자와 1:N의 관계를 가지고,
현재 로그인 한 사용자의 정보가 존재했을 때만 게시글을 생성할 수 있도록 구현해야 한다.
사용자를 생성했을 때와 동일하게, routers/posts.router.js 파일을 생성하고, app.js 파일에 라우터를 추가해보자.
게시글 생성 API
// src/routes/posts.router.js
import express from 'express';
import { prisma } from '../utils/prisma/index.js';
import authMiddleware from '../middlewares/auth.middleware.js';
const router = express.Router();
/** 게시글 생성 API **/
router.post('/posts', authMiddleware, async (req, res, next) => {
const { userId } = req.user;
const { title, content } = req.body;
const post = await prisma.posts.create({
data: {
userId: +userId,
title,
content,
},
});
return res.status(201).json({ data: post });
});
export default router;
사용자 인증 미들웨어를 통해 게시글을 작성하려는 클라이언트가 로그인된 사용자 인지 검증하였고,
전달된 userId 값을 이용해, 사용자와 1:N 관계를 맺고 있는 게시글을 생성하도록 구현했다.
PostsRouter를 등록한 app.js
// src/app.js
import express from 'express';
import cookieParser from 'cookie-parser';
import LogMiddleware from './middlewares/log.middleware.js';
import ErrorHandlingMiddleware from './middlewares/error-handling.middleware.js';
import UsersRouter from './routes/users.router.js';
import PostsRouter from './routes/posts.router.js';
const app = express();
const PORT = 3018;
app.use(LogMiddleware);
app.use(express.json());
app.use(cookieParser());
app.use('/api', [UsersRouter, PostsRouter]);
app.use(ErrorHandlingMiddleware);
app.listen(PORT, () => {
console.log(PORT, '포트로 서버가 열렸어요!');
});
게시글 조회 API
게시글 목록 조회 API와 게시글 상세 조회 API는 이전에 prisma-curd에서 구현한 Posts 테이블과 동일한 코드로 구성되어 있다.
게시글 목록 조회 API
// src/routes/posts.router.js
/** 게시글 목록 조회 API **/
router.get('/posts', async (req, res, next) => {
const posts = await prisma.posts.findMany({
select: {
postId: true,
userId: true,
title: true,
createdAt: true,
updatedAt: true,
},
orderBy: {
createdAt: 'desc', // 게시글을 최신순으로 정렬합니다.
},
});
return res.status(200).json({ data: posts });
});
게시글 상세 조회 API
// src/routes/posts.router.js
/** 게시글 상세 조회 API **/
router.get('/posts/:postId', async (req, res, next) => {
const { postId } = req.params;
const post = await prisma.posts.findFirst({
where: {
postId: +postId,
},
select: {
postId: true,
userId: true,
title: true,
content: true,
createdAt: true,
updatedAt: true,
},
});
return res.status(200).json({ data: post });
});
'내일배움캠프 > 실습' 카테고리의 다른 글
[내일배움캠프][실습] Jest ( 테스팅 프레임워크 ) (1) | 2024.09.28 |
---|---|
[내일배움캠프][실습] 3계층 아키텍처 패턴 구현 (2) | 2024.09.28 |