Skip to content
This repository has been archived by the owner on Oct 20, 2024. It is now read-only.

Commit

Permalink
feat: ✨ 챗봇과의 채팅 중 다시 응답 받는 기능 구현 (#112)
Browse files Browse the repository at this point in the history
* Initial commit

* Feat/#1 oauth2login (#3)

* feat: User 엔터티 생성

* feat: jwt 버전 11->12, JWTUtil 생성

* feat: JWTFilter(JwtAuthenticationFilter) 등록

* feat: kakao 로그인 구현

* docs: swagger 태그(Authorization) 추가 (#5)

* feat: User 엔터티 생성

* feat: jwt 버전 11->12, JWTUtil 생성

* feat: JWTFilter(JwtAuthenticationFilter) 등록

* feat: kakao 로그인 구현

* docs: swagger 태그(Authorization) 추가

* feat: accesstoken 테스트를 위한 test login 생성 (#9)

* feat: User 엔티티에 상속 (#12)

* feat: BaseEntity 생성

* feat: User 엔티티에 상속

* feat: 일기 생성 기능 구현 (#14)

* feat: accesstoken 테스트를 위한 test login 생성

* feat: 일기 생성 기능 구현

* hotfix: ci 에러 수정 (#16)

* feat: accesstoken 테스트를 위한 test login 생성

* feat: 일기 생성 기능 구현

* hotfix: ci 에러 수정

* fix: OIDC 카카오 로그인 nullPointerException 해결

* feat: 닉네임 설정 기능 구현 (#21)

* feat: 일기 수정 기능 구현 (#25)

* feat: 일기에 감정 컬럼 추가

* feat: 일기 수정 기능 구현

* feat: 일기 삭제 기능 구현 (#27)

* feat: 일기에 감정 컬럼 추가

* feat: 일기 수정 기능 구현

* feat: 일기 삭제 기능 구현

* feat: 일기 감정 분석 기능 구현 (#31)

* feat: 감정 저장 기능 구현 (#33)

* feat: 일기 감정 분석 기능 구현

* feat: 감정 저장 기능 구현

* fix: 🐛 감정 저장 안되던 오류 수정 (#35)

* feat: 일기 감정 분석 기능 구현

* feat: 감정 저장 기능 구현

* fix: 🐛 감정 저장 안되던 오류 수정

* hotfix: 🚑 서버 꺼짐 현상 해결 (#37)

* feat: 일기 감정 분석 기능 구현

* feat: 감정 저장 기능 구현

* fix: 🐛 감정 저장 안되던 오류 수정

* hotfix: 🚑 서버 꺼짐 현상 해결

* feat: ✨ 홈 화면 조회 기능 구현 (#41)

* feat: ✨ 회원가입 완료 여부 필드 추가 (#44)

* feat: ✨ 일기 상세 조회 구현 (#47)

* feat: ✨ 기간 별 감정 통계 조회 기능 구현 (#50)

* feat: ✨ 일기 내용 검색 기능 구현 (#52)

* feat: ✨ 감정 별 일기 조회 (#54)

* feat: ✨ 월 별 일기 조회 기능 구현 (#59)

* ci: ⚡ workflow 수정 (#61)

* ci: ⚡ workflow 수정

* ci: ⚡ workflow 수정

* feat: ✨ user 엔터티 fcmToken 컬럼 추가, 로그인 시 토큰 최신화 구현 (#63)

* ci: ⚡ workflow 수정

* ci: ⚡ workflow 수정

* feat: ✨ fcm 토큰 알림 기능 구현

* feat: ✨ user 엔터티 fcmToken 컬럼 추가, 로그인 시 토큰 최신화 구현

* feat: ✨ 북마크 추가/삭제 기능 구현, 일기/홈화면 조회 쿼리문 수정 (#65)

* feat: ✨ 북마크 추가 기능 구현

* feat: ✨ 북마크 추가/삭제 기능 구현, 일기/홈화면 조회 쿼리문 수정

* feat: 🚀 fcmtoken 등록 api 분리 (#68)

* feat: ✨ 유저 정보 조회 기능 구현 (#71)

* Feat/#70 user info (#73)

* feat: ✨ 유저 정보 조회 기능 구현

* hotfix: 🚑 cd 에러 해결

* refactor: 🚀 gpt prompt 수정 (#76)

* feat: ✨ 일기 요약 스케줄러 구현 (#80)

* refactor: 🚀 엔터티 접근 지정자 수정 (#84)

* feat: ✨ 챗봇 임베딩 및 대화 기능 구현 완료 (#86)

* refactor: 🚀 불필요한 필드 삭제, 검색 내용 글자 수정(10->25) (#89)

* refactor: 🔨 일기 검색 시 일기 id 값을 포함하도록 수정

* fix: 🐛 날짜 입력 안되던 현상 해결 (#93)

* fix: 🐛 string 형태로 받아오는 식으로 수정 (#95)

* fix: 🐛 날짜 입력 안되던 현상 해결

* fix: 🐛 string 형태로 받아오는 식으로 수정

* refactor: 🔨 홈화면 조회에 다이어리 id 포함하도록 수정

* fix: 🐛 감정통계 정상 리턴 안되던 현상 수정

* feat: ✨ 감정 통계 리턴 dto 필드명 수정

* feat: ✨ 홈 화면 조회 시 내 일기만 조회하도록 수정

* feat: ✨ 감정 별 일기 조회 시 id값 함께 리턴하도록 수정

* feat: ✨ 채팅 내역 조회 기능 구현 (#106)

* docs: ✏️채팅 히스토리 조회 문서 수정 (#108)

* feat: ✨ 채팅 내역 조회 기능 구현

* docs: ✏️채팅 히스토리 조회 문서 수정

* feat: ✨ 채팅 히스토리 조회 시 생성 시각도 함께 반환

* feat: ✨ 챗봇과의 채팅 중 다시 응답 받는 기능 구현 (#111)
  • Loading branch information
LEEJaeHyeok97 authored Aug 7, 2024
1 parent c122b0d commit 6dc3f9b
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,30 @@ public void registerBotChat(UserPrincipal userPrincipal, String result) {
public Page<ChatHistoryRes> getAllChats(UserPrincipal userPrincipal, Pageable pageable) {
return chatHistoryRepository.findRecent20ChatHistories(userPrincipal.getId(), pageable);
}

@Transactional
public QueryReq retryQuery(UserPrincipal userPrincipal) {
// 이전에 받은 BOT 챗을 삭제하고 다시 HUMAN 챗을 가장 최근 채팅으로 만든다.
ChatHistory mostRecentChat = chatHistoryRepository.findMostRecentChatHistoryByUserId(userPrincipal.getId());
chatHistoryRepository.delete(mostRecentChat);

// 챗 히스토리를 최근 20개 이하로 가져온다
List<ChatHistory> recentChatHistoryByUserId = chatHistoryRepository.findRecentChatHistoryByUserId(userPrincipal.getId());
List<String> chatHistoryList = recentChatHistoryByUserId.stream()
.map(chat -> String.format("%s: %s", chat.getChatRole() == ChatRole.USER ? "사용자" : "친구", chat.getMessage()))
.toList();


String question;
ChatHistory chatHistory = chatHistoryRepository.findMostRecentChatHistoryByUserId(userPrincipal.getId());
question = chatHistory.getMessage();

QueryReq queryReq = QueryReq.builder()
.userId(userPrincipal.getId().toString())
.question(question)
.chatHistory(chatHistoryList)
.build();

return queryReq;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class ChatHistory extends BaseEntity {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ public interface ChatHistoryQueryDslRepository {
List<ChatHistory> findRecentChatHistoryByUserId(Long id);

Page<ChatHistoryRes> findRecent20ChatHistories(Long id, Pageable pageable);

ChatHistory findMostRecentChatHistoryByUserId(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,15 @@ public Page<ChatHistoryRes> findRecent20ChatHistories(Long id, Pageable pageable

return PageableExecutionUtils.getPage(results, pageable, countQuery::fetchOne);
}

@Override
public ChatHistory findMostRecentChatHistoryByUserId(Long id) {
return queryFactory
.select(chatHistory)
.from(chatHistory)
.where(chatHistory.user.id.eq(id))
.orderBy(chatHistory.id.desc())
.limit(1)
.fetchOne();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,35 @@ public ResponseCustom<Page<ChatHistoryRes>> getAllChatHistories(
) {
return ResponseCustom.OK(chatbotService.getAllChats(userPrincipal, pageable));
}

@Operation(summary = "챗봇에게 답변 다시 받기", description = "챗봇에게 가장 최근 질문으로 답변을 다시 받습니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "답변 다시 받기 성공", content = {@Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = String.class)))}),
@ApiResponse(responseCode = "400", description = "답변 다시 받기 실패", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))}),
})
@PostMapping("/retryChat")
public ResponseCustom<?> retryChat(
@Parameter(description = "Accesstoken을 입력해주세요.", required = true) @CurrentUser UserPrincipal userPrincipal
) {
String fastApiUrl = queryUrl;

HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");

QueryReq queryReq = chatbotService.retryQuery(userPrincipal);

log.info("Requesting FastAPI with QueryReq: {}", queryReq);

HttpEntity<QueryReq> requestEntity = new HttpEntity<>(queryReq, headers);
ResponseEntity<String> response = restTemplate.postForEntity(fastApiUrl, requestEntity, String.class);

// JSON 응답에서 message 필드만 추출
JSONObject responseBody = new JSONObject(response.getBody());
String message = responseBody.getString("message");

// Bot 응답 저장
chatbotService.registerBotChat(userPrincipal, message);

return ResponseCustom.OK(message);
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/aidiary/domain/user/domain/User.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package com.aidiary.domain.user.domain;

import com.aidiary.domain.chatbot.domain.ChatHistory;
import com.aidiary.domain.common.BaseEntity;
import com.aidiary.domain.summary.domain.DiarySummary;
import jakarta.persistence.*;
import lombok.*;

import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
Expand Down Expand Up @@ -34,6 +38,9 @@ public class User extends BaseEntity {
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
private DiarySummary diarySummary;

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List<ChatHistory> chatHistories = new ArrayList<>();


@Builder
public User(String nickname, String username, String email, String role, String provider, String providerId) {
Expand Down

0 comments on commit 6dc3f9b

Please sign in to comment.