항해99

23.10.04 항해 99 16기 실전 프로젝트 1일차

김용글 2023. 10. 4. 23:09

오늘 공부한 것

* 실전 프로젝트 SA 작성

 

드디어 마지막 과제인 실전프로젝트날이 밝았다우리조는 BE4명 FE3명으로 최다인원이 구성되었다

 

어떤 프로젝트를 할까 고민하다가 여행계획을 짜는 애플리케이션을 만들어보기로했다

 

우선적으로 MVP로 간단한 기능들을 구현한 후 프론트엔드와 문제가 없으면 차근차근 한개씩 더 구현해보기로했다

 

1.  API 명세서

기능 API URL Method Request Header Request Response Response header 추가 설명
회원가입 /api/signup POST   {password: 1234, email: “rob@email.com”, nickName: “robbie”, userRole: “ADMIN”} {msg: “회원가입 성공”, statusCode: 200}   userRole(user): 사용자 권한, userRole(admin): 관리자 권한, password: 특수문자 포함, 이메일의 경우 중복확인 및 특수문자 검증, 이메일 2차 인증 혹은 다른 방법으로 인증 (추가적으로: OAuth2.0가능하면 시도)
로그인 /api/login POST   {email: “rob@email.com”, password: 1234} {msg: “로그인 성공”, statusCode: 200} {token: “avbscd”} userRole(admin)의 경우 모든 권한 가능, (추가적으로 Refresh Token가능한지 확인)
전체 게시글 조회 /api/posts GET     @{{postid = 1, title: “제주도”, nickName: “rob”, likeNum: 100, createdAt: 2023-09-01},…}   전체 게시물 조회
랭킹 목록 조회 /api/posts/rank GET     @{{postid = 1, title: “제주도”, nickName: “rob”, likeNum: 100, createdAt: 2023-09-01},…}   랭킹으로 조회된 게시물을 좋아요 순으로 조회 (권한에 관계없이 모두 조회 가능해야함)
상세 게시글 조회 /api/posts/{postId} GET     @{postid = 1, title: “제주도”, nickName: “rob”, likeNum: 100, createdAt: 2023-09-01, commentList: {comments: “좋았어요.” replyList{content: “저도 좋았어요.”, …}, …}}   게시물에 달린 댓글과 그에 대한 대댓글을 함께 반환 (댓글 역시 작성 시간에 따라 내림차순 정렬)
검색 /api/search?keyword=”제주도” GET     @{{postid = 1, title: “제주도”, nickName: “rob”, likeNum: 100, createdAt: 2023-09-01,commentList:[…replyList[..]]}}    
게시글 작성 /api/posts POST {token:“avbscd”} {title: “제주도”, content: “제주바다입니다.”, category: “식도락”, startDate: “2023-09-01”, likeNum:+1 , -1, endDate: “2023-09-08”, likeNum: 100} {msg: “등록 되었습니다.”, statusCode: 200}   category: “식도락”, “커플”, “나홀로”, “가족여행” 등이 있다.
선택한 게시글 수정 /api/posts/{postid} PUT {token:“avbscd”} {title: “제주도”, content: “제주바다입니다.”, category: “식도락”, startDate: “2023-09-01”, likeNum:+1 , -1, endDate: “2023-09-08”, likeNum: 100} {msg: “수정 되었습니다.”, statusCode: 200}   토큰과 username같이 검사
선택한 게시글 삭제 /api/posts/{postId} DELETE     {msg: “삭제 되었습니다”, statusCode: 200}   토큰을 통해 “username”을 검증할 수 있으므로, 이 정보와 작성자가 같은지 알아보려면 작성자의 “username”이 필요하다.
세부일정 생성 /api/schedules POST {token:“avbscd”} {chosenDate: "2023-09-15”, contents:”카페가기”, placeName:”제주”, traffic:”랜트카”, costs:”20000”, accomodation:”호텔”, restaurants:”동네 맛집” } {msg: “세부일정이 생성되었습니다.”, statusCode: 200}   게시글 별로 세부 일정을 생성합니다, 세부일정 테이블은 추후 2차 정규화 및 변경 가능성이 있음.
세부일정 조회 /api/schedules GET     [{chosenDate: "2023-09-15”, contents:”카페가기”, placeName:”제주”, traffic:”랜트카”, costs:”20000”, accomodation:”호텔”, restaurants:”동네 맛집” }]   게시글 별
세부일정 상세조회 /api/schedules/{scheduleId} GET          
세부일정 수정 /api/schedules/{scheduleId} UPDATE {token:“avbscd”} {chosenDate: "2023-09-15”, contents:”카페가기”, placeName:”제주”, traffic:”랜트카”, costs:”20000”, accomodation:”호텔”, restaurants:”동네 맛집” } {msg: “세부일정을 수정하였습니다.”, statusCode: 200}    
세부일정 삭제 /api/schedules/{scheduleId} DELETE {token:“avbscd”}        
댓글 작성
API
/api/posts/{postId}/comments/{comentId} POST {token:“avbscd”} {title: “저도 인사합니다.”, replyContents: “반갑습니다.”} {commentid =1,title: “저도 인사합니다.”, nickName: “rob”, replyContents: “반갑습니다.”}    
댓글 조회
API
/api/posts/{postId}/comments/ GET          
댓글 수정 API /api/posts/{postId}/comments/{commentId} PUT {token:“avbscd”} title: “다시 인사합니다.”, replyContents: “저도 반갑습니다.”} {commentid =1,title: “다시 인사합니다.”, nickName: “rob”, replyContents: “저도 반갑습니다.”, createdAt: 2023-09-02}   토큰을 가져와서 nickName이 맞는지 검사
댓글 삭제
API
/api/posts/{postId}/comments/{commentId} DELETE {token:“avbscd”} {nickName: “rob”} {msg: “댓글 삭제 성공”, statusCode: 200}   토큰을 가져와서 nickName이 맞는지 검사

댓글
생성
API
/api/posts/{postId}/comments/{commentId}/replys POST {token:“avbscd”}   {msg: “대댓글을 생성하였습니다.”, statusCode: 200}    

댓글 조회
API
/api/posts/{postId}/comments/{commentId}/replys GET          

댓글 수정
API
/api/posts/{postId}/comments/{commentId}/replys/{replyId} UPDATE {token:“avbscd”}   {msg: “대댓글 성공”, statusCode: 200}    

댓글 삭제
API
/api/posts/{postId}/comments/{commentId}/replys/{replyId} DELETE {token:“avbscd”}   {msg: “대댓글 삭제 성공”, statusCode: 200}    

 

2. ERD

 

3. 프로젝트 마인드맵