Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] develop 브랜치 버전 맞추기 #102

Closed
wants to merge 104 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
af77c15
chore: Gemini, openai API 추가 (#41)
Haewonny Feb 15, 2024
fd4fa48
feat: Gemini RestTemplate 설정 (#41)
Haewonny Feb 15, 2024
19179a2
feat: Gemini 요청, 응답 dto 추가 (#41)
Haewonny Feb 15, 2024
0c26bb6
feat: Gemini 카드 추천 구현 (#41)
Haewonny Feb 15, 2024
aef3223
feat: Openai RestTemplate 설정 (#41)
Haewonny Feb 15, 2024
7f6fe59
feat: Openai 요청, 응답 dto 추가 (#41)
Haewonny Feb 15, 2024
9d05c50
feat: Openai gpt 카드 추천 구현 (#41)
Haewonny Feb 15, 2024
1ed2270
Merge pull request #42 from EWHA-LUX/feature/#41
Haewonny Feb 16, 2024
a9030b2
feat: FCM 주카드 실적 알림, 목표 응원 알림 (#43)
julia-heo Feb 28, 2024
f0a987e
feat: CODEF 연결, 주카드 등록 (#43)
julia-heo Feb 28, 2024
ffd28d3
fix: Timezone 변경 (#12)
Haewonny Mar 1, 2024
2ea3a95
feat: 알림 리스트 조회 닉네임 추가 (#12)
Haewonny Mar 1, 2024
d5e5d33
Merge pull request #44 from EWHA-LUX/feature/#12
Haewonny Mar 3, 2024
5ae4bb3
fix: TimeZone 변경 (#45)
Haewonny Mar 3, 2024
bc2abd2
Merge pull request #46 from EWHA-LUX/feature/#45
Haewonny Mar 3, 2024
af676e6
fix: Docker timezone 설정 (#45)
Haewonny Mar 4, 2024
88d9122
Merge pull request #47 from EWHA-LUX/feature/#45
Haewonny Mar 5, 2024
99ec85b
feat: Subscription -> FCMToken 엔티티 이름 변경 (#43)
julia-heo Mar 6, 2024
c66ca46
feat: 매달 주카드 아닌 보유카드 실적 초기화 (#43)
julia-heo Mar 6, 2024
b7432a3
fix: deploy 오류 해결
Haewonny Mar 6, 2024
de0bc0e
feat: 주카드 실적 업데이트 api (#43)
julia-heo Mar 6, 2024
38cfad9
fix: date type 변경
Haewonny Mar 6, 2024
2f91cdd
feat: FCM Token 등록 url 변경 (#43)
julia-heo Mar 10, 2024
c8cf48e
feat: CODEF AccessToken redis 처리부분 (#43)
julia-heo Mar 11, 2024
f23f347
feat: 주카드 등록 로직 수정 (#43)
julia-heo Mar 11, 2024
517c34c
feat: 배포 시 firebase/once-firebase-adminsdk.json 생성 (#43)
julia-heo Mar 11, 2024
c6ca267
Merge pull request #51 from EWHA-LUX/feature/#43
Haewonny Mar 12, 2024
5ce44a8
feat: ERD 수정사항 반영 (#52)
Haewonny Mar 12, 2024
55ff88a
Merge pull request #53 from EWHA-LUX/feature/#52
Haewonny Mar 12, 2024
0040353
fix: dbData가 null인 경우 return null (#54)
julia-heo Mar 14, 2024
4659d05
Merge pull request #55 from EWHA-LUX/fix/#54
Haewonny Mar 15, 2024
9b054df
feat: 카드 혜택 크롤링 자동화 (#56)
julia-heo Mar 18, 2024
9d72544
fix: Logger 수정 (#56)
julia-heo Mar 19, 2024
3d11350
Merge pull request #59 from EWHA-LUX/feature/#56
Haewonny Mar 19, 2024
7f51e7b
fix: FCM json 파일 오류 해결, python 파일 위치 변경
julia-heo Mar 20, 2024
a287fc2
feat: 카드 검색 시 type(신용카드/체크카드) 추가 (#23)
julia-heo Mar 21, 2024
6be37d1
Merge pull request #60 from EWHA-LUX/feature/#23
julia-heo Mar 21, 2024
54bb4d0
feat: ERD 수정사항 반영 (#57)
Haewonny Mar 23, 2024
2b70134
refactor: 결제 카드 추천 메소드명 변경 (#57)
Haewonny Mar 23, 2024
2a701f0
feat: 카드 혜택 요약 자동화 구현 (#57)
Haewonny Mar 23, 2024
1390d4f
Merge pull request #61 from EWHA-LUX/feature/#57
Haewonny Mar 24, 2024
6964612
fix: 회원 정보 patch 오류 해결 (#29)
Haewonny Mar 27, 2024
c27f352
feat: 회원 정보 조회 username 추가 (#29)
Haewonny Mar 27, 2024
2c7a5c0
Merge pull request #65 from EWHA-LUX/feature/#29
Haewonny Mar 29, 2024
c761f1d
fix: 파이썬 크롤링 코드 업데이트 (#66)
Haewonny Mar 29, 2024
b67e51a
test: 크롤링 테스트 코드 작성 (#66)
Haewonny Mar 29, 2024
e524a53
fix: 크롤링 자동화 오류 해결 -ing (#66)
Haewonny Mar 29, 2024
c70fdfa
fix: 오타 수정 (#66)
Haewonny Mar 29, 2024
7a8c5e4
Merge pull request #67 from EWHA-LUX/fix/#66
Haewonny Mar 29, 2024
b21ea47
fix: 크롤링 로그 출력 문제 해결 (#66)
Haewonny Mar 29, 2024
ba62c3d
Merge pull request #68 from EWHA-LUX/fix/#66
Haewonny Mar 29, 2024
395ebef
fix: S3정보 config.ini로 처리 (#66)
julia-heo Mar 29, 2024
95dc2d8
fix: 국민 크롤링 경로 수정 (#66)
julia-heo Mar 29, 2024
3c944e8
Merge pull request #70 from EWHA-LUX/fix/#66
julia-heo Mar 29, 2024
57e008e
fix: 도커 Timezone 변경 (#66)
Haewonny Mar 30, 2024
d3ca42a
fix: 삼성 크롤링 코드 수정 (#66)
Haewonny Mar 30, 2024
170a023
fix: 롯데 환경변수 수정 (#66)
Haewonny Mar 30, 2024
679eee2
fix: unexpected indent 제거
julia-heo Mar 31, 2024
11f8f29
test: 크롤링 자동화 테스트 -ing
Haewonny Apr 1, 2024
d4cf92d
test: 혜택 요약 테스트 컨트롤러 추가
Haewonny Apr 1, 2024
fea5ff2
feat: 카드 혜택 test api 작성
julia-heo Apr 1, 2024
5e33734
test: 카드 혜택 test api 수정
julia-heo Apr 1, 2024
e27e31a
test: 카드 혜택 test api 수정
julia-heo Apr 1, 2024
3555c1d
test: 범위로 혜택 요약하는 컨트롤러 추가
Haewonny Apr 1, 2024
a7e46ad
Merge pull request #73 from julia-heo/develop
Haewonny Apr 7, 2024
5580118
feat: 마이월렛 조회 닉네임 추가 (#31)
Haewonny Apr 8, 2024
7694ab2
feat: 마이월렛 조회 카드사 추가 (#31)
Haewonny Apr 8, 2024
3b32b72
Merge pull request #74 from EWHA-LUX/feature/#31
Haewonny Apr 8, 2024
d3b1bfd
feat: gpt 프롬프트 업데이트 (#41)
julia-heo Apr 9, 2024
d584694
Merge pull request #75 from EWHA-LUX/feature/#41
julia-heo Apr 9, 2024
8c45122
feat: 카드사 연결 현황 확인 api (#72)
julia-heo Apr 10, 2024
d33ff8d
feat: 사용자 근처 단골가게 조회 (#72)
julia-heo Apr 10, 2024
b0ab09e
feat: 홈 기본 정보 응답 추가 (#8)
Haewonny Apr 15, 2024
0ef04ed
Merge pull request #77 from EWHA-LUX/feature/#8
Haewonny Apr 15, 2024
afbb493
feat: 챗봇 응답에 카드사 추가 (#41)
Haewonny Apr 16, 2024
71ea830
Merge pull request #78 from EWHA-LUX/feature/#41
Haewonny Apr 16, 2024
258ea6e
fix: 홈화면 검색 키워드 중복 제거 (#79)
julia-heo Apr 19, 2024
1efda2d
Merge pull request #80 from EWHA-LUX/fix/#79
julia-heo Apr 19, 2024
bf93041
feat: 마이웰렛 카테고리 분류 추가 (#81)
julia-heo Apr 22, 2024
9722b00
Merge pull request #82 from EWHA-LUX/feature/#81
julia-heo Apr 22, 2024
88347cd
Merge branch 'develop' into feature/#72
julia-heo May 2, 2024
93a6119
Merge pull request #84 from EWHA-LUX/feature/#72
julia-heo May 2, 2024
8ff3090
fix: 회원 탈퇴 api 수정 (#83)
julia-heo May 2, 2024
9e20568
feat: 추천 카드 주카드 여부 반환 (#86)
julia-heo May 2, 2024
ad6f01a
Merge pull request #85 from EWHA-LUX/fix/#83
Haewonny May 4, 2024
43e7c02
Merge pull request #87 from EWHA-LUX/feature/#86
Haewonny May 4, 2024
8d96b39
fix: 비밀번호 변경 오류 수정 (#88)
jiminnee May 5, 2024
58834e0
Merge pull request #89 from EWHA-LUX/fix/#88
jiminnee May 5, 2024
b2a2b68
fix: codef 보유 카드 조회 post 변경 (#91)
julia-heo May 17, 2024
0a3f75f
Merge pull request #92 from EWHA-LUX/fix/#91
julia-heo May 17, 2024
83d2ae9
feat: 스케줄러 시간 변경
Haewonny May 19, 2024
4dd5fa0
fix: 카드 실적 입력 cardId에서 ownedCardId로 수정 (#93)
jiminnee May 22, 2024
8ec3203
fix: 카드 실적 입력 users에서 nowUser로 조회 변경 (#93)
jiminnee May 22, 2024
00a9802
Merge pull request #94 from EWHA-LUX/fix/#93
jiminnee May 22, 2024
c94f525
feat: 프롬프트 업데이트 (#72)
julia-heo May 23, 2024
6e45ea3
feat: 단골가게 저장 로직 변경 (#72)
julia-heo May 23, 2024
1019abf
feat: 비콘 엔티티 생성, 알림 생성 요청 api (#72)
julia-heo May 23, 2024
f03216f
feat: 푸시 알림 title 수정 (#72)
julia-heo May 23, 2024
6013be1
Merge pull request #95 from EWHA-LUX/feature/#72-2
julia-heo May 24, 2024
d625fda
feat: 푸시 알림 페이지 이동을 위한 알림id추가 (#72)
julia-heo May 24, 2024
97d3abb
fix: post로 변경 (#98)
julia-heo May 25, 2024
9b4f03e
Merge pull request #97 from EWHA-LUX/feature/#72
julia-heo May 25, 2024
bb51592
Merge pull request #99 from EWHA-LUX/fix/#98
julia-heo May 25, 2024
6052467
fix: 월별혜택 receivedSum 수정
julia-heo May 26, 2024
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
Prev Previous commit
Next Next commit
feat: Gemini 카드 추천 구현 (#41)
Haewonny committed Feb 15, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 0c26bb659a57d00c3e12b03bedacfe2e460749cd
19 changes: 6 additions & 13 deletions src/main/java/ewha/lux/once/domain/home/dto/ChatDto.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package ewha.lux.once.domain.home.dto;

import lombok.Getter;
import lombok.Setter;
import lombok.*;

@Getter
@Setter
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ChatDto {

private String nickname;
private int ownedCardCount;
private Long chatId;
@@ -14,13 +16,4 @@ public class ChatDto {
private String benefit;
private int discount;

public ChatDto(String nickname, int ownedCardCount, Long chatId, String cardName, String cardImg, String benefit, int discount){
this.nickname = nickname;
this.ownedCardCount = ownedCardCount;
this.chatId = chatId;
this.cardName = cardName;
this.cardImg = cardImg;
this.benefit = benefit;
this.discount = discount;
}
}
59 changes: 59 additions & 0 deletions src/main/java/ewha/lux/once/domain/home/service/GeminiService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package ewha.lux.once.domain.home.service;

import ewha.lux.once.domain.card.entity.OwnedCard;
import ewha.lux.once.domain.home.dto.GeminiChatRequest;
import ewha.lux.once.domain.home.dto.GeminiChatResponse;
import ewha.lux.once.domain.user.entity.Users;
import ewha.lux.once.global.repository.OwnedCardRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@Service @Slf4j
@RequiredArgsConstructor
public class GeminiService {

@Qualifier("geminiRestTemplate")
@Autowired
private RestTemplate restTemplate;

private final OwnedCardRepository ownedCardRepository;

@Value("${gemini.api.url}")
private String apiUrl;

@Value("${gemini.api.key}")
private String geminiApiKey;

String prompt = "결제처, 결제금액, 카드들의 혜택 정보를 Input으로 하여 결제처에서 최적의 혜택을 누릴 수 있는 카드 번호, 혜택 정보, 할인 금액을 알려주어야 함.\n" +
"카드들의 혜택 정보에서 각 카드는 ///// 로 구분되고, 각 카드가 입력된 결제처에 해당되는 혜택을 가지고 있다면 할인 금액을 계산하고, 여러 카드 중 가장 할인 금액이 큰 카드의 고유번호 숫자, 결제처에 해당되는 혜택 정보 요약 텍스트(특수문자 없어야 함), 해당 혜택 적용 시 받게되는 할인 금액 숫자를 쉼표로 구분하여 제공해야 함. \n";
public String gemini(Users nowUser, String keyword, int paymentAmount) {
List<OwnedCard> ownedCards = ownedCardRepository.findOwnedCardByUsers(nowUser);
prompt = prompt + "결제 금액: " + paymentAmount + ", 결제처: " + keyword + ", 카드들의 혜택 정보: ";
for (OwnedCard ownedCard : ownedCards) {
String name = ownedCard.getCard().getName();
String id = ownedCard.getCard().getId().toString();
String benefits = ownedCard.getCard().getBenefits();
prompt = prompt + name + ", " + "카드 고유 번호 : " + id + ", " + benefits + "/////";
}

// Gemini 요청 보내는 부분
String requestUrl = apiUrl + "?key=" + geminiApiKey;
GeminiChatRequest request = new GeminiChatRequest(prompt);

GeminiChatResponse response = restTemplate.postForObject(requestUrl, request, GeminiChatResponse.class);

String result = response.getCandidates().get(0).getContent().getParts().get(0).getText().toString(); // 응답만 추출

log.info(result);

return result;
}

}
86 changes: 75 additions & 11 deletions src/main/java/ewha/lux/once/domain/home/service/HomeService.java
Original file line number Diff line number Diff line change
@@ -26,26 +26,33 @@ public class HomeService {
private final OwnedCardRepository ownedCardRepository;
private final ChatHistoryRepository chatHistoryRepository;
private final AnnouncementRepository announcementRepository;

private final GeminiService geminiService;

public ChatDto getHomeChat(Users nowUser, String keyword, int paymentAmount) throws CustomException {
// 파인튜닝한 GPT에 keyword, paymentAmount, 보유 카드 번호, 해당 혜택 정보 전송
// 파인튜닝한 GPT에게 cardId, benefit, discount 반환받음

// 예시 데이터
Card exampleCard = cardRepository.findById(1l).get();
String benefit = "생활쇼핑 최대 15% 결제일 할인";
int discount = 1500;
String category = "쇼핑"; // 카테고리 처리 로직 필요
// 1. Gemini 사용하는 경우
String response = geminiService.gemini(nowUser, keyword, paymentAmount);


String[] results = response.split(",");

Long cardId = Long.valueOf(results[0].trim());
Card card = cardRepository.findById(cardId).orElse(null);
String benefit = results[1].trim();
Integer discount = Integer.valueOf(results[2].trim());


// 채팅 객체 생성
// 챗봇 대화 기록
ChatHistory chat = ChatHistory.builder()
.users(nowUser)
.keyword(keyword)
.paymentAmount(paymentAmount)
.cardName(exampleCard.getName())
.cardName(card.getName())
.benefit(benefit)
.discount(discount)
.hasPaid(false)
.category(category)
.category(getCategory(keyword))
.build();

// Chat 객체 저장
@@ -54,7 +61,64 @@ public ChatDto getHomeChat(Users nowUser, String keyword, int paymentAmount) thr
//사용자 보유 카드 수
int ownedCardCount = ownedCardRepository.countAllByUsers(nowUser);

return new ChatDto(nowUser.getNickname(), ownedCardCount, savedChat.getId(),exampleCard.getName(),exampleCard.getImgUrl(),benefit,discount);
// 챗봇 응답
ChatDto chatDto = ChatDto.builder()
.nickname(nowUser.getNickname())
.ownedCardCount(ownedCardCount)
.chatId(savedChat.getId())
.cardName(card.getName())
.cardImg(card.getImgUrl())
.benefit(benefit)
.discount(discount)
.build();

return chatDto;
}

/*
* 카테고리 처리 함수
* @param keyword
*/
private static String getCategory(String keyword) {

String[] convenienceStoreKeywords = {"편의점", "CU", "씨유", "GS25", "지에스", "세븐일레븐", "이마트24", "미니스톱"};
String[] culturalKeywords = {"문화", "영화", "CGV", "씨지브이", "씨지비", "메가박스", "megabox", "롯데시네마", "OTT", "오티티", "넷플릭스", "netflix", "티빙", "tving", "디즈니플러스", "disney", "웨이브", "wavve", "왓챠", "watcha", "쿠팡플레이"};
String[] cafeKeywords = {"카페", "커피", "cafe", "coffee", "스타벅스", "starbucks", "빽다방", "폴바셋", "커피빈", "투썸플레이스", "컴포즈", "매머드커피", "메가커피", "카페봄봄", "공차", "이디야"};
String[] transportationKeywords = {"교통", "지하철", "택시", "버스", "bus", "기차", "티머니", "KTX", "무궁화호"};
String[] shoppingKeywords = {"쇼핑", "백화점", "현대백화점", "롯데백화점", "신세계백화점", "롯데마트", "이마트", "emart", "홈플러스", "homeplus", "롯데몰", "스타필드", "아울렛", "쿠팡", "coupang", "G마켓", "11번가", "네이버쇼핑", "마켓컬리", "배달의민족", "요기요", "배달",};
String[] bakeryKeywords = {"베이커리", "빵", "bread", "bakery", "파리바게트", "뚜레쥬르", "성심당", "앤티앤스", "홍종흔베이커리", "아우어베이커리"};

for (String key : convenienceStoreKeywords) {
if (keyword.contains(key)) {
return "편의점";
}
}
for (String key : culturalKeywords) {
if (keyword.contains(key)) {
return "문화생활";
}
}
for (String key : cafeKeywords) {
if (keyword.contains(key)) {
return "카페";
}
}
for (String key : transportationKeywords) {
if (keyword.contains(key)) {
return "교통";
}
}
for (String key : shoppingKeywords) {
if (keyword.contains(key)) {
return "쇼핑";
}
}
for (String key : bakeryKeywords) {
if (keyword.contains(key)) {
return "베이커리";
}
}
return "기타";
}

public HomeDto getHome(Users nowUser) throws CustomException {
2 changes: 2 additions & 0 deletions src/main/java/ewha/lux/once/global/common/ResponseCode.java
Original file line number Diff line number Diff line change
@@ -40,6 +40,8 @@ public enum ResponseCode {
CHAT_HISTORY_NOT_FOUND(3200, false, "채팅이 존재하지 않습니다."),


// 3300~ : 챗봇 관련 오류
FAILED_TO_GEMINI(3300, false, "요청 과정에서 오류가 발생했습니다."),

// =====================================