TIL/7주차

추가기능 구현

tnals634 2023. 6. 28. 21:10

같이 추가기능을 무엇을 할지 고민하고 erd 다이어그램을 그리다 햇갈리는 부분이 있어서 승윤튜터님께 모두 다 같이 가서 질문을 하고 답변을 구해왔습니다.

 

저희는 토큰은 리프레시토큰도 구현하기로 했는데 구현방식이 db에 저장하고 로그인하면 저장된 리프레시토큰이 지워졌다 다시 저장되서 최근것을 가져오는 식으로 구현했습니다.

 

그걸 들으시고 튜터님은 다른 방식을 제시해주셨는데 그부분은 다음주 수업에 다루는 거라 일단은 이런식으로 구현하기로 했습니다.

그리고 좋아요와 댓글 구현을 하기로 했습니다. 좋아요는 주승님과 현규님이 시도해보기로 하였고, 댓글구현은 제가 맡고, 리프레시토큰은 한번 구현해본적이있는 성민님이 구현하기로 했습니다.

 

db의 이름은 저흰 다 카멜 케이스를 사용했는데 mysql에서는 스네이크 케이스를 사용한다고 해서 성민님이 수정해주기로 했습니다. 

그래서 그 수정본을 pull받으면 그것을 토대로 수정할 부분이 있으면 수정할 겁니다.

 

그리고 프론트엔드를 제작중이었는데 막혀서 일단 그부분은 모두 백엔드 구현후 다같이 만들기로 해서 보류중입니다.

 

댓글 구현을 하는 중 api 명세서를 아직 만들지 않았기 때문에 아래 표로 임시로 일단 만들겠습니다.

기능 url method req_header req res res_header error_res
댓글 작성 /posts/:postId/comments POST { accessToken=Bearer%20eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsImlhdCI6MTY4NzUxMDcyMywiZXhwIjoxNjg3NTE0MzIzfQ.khpH70B1Px7KzuJoGY_aIZkunw1qU7P6-LSs-V-bylY; Path=/ } {
"comment":"댓글입니다."
}
#201 댓글 생성
message:"댓글을 생성하였습니다."
  # 400 comment 형식이 비정상적인 경우 {"errorMessage": "댓글 정보가 입력되지 않았습니다."}
# 401 Cookie가 존재하지 않을 경우 {"errorMessage": "로그인 후에 이용할 수 있는 기능입니다."}
# 401 Cookie가 비정상적이거나 만료된 경우 {"errorMessage": "토큰이 만료된 아이디입니다. 다시 로그인 해주세요."}
# 404 게시글이 존재하지 않는 경우 { errorMessage: "게시글이 없습니다.” } 
# 500 예외 케이스에서 처리하지 못한 에러 {"errorMessage": "댓글 작성에 실패했습니다."}
댓글 조회 /posts/:postId/comments GET     { comments: [
"post_id":1,
"user_id":1,
"name":"이름",
"comment":"댓글입니다.",
"createdAt": "2023-06-23T09:15:09.000Z",
"updatedAt": "2023-06-23T09:15:09.000Z"
} ]
}
  # 404 게시글이 존재하지 않는 경우 { errorMessage: "게시글이 없습니다.” }
# 500 예외 케이스에서 처리하지 못한 에러 {"errorMessage": "댓글 조회에 실패했습니다."}
댓글 수정 /posts/:postId/comments/:commentId PUT { accessToken=Bearer%20eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsImlhdCI6MTY4NzUxMDcyMywiZXhwIjoxNjg3NTE0MzIzfQ.khpH70B1Px7KzuJoGY_aIZkunw1qU7P6-LSs-V-bylY; Path=/ } { "comment":"수정된 댓글입니다." } #200 댓글 수정
message:"댓글을 수정하였습니다."
  # 400comment 형식이 비정상적인 경우 {"errorMessage": "댓글이 빈 내용인지 확인해 주세요."}
