게시판 하단에 붙이 댓글 API를 만든다. 댓글 상세보기(댓글 하나를 보는 화면은 없지만 댓글 생성후 생성된 댓글을 추가하기 위해서 필요), 댓글 목록 보기, 댓글 생성, 댓글 수정, 댓글 삭제 이렇게 5개의 api를 만든다.
컨트롤러 구현
+ comment insert 시 주의점
comment 테이블의 foreign key인 board_id 는 one-to-many 관계에 의해서 자동생성된다. 엔티티에 board_id라는 컬럼이 존재하지 않으므로 이 컬럼을 사용할 수가 없고 board_id 대신에 연관된 board 정보를 넣어줘야 한다는것에 유념해야 한다.
+ comment 리스트 가져오기
join문으로 find 구문에서 relations 키를 이용하면 Board에 딸린 comment 를 모두 가져올 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import {Comment} from "../entity/Comment"; import {getConnection} from "typeorm"; import {Board} from "../entity/Board"; export class CommentController { static addComment = async (req, res) => { const {board_id, content} = req.body; const board = await getConnection().getRepository(Board).findOne({id: board_id}); const comment = new Comment(); comment.content = content; comment.board = board; await getConnection().getRepository(Comment).save(comment); res.send(comment); } static findAllComment = async (req, res) => { const {board_id} = req.query; // const boards = await getConnection().getRepository(Comment).find({ where: { board_id: board_id } }); const board = await getConnection().getRepository(Board) .findOne({relations: ["comments"], where: {id: board_id}, order: {id: 'DESC'}}); res.send(board.comments); } static findOneComment = async (req, res) => { const {id} = req.query; const comment = await getConnection().getRepository(Comment).findOne({id}); console.log(comment); res.send(comment); } static modifyComment = async (req, res) => { const {id, content} = req.body; const result = await getConnection().createQueryBuilder().update(Comment) .set({content}) .where("id = :id", {id}) .execute(); res.send(result); } static removeComment = async (req, res) => { const {id} = req.query; const result = await getConnection() .createQueryBuilder() .delete() .from(Comment) .where("id = :id", {id}) .execute(); res.send(result); } } |
라우팅 추가
라우팅 유알엘을 매핑한다.
1 2 3 4 5 6 7 8 9 |
... routes.post('/comment', CommentController.addComment); routes.get('/comments', CommentController.findAllComment); routes.get('/comment', CommentController.findOneComment); routes.put('/comment', CommentController.modifyComment); routes.delete('/comment', CommentController.removeComment); export default routes; |