//////
Search
💛

두 번째 미션

상태
미션 공개 완료

수행 사항

 필수과제

댓글
좋아요
마이피드
알림
Swagger에 ApiOperation을 써서 Controller 설명 보이게 할 것

 도전과제

댓글, 좋아요, 알림 UI구현
Admin기능

Architecture(아키텍처)

▲ 위 Layered Architecture 구조에 맞게 작성 해주세요.
각 단에 데이터를 전달 받을시 DTO 형태로 전달한다.

ERD

주의 AWS EC2에 배포되지 않은 기능은 점수로 들어가지 않습니다. 배포가 아무것도 되지 않았다면 0점 입니다.

미션 개요 - 요구사항 정의

댓글

댓글 목록 조회
댓글 조회는 모든 접근이 권한을 가진다.(Token없이 가능)
제목, 글쓴이, 작성날짜가 표시된다.
목록 기능은 페이징 기능이 포함된다.
한 페이지당 default 피드 갯수는 10개이다.
총 페이지 갯수가 표시된다.
작성날짜 기준으로 최신순으로 sort한다.
댓글 작성
댓글 작성은 로그인 한 사람만 쓸 수 있습니다.
댓글 수정 / 삭제
댓글 수정은 댓글을 작성한 회원만이 권한을 가집니다.

좋아요

좋아요 누르기
‘좋아요’는 한번만 누를 수 있습니다. 중복으로 누르는 경우는 에러 처리.
좋아요 조회는 모든 접근이 권한을 가진다.(Token없이 가능)

마이피드

조회
내가 작성한 글만 보이는 기능
제목, 글쓴이, 내용, 작성날짜가 표시된다.
목록 기능은 페이징 기능이 포함된다. (Pageable 사용)
한 페이지당 default 피드 갯수는 20개이다.
총 페이지 갯수가 표시된다.
작성날짜 기준으로 최신순으로 sort한다.

 알람

알람 리스트 조회
알람 조회는 모든 회원이 권한을 가집니다.
특정 User의 알람 목록을 받아옵니다.
특정 포스트에 새 댓글이 달리고, 좋아요가 눌리면 알람이 등록됩니다.
알람 목록은 Pagination으로 받아옵니다. (Pageable 사용)
한 페이지당 default 피드 갯수는 20개
총 페이지 갯수가 표시
작성날짜 기준으로 최신순으로 sort

Post가 삭제 되었을 때 처리

Post와 Comment, Like가 관계를 맺고 있어서 댓글이 나 Like가 있는 글을 지울 때 문제가 생길 수 있습니다.
처리 방법은 Soft Delete방법과 orphanremoval = true 두 가지가 있습니다.
Soft Delete방법 추천
Foreign key빼는 것
Post는 delete쿼리를 날리지 않고 deleted_at이라는 컬럼에 now로 설정
조회 할 때 deleted_at컬럼이 null인 것만 가져오게 설정

주요 엔드 포인트

기본 url : /api/v1

댓글

댓글 조회

GET /posts/{postId}/comments[?page=0]
Pageable을 사용하여 10개씩 최신순으로 페이징한다.
리턴 (JSON 형식)
{ "resultCode": "SUCCESS", "result":{ "content":[ { "id": 3, "comment": "comment test3", "userName": "test", "postId": 2, "createdAt": "2022-12-20T16:07:25.699346" }, { "id": 2, "comment": "comment test2", "userName": "test", "postId": 2, "createdAt": "2022-12-20T16:03:30.670768" } ], "pageable":{"sort":{"empty": false, "sorted": true, "unsorted": false }, "offset": 0,}, "last": true, "totalPages": 1, "totalElements": 2, "size": 10, "number": 0, "sort":{ "empty": false, "sorted": true, "unsorted": false }, "numberOfElements": 2, "first": true, "empty": false } }
JSON
복사

댓글 작성

POST /posts/{postsId}/comments
입력폼 (JSON 형식)
{ "comment" : "comment test4" }
JSON
복사
리턴 (JSON 형식)
{ "resultCode": "SUCCESS", "result":{ "id": 4, "comment": "comment test4", "userName": "test", "postId": 2, "createdAt": "2022-12-20T16:15:04.270741" } }
JSON
복사

댓글 수정

