diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/converter/MemberConverter.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/converter/MemberConverter.java index a86a4ae..e3e2639 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/converter/MemberConverter.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/converter/MemberConverter.java @@ -4,10 +4,12 @@ import com.example.Midnight.Snacker.web.dto.MemberDTO.MemberResponseDTO; public class MemberConverter { - public static MemberResponseDTO.MyPageResponse toMyPageResponse(Member member) { + public static MemberResponseDTO.MyPageResponse toMyPageResponse(Member member, float rating) { return MemberResponseDTO.MyPageResponse.builder() .memberId(member.getId()) .nickname(member.getNickname()) + .email(member.getEmail()) + .categories(rating) .build(); } } diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/repository/CalendarRepository.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/repository/CalendarRepository.java index dfb6126..dd23c43 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/repository/CalendarRepository.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/repository/CalendarRepository.java @@ -1,6 +1,8 @@ package com.example.Midnight.Snacker.repository; import com.example.Midnight.Snacker.domain.Calendar; +import com.example.Midnight.Snacker.domain.Member; +import com.example.Midnight.Snacker.domain.enums.Color; import com.example.Midnight.Snacker.web.dto.CalendarDTO.CalendarInfoDTO; import org.springframework.data.jpa.repository.JpaRepository; @@ -11,4 +13,9 @@ public interface CalendarRepository extends JpaRepository { List findAllByDateBetweenOrderByDateAsc(LocalDateTime startDate, LocalDateTime endDate); + // 특정 멤버와 색상, 날짜 범위로 필터링하여 개수 가져오기 + int countByMemberAndColorAndDateBetween(Member member, Color color, LocalDateTime startDate, LocalDateTime endDate); + + // 특정 멤버와 날짜 범위로 필터링하여 전체 개수 가져오기 + int countByMemberAndDateBetween(Member member, LocalDateTime startDate, LocalDateTime endDate); } diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/MemberService/MemberServiceImpl.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/MemberService/MemberServiceImpl.java index 3b3634b..f928196 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/MemberService/MemberServiceImpl.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/MemberService/MemberServiceImpl.java @@ -5,7 +5,10 @@ import com.example.Midnight.Snacker.converter.AuthConverter; import com.example.Midnight.Snacker.converter.MemberConverter; import com.example.Midnight.Snacker.domain.Member; +import com.example.Midnight.Snacker.domain.enums.Color; +import com.example.Midnight.Snacker.repository.CalendarRepository; import com.example.Midnight.Snacker.repository.MemberRepository; +import com.example.Midnight.Snacker.repository.PostRepository; import com.example.Midnight.Snacker.security.provider.JwtTokenProvider; import com.example.Midnight.Snacker.security.provider.KakaoAuthProvider; import com.example.Midnight.Snacker.web.dto.MemberDTO.AuthResponseDTO; @@ -17,6 +20,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; import java.util.Random; @@ -27,6 +32,7 @@ public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; private final JwtTokenProvider jwtTokenProvider; private final KakaoAuthProvider kakaoAuthProvider; + private final CalendarRepository calendarRepository; @Override @@ -97,7 +103,19 @@ public AuthResponseDTO.TokenRefreshResponse refresh(String refreshToken) { @Override public MemberResponseDTO.MyPageResponse getMyPageInfo(Member member) { - return MemberConverter.toMyPageResponse(member); + + LocalDateTime now = LocalDateTime.now(); + + LocalDateTime firstDayOfMonth = now.withDayOfMonth(1); + LocalDateTime lastDayOfMonth = now; + + int blackCount = calendarRepository.countByMemberAndColorAndDateBetween(member, Color.BLACK, firstDayOfMonth, lastDayOfMonth); + + int totalCount = calendarRepository.countByMemberAndDateBetween(member, firstDayOfMonth, lastDayOfMonth); + + float rating = totalCount == 0 ? 0 : ((float) blackCount / totalCount) * 100; + + return MemberConverter.toMyPageResponse(member, rating); } } diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/RecommendService/RecommendServiceImpl.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/RecommendService/RecommendServiceImpl.java index fb50a7d..b8cb623 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/RecommendService/RecommendServiceImpl.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/service/RecommendService/RecommendServiceImpl.java @@ -26,7 +26,7 @@ public class RecommendServiceImpl implements RecommendService{ public String createPrompt() { return String.format( - "저는 오후 10시에 먹을 야식을 찾고 있습니다. 건강한 야식(백)과 건강하지 않은 야식(흑)을 각각 한 개씩 추천해주세요. {한식, 중식, 일식, 양식, 아시안, 패스트푸드, 디저트, 고기} 카테고리 내에서 추천해주세요. 한국말로 추천해주세요. 그리고 각각 그 메뉴의 설명을 5가지씩 추가해주는데, 13자 이내로 작성해주세요. 메뉴는 아래의 형식으로 추천해주세요 : [{'흑', '메뉴명', '메뉴가 해당하는 카테고리', '설명1', '설명2', '설명3', '설명4', '설명5'}, {'백', '메뉴명', '메뉴가 해당하는 카테고리','설명1', '설명2', '설명3', '설명4', '설명5'}]" + "저는 오후 10시에 먹을 야식을 찾고 있습니다. 건강한 야식(백)과 건강하지 않은 야식(흑)을 각각 한 개씩 추천해주세요. {한식, 중식, 일식, 양식, 아시안, 패스트푸드, 디저트, 고기} 카테고리 내에서 추천해주세요. 한국말로 추천해주세요. 그리고 각각 그 메뉴의 설명을 3가지씩 추가해주는데, 13자 이내로 작성해주세요. 메뉴는 아래의 형식으로 추천해주세요 : [{'흑', '메뉴명', '메뉴가 해당하는 카테고리', '설명1', '설명2', '설명3'}, !!, {'백', '메뉴명', '메뉴가 해당하는 카테고리','설명1', '설명2', '설명3'}]" ); } @@ -89,7 +89,7 @@ private RecommendResponseDTO.RecommendationResultDTO parseResponse(String respon // 응답 문자열을 리스트로 변환 response = response.replaceAll("[\\[\\]{}']", ""); // 중괄호, 대괄호, 작은 따옴표 제거 String[] rawItems = response.split("\\n"); // 각각의 아이템 분리 - + rawItems = response.split("(?=백)"); // BLACK과 WHITE로 분리 List blackList = new ArrayList<>(); List whiteList = new ArrayList<>(); @@ -99,7 +99,7 @@ private RecommendResponseDTO.RecommendationResultDTO parseResponse(String respon String type = elements[0].trim(); // 흑 or 백 String menu = elements[1].trim(); // 메뉴 String category = elements[2].trim(); // 카테고리 - List descriptions = Arrays.asList(elements[3], elements[4], elements[5], elements[6], elements[7]); // 설명 리스트 + List descriptions = Arrays.asList(elements[3], elements[4], elements[5]); // 설명 리스트 RecommendResponseDTO.RecommendationDTO dto = RecommendResponseDTO.RecommendationDTO.builder() .type(convertToColor(type)) diff --git a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/dto/MemberDTO/MemberResponseDTO.java b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/dto/MemberDTO/MemberResponseDTO.java index 796bb24..14fd9e1 100644 --- a/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/dto/MemberDTO/MemberResponseDTO.java +++ b/Midnight-Snacker/src/main/java/com/example/Midnight/Snacker/web/dto/MemberDTO/MemberResponseDTO.java @@ -10,5 +10,7 @@ public class MemberResponseDTO { public static class MyPageResponse { Long memberId; String nickname; + String email; + Float categories; } } diff --git a/Midnight-Snacker/src/main/resources/application.yml b/Midnight-Snacker/src/main/resources/application.yml index b13a2c4..ea05101 100644 --- a/Midnight-Snacker/src/main/resources/application.yml +++ b/Midnight-Snacker/src/main/resources/application.yml @@ -17,6 +17,10 @@ spring: hbm2ddl: auto: update default_batch_fetch_size: 1000 + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB kakao: auth: client: ${CLIENT_ID}