Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -11,4 +13,9 @@

public interface CalendarRepository extends JpaRepository<Calendar, Long> {
List<Calendar> findAllByDateBetweenOrderByDateAsc(LocalDateTime startDate, LocalDateTime endDate);
// 특정 멤버와 색상, 날짜 범위로 필터링하여 개수 가져오기
int countByMemberAndColorAndDateBetween(Member member, Color color, LocalDateTime startDate, LocalDateTime endDate);

// 특정 멤버와 날짜 범위로 필터링하여 전체 개수 가져오기
int countByMemberAndDateBetween(Member member, LocalDateTime startDate, LocalDateTime endDate);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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'}]"
);
}

Expand Down Expand Up @@ -89,7 +89,7 @@ private RecommendResponseDTO.RecommendationResultDTO parseResponse(String respon
// 응답 문자열을 리스트로 변환
response = response.replaceAll("[\\[\\]{}']", ""); // 중괄호, 대괄호, 작은 따옴표 제거
String[] rawItems = response.split("\\n"); // 각각의 아이템 분리

rawItems = response.split("(?=백)");
// BLACK과 WHITE로 분리
List<RecommendResponseDTO.RecommendationDTO> blackList = new ArrayList<>();
List<RecommendResponseDTO.RecommendationDTO> whiteList = new ArrayList<>();
Expand All @@ -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<String> descriptions = Arrays.asList(elements[3], elements[4], elements[5], elements[6], elements[7]); // 설명 리스트
List<String> descriptions = Arrays.asList(elements[3], elements[4], elements[5]); // 설명 리스트

RecommendResponseDTO.RecommendationDTO dto = RecommendResponseDTO.RecommendationDTO.builder()
.type(convertToColor(type))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ public class MemberResponseDTO {
public static class MyPageResponse {
Long memberId;
String nickname;
String email;
Float categories;
}
}
4 changes: 4 additions & 0 deletions Midnight-Snacker/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
Loading