44import com .movelog .domain .news .domain .repository .NewsRepository ;
55import com .movelog .domain .news .dto .request .CreateNewsReq ;
66import com .movelog .domain .news .dto .request .NewsHeadLineReq ;
7- import com .movelog .domain .news .dto .response .HeadLineRes ;
8- import com .movelog .domain .news .dto .response .RecentKeywordsRes ;
9- import com .movelog .domain .news .dto .response .RecentNewsRes ;
7+ import com .movelog .domain .news .dto .response .*;
108import com .movelog .domain .record .domain .Keyword ;
119import com .movelog .domain .record .domain .VerbType ;
1210import com .movelog .domain .record .exception .KeywordNotFoundException ;
1816import com .movelog .global .config .security .token .UserPrincipal ;
1917import com .movelog .global .util .S3Util ;
2018import lombok .RequiredArgsConstructor ;
19+ import org .springframework .data .domain .Page ;
2120import org .springframework .data .domain .PageRequest ;
2221import org .springframework .data .domain .Pageable ;
2322import org .springframework .stereotype .Service ;
@@ -85,7 +84,7 @@ public List<RecentKeywordsRes> getRecentKeywords(UserPrincipal userPrincipal) {
8584 .toList ();
8685 }
8786
88- public List <RecentNewsRes > getRecentNews (UserPrincipal userPrincipal , Integer page ) {
87+ public Page <RecentNewsRes > getRecentNews (UserPrincipal userPrincipal , Integer page ) {
8988 User user = validateUser (userPrincipal );
9089 // User user = userRepository.findById(5L).orElseThrow(UserNotFoundException::new);
9190
@@ -94,23 +93,68 @@ public List<RecentNewsRes> getRecentNews(UserPrincipal userPrincipal, Integer pa
9493
9594 // 최근 일주일간 생성한 뉴스 목록 조회
9695 LocalDateTime createdAt = LocalDateTime .now ().minusDays (7 );
97- List <News > recentNews = newsRepository .findRecentNewsByUser (user , createdAt , pageable );
98-
99- // 최신순 정렬
100- recentNews .sort ((n1 , n2 ) -> n2 .getCreatedAt ().compareTo (n1 .getCreatedAt ()));
101-
102- return recentNews .stream ()
103- .map (news -> RecentNewsRes .builder ()
104- .newsId (news .getNewsId ())
105- .newsImageUrl (news .getNewsUrl ())
106- .headLine (news .getHeadLine ())
107- .noun (news .getKeyword ().getKeyword ())
108- .verb (VerbType .getStringVerbType (news .getKeyword ().getVerbType ()))
109- .createdAt (news .getCreatedAt ())
110- .build ())
111- .toList ();
96+ Page <News > recentNews = newsRepository .findRecentNewsByUser (user , createdAt , pageable );
97+
98+ return recentNews .map (news -> RecentNewsRes .builder ()
99+ .newsId (news .getNewsId ())
100+ .newsImageUrl (news .getNewsUrl ())
101+ .headLine (news .getHeadLine ())
102+ .noun (news .getKeyword ().getKeyword ())
103+ .verb (VerbType .getStringVerbType (news .getKeyword ().getVerbType ()))
104+ .createdAt (news .getCreatedAt ())
105+ .build ());
106+ }
107+
108+ public TodayNewsStatusRes getTodayNewsStatus (UserPrincipal userPrincipal ) {
109+ User user = validateUser (userPrincipal );
110+ // User user = userRepository.findById(5L).orElseThrow(UserNotFoundException::new);
111+
112+ // 사용자가 생성한 모든 뉴스 개수 조회
113+ List <Keyword > keywords = user .getKeywords ();
114+ long totalNewsCount = keywords .stream ()
115+ .mapToLong (newsRepository ::countByKeyword )
116+ .sum ();
117+
118+ long newsStatus = totalNewsCount % 5 ;
119+ LocalDateTime today = LocalDateTime .now ();
120+
121+ // 오늘 생성한 뉴스가 있으면 true, 없으면 false
122+ boolean isTodayNews = !newsRepository .findRecentNewsByUser (user , today , PageRequest .of (0 , 1 )).isEmpty ();
123+
124+ int result ;
125+ if (newsStatus == 0 && isTodayNews ) {
126+ result = 5 ;
127+ }
128+ else if (newsStatus == 0 ) {
129+ result = 0 ;
130+ }
131+ else {
132+ result = (int ) newsStatus ;
133+ }
134+
135+ return TodayNewsStatusRes .builder ()
136+ .newsStatus (result )
137+ .build ();
112138 }
113139
140+ public Page <NewsCalendarRes > getNewsByDate (UserPrincipal userPrincipal , String date , int page ) {
141+ User user = validateUser (userPrincipal );
142+ // User user = userRepository.findById(5L).orElseThrow(UserNotFoundException::new);
143+
144+ LocalDateTime start = LocalDateTime .parse (date + "T00:00:00" );
145+ LocalDateTime end = LocalDateTime .parse (date + "T23:59:59" );
146+
147+ Pageable pageable = PageRequest .of (0 , 15 ); // 원하는 페이지와 크기를 지정
148+ Page <News > newsList = newsRepository .findNewsByUserAndCreatedAtBetween (user , start , end , pageable );
149+
150+ return newsList .map (news -> NewsCalendarRes .builder ()
151+ .newsId (news .getNewsId ())
152+ .newsImageUrl (news .getNewsUrl ())
153+ .noun (news .getKeyword ().getKeyword ())
154+ .verb (VerbType .getStringVerbType (news .getKeyword ().getVerbType ()))
155+ .createdAt (news .getCreatedAt ())
156+ .build ());
157+ }
114158
115159 // User 정보 검증
116160 private User validateUser (UserPrincipal userPrincipal ) {
0 commit comments