PUT /posts/{postId}/comments/{id}
입력폼 (JSON 형식)
{ "comment" : "modify comment" }
JSON
복사
리턴 (JSON 형식)
{ "resultCode": "SUCCESS", "result":{ "id": 4, "comment": "modify comment", "userName": "test", "postId": 2, "createdAt": "2022-12-20T16:15:04.270741", "lastModifiedAt": "2022-12-23T16:15:04.270741" } }
JSON
복사

댓글 삭제

DELETE /posts/{postsId}/comments/{id}
리턴 (JSON 형식)
{ "resultCode": "SUCCESS", "result":{ "message": "댓글 삭제 완료", "id": 4 } }
JSON
복사

좋아요

좋아요 누르기

POST /posts/{postId}/likes
like를 한번 누를 때 마다 row가 1개씩 추가되는 방식으로 구현
리턴 (JSON 형식)
{ "resultCode":"SUCCESS", "result": "좋아요를 눌렀습니다." }
JSON
복사

좋아요 개수

GET /posts/{postsId}/likes
리턴 (JSON 형식)
{ "resultCode":"SUCCESS", "result": 0 }
JSON
복사

마이 피드 기능

조회 기능

GET /posts/my
로그인된 유저만의 피드목록을 필터링 하는 기능 (Pageable 사용)
리턴 (JSON 형식)
{ "resultCode": "SUCCESS", "result":{ "content":[ { "id": 4, "title": "test", "body": "body", "userName": "test", "createdAt": "2022-12-16T16:50:37.515952" } ], "pageable":{ "sort":{"empty": true, "sorted": false, "unsorted": true }, "offset": 0,}, "last": true, "totalPages": 1, "totalElements": 1, "size": 20, "number": 0, "sort":{ "empty": true, "sorted": false, "unsorted": true }, "numberOfElements": 1, "first": true, "empty": false }
JSON
복사

알람

알람 url : /alarms

특정 사용자의 글에 대한 알림 조회

알람 리스트

GET /alarms
최신 순으로 20개씩 표시 (Pageable 사용)
알람 리스트 조회 시 응답 필드
id : 알람 ID
alarmType :알람 타입 (NEW_COMMENT_ON_POST, NEW_LIKE_ON_POST)
fromUserId: fromUserId(알림을 발생시킨 user id)
targetId : targetId(알림이 발생된 post id)
text : alarmType 따라 string 필드에 담아 줄 수 있도록 필드를 선언합니다.
NEW_COMMENT_ON_POST 일 때는 alarmText new comment!
NEW_LIKE_ON_POST 일 때는 alarmText"new like!"
createdAt : 등록일시
리턴 (JSON 형식)
{ "resultCode":"SUCCESS", "result": { "content": [ { "id": 1, "alarmType": "NEW_LIKE_ON_POST", "fromUserId": 1, "targetId": 1, "text": "new like!", "createdAt": "2022-12-25T14:53:28.209+00:00", } ] } }
JSON
복사

테스트 코드 작성

마이피드 기능

Controller

마이피드 조회 성공
마이피드 조회 실패(1) - 로그인 하지 않은 경우

Service

없음

댓글 등록

Controller

댓글 작성 성공
댓글 작성 실패(1) - 로그인 하지 않은 경우
댓글 작성 실패(2) - 게시물이 존재하지 않는 경우

Service

없음.

댓글 수정

Controller

댓글 수정 성공
댓글 수정 실패(1) : 인증 실패
댓글 수정 실패(2) : Post 없는 경우
댓글 수정 실패(3) : 작성자 불일치
댓글 수정 실패(4) : 데이터베이스 에러

Service

없음

댓글 삭제

Controller

댓글 삭제 성공
댓글 삭제 실패(1) : 인증 실패
댓글 삭제 실패(2) : Post없는 경우
댓글 삭제 실패(3) : 작성자 불일치
댓글 삭제 실패(4) : 데이터베이스 에러

Service

없음

댓글 리스트

Controller

댓글 목록 조회 성공

Service

없음

좋아요 기능

Controller

좋아요 누르기 성공
좋아요 누르기 실패(1) - 로그인 하지 않은 경우
좋아요 누르기 실패(2) - 해당 Post가 없는 경우

Service

없음

알람기능

Controller

알람 목록 조회 성공
알람 목록 조회 실패 - 로그인하지 않은 경우

Service

없음
[참고자료]