diff --git a/src/main/java/com/back/domain/myhistory/controller/MyHistoryController.java b/src/main/java/com/back/domain/myhistory/controller/MyHistoryController.java index ca15f934..bf8684bb 100644 --- a/src/main/java/com/back/domain/myhistory/controller/MyHistoryController.java +++ b/src/main/java/com/back/domain/myhistory/controller/MyHistoryController.java @@ -33,6 +33,15 @@ public RsData getMyPosts( MyHistoryPostListDto body = myHistoryService.getMyPosts(userId, lastCreatedAt, lastId, limit); return RsData.successOf(body); } + + @GetMapping("/posts/{id}") + public RsData goFromPost( + @AuthenticationPrincipal(expression = "id") Long userId, + @PathVariable("id") Long postId + ) { + var body = myHistoryService.getPostLinkFromMyPost(userId, postId); + return RsData.successOf(body); + } @GetMapping("/comments") public RsData getMyComments( diff --git a/src/main/java/com/back/domain/myhistory/dto/MyHistoryPostGoResponseDto.java b/src/main/java/com/back/domain/myhistory/dto/MyHistoryPostGoResponseDto.java new file mode 100644 index 00000000..e4551817 --- /dev/null +++ b/src/main/java/com/back/domain/myhistory/dto/MyHistoryPostGoResponseDto.java @@ -0,0 +1,12 @@ +package com.back.domain.myhistory.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class MyHistoryPostGoResponseDto { + private Long postId; + private String postApiUrl; +} + diff --git a/src/main/java/com/back/domain/myhistory/repository/MyHistoryPostRepository.java b/src/main/java/com/back/domain/myhistory/repository/MyHistoryPostRepository.java index d3ee9d1d..ba955cd0 100644 --- a/src/main/java/com/back/domain/myhistory/repository/MyHistoryPostRepository.java +++ b/src/main/java/com/back/domain/myhistory/repository/MyHistoryPostRepository.java @@ -36,4 +36,10 @@ List findMyPostsAfter(@Param("userId") Long userId, @Param("lastCreatedAt") LocalDateTime lastCreatedAt, @Param("lastId") Long lastId, Pageable pageable); + + @Query(""" + select p from Post p + where p.id = :id and p.user.id = :userId + """) + Post findByIdAndUserId(@Param("id") Long id, @Param("userId") Long userId); } diff --git a/src/main/java/com/back/domain/myhistory/service/MyHistoryService.java b/src/main/java/com/back/domain/myhistory/service/MyHistoryService.java index b0a6c691..b86d610d 100644 --- a/src/main/java/com/back/domain/myhistory/service/MyHistoryService.java +++ b/src/main/java/com/back/domain/myhistory/service/MyHistoryService.java @@ -95,4 +95,17 @@ public MyHistoryCommentGoResponseDto getPostLinkFromMyComment(Long userId, Long String apiUrl = "/api/posts/" + postId; return new MyHistoryCommentGoResponseDto(postId, apiUrl); } + + @Transactional(readOnly = true) + public MyHistoryPostGoResponseDto getPostLinkFromMyPost(Long userId, Long postId) { + Post p = myHistoryPostRepository.findByIdAndUserId(postId, userId); + if (p == null) { + throw new ServiceException(404, "게시글을 찾을 수 없습니다."); + } + if (p.getStatus() == PostStatus.DELETED) { + throw new ServiceException(410, "삭제된 게시글입니다."); + } + String apiUrl = "/api/posts/" + p.getId(); + return new MyHistoryPostGoResponseDto(p.getId(), apiUrl); + } }