2222import com .example .log4u .domain .diary .repository .DiaryRepository ;
2323import com .example .log4u .domain .follow .repository .FollowRepository ;
2424import com .example .log4u .domain .like .repository .LikeRepository ;
25- import com .example .log4u .domain .map .service .MapService ;
2625import com .example .log4u .domain .media .entity .Media ;
2726import com .example .log4u .domain .media .service .MediaService ;
2827
@@ -37,23 +36,17 @@ public class DiaryService {
3736 private final DiaryRepository diaryRepository ;
3837 private final FollowRepository followRepository ;
3938 private final MediaService mediaService ;
40- private final MapService mapService ;
4139 private final LikeRepository likeRepository ;
4240
4341 // 다이어리 생성
4442 @ Transactional
45- public void saveDiary (Long userId , DiaryRequestDto request ) {
46- String thumbnailUrl = mediaService .extractThumbnailUrl (request .mediaList ());
47- Diary diary = diaryRepository .save (
48- DiaryRequestDto .toEntity (userId , request , thumbnailUrl )
49- );
50- mediaService .saveMedia (diary .getDiaryId (), request .mediaList ());
51- mapService .increaseRegionDiaryCount (request .location ().latitude (), request .location ().longitude ());
43+ public Diary saveDiary (Long userId , DiaryRequestDto request , String thumbnailUrl ) {
44+ return diaryRepository .save (DiaryRequestDto .toEntity (userId , request , thumbnailUrl ));
5245 }
5346
5447 // 다이어리 검색
5548 @ Transactional (readOnly = true )
56- public PageResponse <DiaryResponseDto > searchDiariesByCursor (
49+ public Slice <DiaryResponseDto > searchDiariesByCursor (
5750 String keyword ,
5851 SortType sort ,
5952 Long cursorId ,
@@ -66,17 +59,12 @@ public PageResponse<DiaryResponseDto> searchDiariesByCursor(
6659 cursorId != null ? cursorId : Long .MAX_VALUE ,
6760 PageRequest .of (0 , size )
6861 );
69-
70- Slice <DiaryResponseDto > dtoSlice = mapToDtoSlice (diaries );
71-
72- // 다음 커서 ID 계산
73- Long nextCursor = !dtoSlice .isEmpty () ? dtoSlice .getContent ().getLast ().diaryId () : null ;
74-
75- return PageResponse .of (dtoSlice , nextCursor );
62+ return mapToDtoSlice (diaries );
7663 }
7764
7865 // 다이어리 상세 조회
7966 @ Transactional (readOnly = true )
67+ @ Deprecated (since = "파사드 패턴 도입으로 인해 불필요해짐" , forRemoval = false )
8068 public DiaryResponseDto getDiary (Long userId , Long diaryId ) {
8169 Diary diary = findDiaryOrThrow (diaryId );
8270
@@ -89,43 +77,27 @@ public DiaryResponseDto getDiary(Long userId, Long diaryId) {
8977
9078 // 다이어리 목록 (프로필 페이지)
9179 @ Transactional (readOnly = true )
92- public PageResponse <DiaryResponseDto > getDiariesByCursor (Long userId , Long targetUserId , Long cursorId , int size ) {
80+ public Slice <DiaryResponseDto > getDiaryResponseDtoSlice (Long userId , Long targetUserId , Long cursorId , int size ) {
9381 List <VisibilityType > visibilities = determineAccessibleVisibilities (userId , targetUserId );
94-
9582 Slice <Diary > diaries = diaryRepository .findByUserIdAndVisibilityInAndCursorId (
9683 targetUserId ,
9784 visibilities ,
9885 cursorId != null ? cursorId : Long .MAX_VALUE ,
9986 PageRequest .of (0 , size )
10087 );
101-
102- Slice <DiaryResponseDto > dtoSlice = mapToDtoSlice (diaries );
103-
104- Long nextCursor = !dtoSlice .isEmpty () ? dtoSlice .getContent ().getLast ().diaryId () : null ;
105-
106- return PageResponse .of (dtoSlice , nextCursor );
88+ return mapToDtoSlice (diaries );
10789 }
10890
10991 // 다이어리 수정
11092 @ Transactional
111- public void updateDiary (Long userId , Long diaryId , DiaryRequestDto request ) {
112- Diary diary = findDiaryOrThrow (diaryId );
113- validateOwner (diary , userId );
114-
115- if (request .mediaList () != null ) {
116- mediaService .updateMediaByDiaryId (diary .getDiaryId (), request .mediaList ());
117- }
118-
119- String newThumbnailUrl = mediaService .extractThumbnailUrl (request .mediaList ());
93+ public void updateDiary (Diary diary , DiaryRequestDto request , String newThumbnailUrl ) {
12094 diary .update (request , newThumbnailUrl );
95+ diaryRepository .save (diary );
12196 }
12297
12398 // 다이어리 삭제
12499 @ Transactional
125- public void deleteDiary (Long userId , Long diaryId ) {
126- Diary diary = findDiaryOrThrow (diaryId );
127- validateOwner (diary , userId );
128- mediaService .deleteMediaByDiaryId (diaryId );
100+ public void deleteDiary (Diary diary ) {
129101 diaryRepository .delete (diary );
130102 }
131103
@@ -173,7 +145,7 @@ private void validateOwner(Diary diary, Long userId) {
173145 }
174146 }
175147
176- // 다이어리 목록 조회 시 권한 체크
148+ // 다이어리 목록 조회 시 권한 체크(공개 정책)
177149 private List <VisibilityType > determineAccessibleVisibilities (Long userId , Long targetUserId ) {
178150 if (userId .equals (targetUserId )) {
179151 return List .of (VisibilityType .PUBLIC , VisibilityType .PRIVATE , VisibilityType .FOLLOWER );
@@ -186,6 +158,20 @@ private List<VisibilityType> determineAccessibleVisibilities(Long userId, Long t
186158 return List .of (VisibilityType .PUBLIC );
187159 }
188160
161+ // 파사드 패턴에서 사용할 검증 로직(소유 검증)
162+ public Diary getDiaryAfterValidateOwnership (Long diaryId , Long userId ) {
163+ Diary diary = findDiaryOrThrow (diaryId );
164+ validateOwner (diary , userId );
165+ return diary ;
166+ }
167+
168+ // 파사드 패턴에서 사용할 검증 로직(공개 범위 검증)
169+ public Diary getDiaryAfterValidateAccess (Long diaryId , Long userId ) {
170+ Diary diary = findDiaryOrThrow (diaryId );
171+ validateDiaryAccess (diary , userId );
172+ return diary ;
173+ }
174+
189175 // 다이어리 상세 조회 시 권한 체크
190176 private void validateDiaryAccess (Diary diary , Long userId ) {
191177 if (diary .getVisibility () == VisibilityType .PRIVATE ) {
0 commit comments