diff --git a/src/main/java/com/example/moizaspringserver/domain/feed/entity/PublicFeed.java b/src/main/java/com/example/moizaspringserver/domain/feed/entity/PublicFeed.java index ab2f1535..371753a1 100644 --- a/src/main/java/com/example/moizaspringserver/domain/feed/entity/PublicFeed.java +++ b/src/main/java/com/example/moizaspringserver/domain/feed/entity/PublicFeed.java @@ -49,4 +49,8 @@ public PublicFeed(String title, String content, Integer likeCount, Feed feed) { this.likeCount = likeCount; this.feed = feed; } + + public void addLike() { + likeCount++; + } } diff --git a/src/main/java/com/example/moizaspringserver/domain/feed/presenstation/FeedController.java b/src/main/java/com/example/moizaspringserver/domain/feed/presenstation/FeedController.java index 82e57c68..0e8a797e 100644 --- a/src/main/java/com/example/moizaspringserver/domain/feed/presenstation/FeedController.java +++ b/src/main/java/com/example/moizaspringserver/domain/feed/presenstation/FeedController.java @@ -1,5 +1,6 @@ package com.example.moizaspringserver.domain.feed.presenstation; +import com.example.moizaspringserver.domain.feed.service.AddLikeService; import com.example.moizaspringserver.domain.feed.service.DeleteFeedService; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -11,6 +12,7 @@ public class FeedController { private final DeleteFeedService deleteFeedService; + private final AddLikeService addLikeService; @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping("/{feed-id}") @@ -18,4 +20,10 @@ public void deleteFeed(@PathVariable("feed-id") Integer feedId) { deleteFeedService.execute(feedId); } + @ResponseStatus(HttpStatus.NO_CONTENT) + @PostMapping("/{feed-id}/like") + public void like(@PathVariable("feed-id") Integer feedId) { + addLikeService.execute(feedId); + } + } diff --git a/src/main/java/com/example/moizaspringserver/domain/feed/service/AddLikeService.java b/src/main/java/com/example/moizaspringserver/domain/feed/service/AddLikeService.java new file mode 100644 index 00000000..0e7eefb3 --- /dev/null +++ b/src/main/java/com/example/moizaspringserver/domain/feed/service/AddLikeService.java @@ -0,0 +1,42 @@ +package com.example.moizaspringserver.domain.feed.service; + +import com.example.moizaspringserver.domain.feed.entity.PublicFeed; +import com.example.moizaspringserver.domain.feed.exception.FeedNotFoundException; +import com.example.moizaspringserver.domain.feed.respository.PublicFeedRepository; +import com.example.moizaspringserver.domain.like.entity.FeedLike; +import com.example.moizaspringserver.domain.like.entity.FeedLikeId; +import com.example.moizaspringserver.domain.like.repository.FeedLikeRepository; +import com.example.moizaspringserver.domain.user.facade.UserFacade; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Service +public class AddLikeService { + + private final PublicFeedRepository publicFeedRepository; + private final UserFacade userFacade; + private final FeedLikeRepository feedLikeRepository; + + @Transactional + public void execute(Integer feedId) { + + PublicFeed feed = publicFeedRepository.findById(feedId) + .orElseThrow(() -> FeedNotFoundException.EXCEPTION); + + FeedLike feedLike = FeedLike.builder() + .id(FeedLikeId.builder() + .user( + userFacade.queryCurrentUser() + .getId() + ) + .feed(feed.getFeedId()) + .build()) + .build(); + + feed.addLike(); + + feedLikeRepository.save(feedLike); + } +} diff --git a/src/main/java/com/example/moizaspringserver/domain/like/entity/FeedLike.java b/src/main/java/com/example/moizaspringserver/domain/like/entity/FeedLike.java index 72782e19..d782a2a2 100644 --- a/src/main/java/com/example/moizaspringserver/domain/like/entity/FeedLike.java +++ b/src/main/java/com/example/moizaspringserver/domain/like/entity/FeedLike.java @@ -35,10 +35,7 @@ public class FeedLike extends BaseTimeEntity { private Feed feed; @Builder - public FeedLike(FeedLikeId id, User user, - Feed feed) { + public FeedLike(FeedLikeId id) { this.id = id; - this.user = user; - this.feed = feed; } } diff --git a/src/main/java/com/example/moizaspringserver/global/security/SecurityConfig.java b/src/main/java/com/example/moizaspringserver/global/security/SecurityConfig.java index 7ee16e5b..44013b7a 100644 --- a/src/main/java/com/example/moizaspringserver/global/security/SecurityConfig.java +++ b/src/main/java/com/example/moizaspringserver/global/security/SecurityConfig.java @@ -63,6 +63,8 @@ protected void configure(HttpSecurity http) throws Exception { // feeds .antMatchers(HttpMethod.DELETE, "/feeds/{feed-id}").authenticated() + .antMatchers(HttpMethod.POST, "/feeds/{feed-id}/like").hasAnyAuthority(UserType.ROLE_STUDENT.name(), UserType.ROLE_GRADUATE + .name()) // notice .antMatchers(HttpMethod.GET, "/notices/{notice-id}").authenticated()