# 401 댓글을 수정할 권한이 존재하지 않는 경우 {"errorMessage": "댓글 수정 권한이 존재하지 않습니다."}
# 401 Cookie가 존재하지 않을 경우 {"errorMessage": "로그인 후에 이용할 수 있는 기능입니다."}
# 401 Cookie가 비정상적이거나 만료된 경우 {"errorMessage": "토큰이 만료된 아이디입니다. 다시 로그인 해주세요."}
# 404 게시글이 존재하지 않는 경우 {"errorMessage": "해당 게시글을 찾을 수 없습니다."}  
# 404 댓글이 존재하지 않는 경우 {"errorMessage": "해당 댓글을 찾을 수 없습니다."}
 
# 500 예외 케이스에서 처리하지 못한 에러 {"errorMessage": "댓글 수정에 실패했습니다."}
댓글 삭제 /posts/:postId/comments/:commentId DELETE { accessToken=Bearer%20eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsImlhdCI6MTY4NzUxMDcyMywiZXhwIjoxNjg3NTE0MzIzfQ.khpH70B1Px7KzuJoGY_aIZkunw1qU7P6-LSs-V-bylY; Path=/ }   #200 댓글 삭제
message:"댓글을 삭제했습니다."
  # 401 댓글을 삭제할 권한이 존재하지 않는 경우 {"errorMessage": "댓글 삭제 권한이 존재하지 않습니다."}
# 401 Cookie가 존재하지 않을 경우 {"errorMessage": "로그인 후에 이용할 수 있는 기능입니다."}
# 401 Cookie가 비정상적이거나 만료된 경우 {"errorMessage": "토큰이 만료된 아이디입니다. 다시 로그인 해주세요."}
# 404 게시글이 존재하지 않는경우 {"errorMessage": "해당 게시글을 찾을 수 없습니다."} 
 # 404 댓글이 존재하지 않는 경우 {"errorMessage": "해당 댓글을 찾을 수 없습니다."} # 500 예외 케이스에서 처리하지 못한 에러 {"errorMessage": "댓글 삭제에 실패했습니다."}

 

위 api를 저희 팀 api명세서에 추가해줬습니다.

그리고 성민님이 포괄적으로 수정을 하시고 깃에 올려주셔서

db의 컬럼과 테이블이름등 변경사항이 많아 제 브랜치를 삭제하고 다시 만들어서 받았습니다.

 

받아서 지금 하나하나 테스트 중 아래와 같이 작성하며 테스트해보았습니다.

일단 회원정보 수정을 params 대신 locals.user로 변경
=> 이유는 로그인을 시도하지 않고 회원가입만 했는데도 불구하고 url에 user_id값을 넣으면 회원 정보 수정이 
로그인 된것마냥 변경이 가능
=>변경 사항 : 로그아웃과 계정 변환등은 로그인을 하지않은채로 실행하니 오류메세지가 잘 뜨는것을 확인함.
그래서 로그아웃에있는 토큰 확인 변수와 함수를 회원정보 수정에도 넣어줌

로그인을 하지않고도 게시글 생성 가능, users파일에서 사용한 토큰확인을 여기서도 사용하면 어떨까 싶음
=> 난 아직 로그인을 하지 않았음, 게시글이 생성 됨. db테이블 확인 결과 1번으로 토큰테이블에서 
    제일 나중에 들어간 1번 토큰의 이름으로 들어가져서 나오는것을 확인함.

로그인 하지 않고도 게시글 수정도 가능.
=> 게시글 생성과 같은 문제

게시글 검색기능은 아직 구현중

그리고 댓글 기능을 확인하는데 작성중 로그인을 하든 안하든 게시글이 작성이 되서 users파일에서 사용한 토큰 확인 방식을 추가해보았는데 user_id가 local에서 가져오는거다 보니, 로그아웃을 해도 다른사람의 아이디로 로그인이 되있어서 해당 사람의 아이디로 댓글이 생성되는 것을 확인했습니다.

 

참고자료

multer 사용법

 

 

 

 

 

 

'TIL > 7주차' 카테고리의 다른 글

팀프로젝트 주말편..(토요일  (0) 2023.07.02
팀프로젝트..  (0) 2023.06.30
팀프로젝트 반려동물 이야기 만들기  (0) 2023.06.29
git push, mysql 특강  (0) 2023.06.27
뉴스피드 팀프로젝트(노력하는 사이다)  (0) 2023.06.26