-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
[Feature/#92-like-api ] LIKE API
- Loading branch information
Showing
15 changed files
with
1,128 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
= COMMENT API | ||
pochak server team~~ | ||
:doctype: book | ||
:icons: font | ||
:source-highlighter: highlishtjs | ||
:toc: left | ||
:toclevels: 4 | ||
:sectlinks: | ||
|
||
ifndef::snippets[] | ||
:snippets: ./build/generated-snippets | ||
endif::[] | ||
|
||
== `GET` Like API | ||
|
||
좋아요 누른 사람들 조회 API | ||
|
||
=== Request | ||
|
||
include::{snippets}/get-like/curl-request.adoc[] | ||
|
||
==== path parameters | ||
include::{snippets}/get-like/path-parameters.adoc[] | ||
|
||
==== request headers | ||
include::{snippets}/get-like/request-headers.adoc[] | ||
|
||
=== Response | ||
==== response body | ||
include::{snippets}/get-like/response-body.adoc[] | ||
include::{snippets}/get-like/response-fields.adoc[] | ||
|
||
== `POST` Like API | ||
|
||
포스트 좋아요 API | ||
|
||
=== Request | ||
include::{snippets}/like-post/http-request.adoc[] | ||
|
||
==== path parameters | ||
include::{snippets}/like-post/path-parameters.adoc[] | ||
|
||
==== request headers | ||
include::{snippets}/like-post/request-headers.adoc[] | ||
|
||
=== Response | ||
==== response body | ||
include::{snippets}/like-post/response-body.adoc[] | ||
include::{snippets}/like-post/response-fields.adoc[] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
src/main/java/com/apps/pochak/like/controller/LikeController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.apps.pochak.like.controller; | ||
|
||
import com.apps.pochak.global.apiPayload.ApiResponse; | ||
import com.apps.pochak.like.dto.response.LikeElements; | ||
import com.apps.pochak.like.service.LikeService; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
import static com.apps.pochak.global.apiPayload.code.status.SuccessStatus.SUCCESS_LIKE; | ||
|
||
@RestController | ||
@RequiredArgsConstructor | ||
@RequestMapping("api/v2/posts/{postId}/like") | ||
public class LikeController { | ||
|
||
private final LikeService likeService; | ||
|
||
@GetMapping("") | ||
public ApiResponse<LikeElements> getLikeMembers(@PathVariable("postId") final Long postId) { | ||
return ApiResponse.onSuccess(likeService.getMemberLikedPost(postId)); | ||
} | ||
|
||
@PostMapping("") | ||
public ApiResponse<Void> likePost(@PathVariable("postId") final Long postId) { | ||
likeService.likePost(postId); | ||
return ApiResponse.of(SUCCESS_LIKE); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 17 additions & 2 deletions
19
src/main/java/com/apps/pochak/like/dto/response/LikeElement.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,22 @@ | ||
package com.apps.pochak.like.dto.response; | ||
|
||
import lombok.Data; | ||
import com.apps.pochak.member.domain.Member; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
|
||
@Data | ||
@Getter | ||
@AllArgsConstructor | ||
public class LikeElement { | ||
|
||
private String handle; | ||
private String profileImage; | ||
private String name; | ||
private Boolean follow; | ||
|
||
public LikeElement(final Member member, final Boolean follow) { | ||
this.handle = member.getHandle(); | ||
this.profileImage = member.getProfileImage(); | ||
this.name = member.getName(); | ||
this.follow = follow; | ||
} | ||
} |
10 changes: 8 additions & 2 deletions
10
src/main/java/com/apps/pochak/like/dto/response/LikeElements.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,13 @@ | ||
package com.apps.pochak.like.dto.response; | ||
|
||
import lombok.Data; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
|
||
@Data | ||
import java.util.List; | ||
|
||
@Getter | ||
@AllArgsConstructor | ||
public class LikeElements { | ||
|
||
private final List<LikeElement> likeMembersList; | ||
} |
52 changes: 52 additions & 0 deletions
52
src/main/java/com/apps/pochak/like/service/LikeService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,63 @@ | ||
package com.apps.pochak.like.service; | ||
|
||
import com.apps.pochak.follow.domain.repository.FollowRepository; | ||
import com.apps.pochak.global.apiPayload.exception.GeneralException; | ||
import com.apps.pochak.like.domain.LikeEntity; | ||
import com.apps.pochak.like.domain.repository.LikeRepository; | ||
import com.apps.pochak.like.dto.response.LikeElement; | ||
import com.apps.pochak.like.dto.response.LikeElements; | ||
import com.apps.pochak.login.jwt.JwtService; | ||
import com.apps.pochak.member.domain.Member; | ||
import com.apps.pochak.post.domain.Post; | ||
import com.apps.pochak.post.domain.repository.PostRepository; | ||
import jakarta.transaction.Transactional; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.List; | ||
|
||
import static com.apps.pochak.global.BaseEntityStatus.ACTIVE; | ||
import static com.apps.pochak.global.BaseEntityStatus.DELETED; | ||
import static com.apps.pochak.global.apiPayload.code.status.ErrorStatus.POST_OWNER_LIKE; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class LikeService { | ||
private final LikeRepository likeRepository; | ||
private final PostRepository postRepository; | ||
private final FollowRepository followRepository; | ||
private final JwtService jwtService; | ||
|
||
@Transactional | ||
public void likePost(final Long postId) { | ||
final Member loginMember = jwtService.getLoginMember(); | ||
final Post post = postRepository.findPostById(postId); | ||
|
||
if (loginMember == post.getOwner()) | ||
throw new GeneralException(POST_OWNER_LIKE); | ||
|
||
LikeEntity postLike = likeRepository.findByLikeMemberAndLikedPost(loginMember, post); | ||
if (postLike != null) { | ||
if (postLike.getStatus().equals(ACTIVE)) | ||
postLike.setStatus(DELETED); | ||
else if (postLike.getStatus().equals(DELETED)) | ||
postLike.setStatus(ACTIVE); | ||
} else { | ||
postLike = new LikeEntity(loginMember, post); | ||
} | ||
likeRepository.save(postLike); | ||
} | ||
|
||
@Transactional | ||
public LikeElements getMemberLikedPost(final Long postId) { | ||
final Member loginMember = jwtService.getLoginMember(); | ||
final Post likedPost = postRepository.findPostById(postId); | ||
List<LikeEntity> likes = likeRepository.findByLikedPost(likedPost); | ||
|
||
final List<LikeElement> likeElements = likes.stream().map( | ||
like -> new LikeElement(like.getLikeMember(), followRepository.existsBySenderAndReceiver(loginMember, like.getLikeMember()) | ||
)).toList(); | ||
|
||
return new LikeElements(likeElements); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.