level2 과제를 완수했다!!
페어로 과제를 하면서 좀 놓친 부분이 있는데, git, github으로 협업을 해야한다는 점을 놓치고 있었다.
처음에는 같이 liveshare를 통해서 작업을 했는데, 나중에 협업으로 일을 하게 될 때, github의 중요성을 크게 느낄 것 같아서
이제부터는 잘 이용해보려고 한다.
1. git init
2. git add . 현재 작업한 내역을 다 추가한다.
2. git commit -m "first message"
푸쉬 전에는 무조건 commit
4. git branch -M main
5. git remote add origin <http:레포지토리 주소>
6. git push -u origin main
7. git add .
8. git commit ~~~반복
9. git push 만 씀
그리고 현재 git 상태가 궁금하면
git status
github에 터미널을 이용해서 프로젝트 올릴때
fatal: remote origin already exists. 에러가 뜬다면 원래있던 remote를 삭제하고 다시 add시켜준다.
$ git remote rm origin
그다음 git remote add origin ~~ 하면 잘된다.
branch 하는 법 -> 협업해서 수행할 때, 각자의 브랜치를 만들어서 나중에 취합하는 형식을 사용
1,2 연결
3,4 branch 만들기
파일 수정하고
5,6,7 branch에 올리는 작업하고 확인하기
1. git clone <협업할 레포지토리 주소>
2. cd 레포지토리 폴더명
3. git branch 브랜치이름 -> 브랜치를 만듬
4. git checkout 브랜치이름
파일 수정하기
5. git add .
6. git commit -m '메모'
7. git push origin 브랜치이름
checkout보다는 switch 를 권장
git switch 브랜치이름
branch 상황을 알아보는 명령어
git branch
git remote -v
git이 연결되었는지 상태가 나오는데, -> 방장 주소가 나온다.
git init을 하고 어찌저찌하다보니 .git이 폴더 안에 2개가 생겼다.
폴더를 들어가보고 내용 확인해보고 다시 나와서 지우고 내용확인해보고 이런식으로 해서 처음부터 git init을 해보니까 오류 해결 !!
/**
* 댓글 삭제 - DELETE '/:commentId'
*
* 이 비동기 함수는 댓글을 삭제하기 위한 API 호출을 처리합니다.
* URL 매개변수에서 `commentId`를 읽고, 요청 본문에서 `password`를 읽습니다.
* 데이터베이스를 쿼리해 댓글이 존재하는지 그리고 비밀번호가 일치하는지 확인합니다.
* 모든 조건이 충족되면 데이터베이스에서 댓글을 삭제하고 200 상태 코드를 반환합니다.
*
* @async
* @function
* @param {object} req - 사용자 입력을 담고 있는 익스프레스 요청 객체
* @param {object} res - 클라이언트에게 결과를 반환하기 위한 익스프레스 응답 객체
* @param {function} next - 익스프레스 파이프라인 내의 next 미들웨어 함수
*/
router.delete('/:postId/comments/:commentId', async (req, res, next) => {
try {
const { postId, commentId } = req.params;
const { password } = req.body;
const post = await prisma.posts.findUnique( { where : { postId: Number(postId) } });
if(!post)return res.status(400).json({ message : "게시글 조회에 실패하였습니다."});
const comment = await prisma.comments.findUnique({ where: { commentId: Number(commentId) } });
if(!comment)return res.status(404).json({ message : "댓글 조회에 실패하였습니다." });
if(comment.password !== password) return res.status(401).json({ message: "비밀번호가 일치하지 않습니다."})
await prisma.comments.delete({where : { commentId: Number(commentId) }});
res.status(200).json({ data : "댓글 삭제가 완료되었습니다." });
} catch (error) {
handleError(res, error)
}
});
postId와 commentId 모두 경로매개변수 params로 받아야하는데
여기서 url에서 postId와 commentId가 모두 필요하기 때문에 필요하다.
쉽게 말하면 게시글을 생성한 뒤에 특정 게시글 안에 댓글이 달릴 수 있는데 , 게시글이 부모 - 댓글이 자식 같은 관계이다.
여기서 commentId만 req.params;로 받으면 게시글을 지운다고 해도 댓글을 지우지 않았으면 그 댓글이 반환될 수도 있기 때문에 2중으로 유효한지 검사를 하는게 중요하다.
👉 쉽게 말하면 내가 보기 좋고, 같이 일하는 사람들이 읽기 직관적이고 편하도록 쓰는 코드가 좋은 코드라고 생각한다.
그래서 unique 중복없는 유일한을 의미하는 직관적인 .findUnique 함수를 사용하는게 더 좋은 것 같다.
routes 폴더안의 index.js는 어떻게 활용해야하는지 감이 안잡혔는데, 활용방법을 페어리뷰를 하게 되면서 알게 되었다.
// app.js
import { postsRouter, commentsRouter } from "./routes/index.js"
// routes/index.js
export { default as postsRouter } from "./posts.js";
export { default as commentsRouter } from "./comments.js";