Skip to content

Commit bd1f60f

Browse files
authored
Merge pull request #142 from studio-recoding/feat-chat-search
[🚀feat] 채팅으로 일정 추가 시 검색 키워드 추가
2 parents 950cf7d + 5f9c2d1 commit bd1f60f

File tree

5 files changed

+85
-13
lines changed

5 files changed

+85
-13
lines changed

src/main/java/Ness/Backend/domain/auth/jwt/JwtTokenProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public class JwtTokenProvider {
2727

2828
/* 토큰의 만료 시간 설정
2929
* jwtAccessToken은 1시간, jwtRefreshToken은 1주 */
30-
private static final long JWT_EXPIRATION_TIME = 1000L * 60 * 60; //1시간
30+
//private static final long JWT_EXPIRATION_TIME = 1000L * 60 * 60; //1시간
31+
private static final long JWT_EXPIRATION_TIME = 1000L * 60 * 60 * 24 * 7; //7일
3132
private static final long REFRESH_TOKEN_EXPIRATION_TIME = 1000L * 60 * 60 * 24 * 14; //14일
3233

3334
private static final String AUTHORITIES_KEY = "auth";

src/main/java/Ness/Backend/domain/chat/ChatService.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,20 @@ public void createNewChat(String text, ChatType chatType, int caseNumber, Member
4646
chatRepository.save(chat);
4747
}
4848

49+
/* 새로운 채팅 생성 및 RDB에 저장 */
50+
public void createNewChatWithMetaData(String text, ChatType chatType, int caseNumber, Member member, String metadata){
51+
Chat chat = Chat.builder()
52+
.createdDate(createdZonedDate())
53+
.text(text)
54+
.chatType(chatType)
55+
.caseNumber(caseNumber)
56+
.member(member)
57+
.metadata(metadata)
58+
.build();
59+
60+
chatRepository.save(chat);
61+
}
62+
4963
/* 일주일 치 채팅 데이터 가져오기*/
5064
public GetChatListDto getOneWeekUserChat(Long memberId){
5165
List<Chat> chatList = chatRepository.findOneWeekUserChatsByMember_Id(memberId);

src/main/java/Ness/Backend/domain/schedule/ScheduleController.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import Ness.Backend.domain.chat.dto.response.GetChatListDto;
44
import Ness.Backend.domain.member.entity.Member;
5+
import Ness.Backend.domain.schedule.dto.request.PostMetaDataScheduleDto;
56
import Ness.Backend.domain.schedule.dto.request.PostScheduleDto;
67
import Ness.Backend.domain.schedule.dto.request.PutScheduleDto;
78
import Ness.Backend.domain.schedule.dto.response.GetScheduleListDto;
@@ -54,8 +55,8 @@ public ResponseEntity<GetScheduleListDto> deleteOneSchedule(@AuthUser Member mem
5455

5556
@PostMapping("/ai")
5657
@Operation(summary = "AI에 의해서 생성된 새로운 스케쥴", description = "프론트가 보내주는 AI에 의해서 생성된 새로운 스케쥴을 Accept/Deny합니다.")
57-
public ResponseEntity<GetChatListDto> PostAiSchedule(@AuthUser Member member, @RequestParam Boolean isAccepted, @RequestParam Long chatId, @RequestBody PostScheduleDto postScheduleDto){
58-
GetChatListDto oneUserChats = scheduleService.postAiScheduleAccept(member.getId(), isAccepted, chatId, postScheduleDto);
58+
public ResponseEntity<GetChatListDto> PostAiSchedule(@AuthUser Member member, @RequestParam Boolean isAccepted, @RequestParam Long chatId, @RequestBody PostMetaDataScheduleDto postMetaDataScheduleDto){
59+
GetChatListDto oneUserChats = scheduleService.postAiScheduleAccept(member.getId(), isAccepted, chatId, postMetaDataScheduleDto);
5960
return new ResponseEntity<>(oneUserChats, HttpStatusCode.valueOf(200));
6061
}
6162

src/main/java/Ness/Backend/domain/schedule/ScheduleService.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,36 +92,52 @@ public GetScheduleListDto deleteSchedule(Long memberId, Long scheduleId){
9292
}
9393

9494
/* 사용자가 AI가 생성한 스케쥴을 Accept/Deny한 여부에 따라서 채팅 및 스케쥴 저장 */
95-
public GetChatListDto postAiScheduleAccept(Long memberId, Boolean idAccepted, Long chatId, PostScheduleDto postScheduleDto){
95+
public GetChatListDto postAiScheduleAccept(Long memberId, Boolean idAccepted, Long chatId, PostMetaDataScheduleDto postMetaDataScheduleDto){
9696
Member member = memberRepository.findMemberById(memberId);
97-
Category category = categoryRepository.findCategoryById(postScheduleDto.getCategoryNum());
97+
Category category = categoryRepository.findCategoryById(postMetaDataScheduleDto.getCategoryNum());
9898

9999
/* 사용자가 Accept 했으면 스케쥴 생성하기 */
100100
if(idAccepted){
101101
/* 카테고리 연견관계가 정상적인 경우*/
102102
if(category != null){
103103
Chat chat = chatRepository.findChatById(chatId);
104-
104+
105+
//RDB에 저장
105106
Schedule newSchedule = Schedule.builder()
106-
.info(postScheduleDto.getInfo())
107-
.location(postScheduleDto.getLocation())
108-
.person(postScheduleDto.getPerson())
109-
.startTime(postScheduleDto.getStartTime())
110-
.endTime(postScheduleDto.getEndTime())
107+
.info(postMetaDataScheduleDto.getInfo())
108+
.location(postMetaDataScheduleDto.getLocation())
109+
.person(postMetaDataScheduleDto.getPerson())
110+
.startTime(postMetaDataScheduleDto.getStartTime())
111+
.endTime(postMetaDataScheduleDto.getEndTime())
111112
.member(member)
112113
.category(category)
113114
.chat(chat)
114115
.build();
115116

116117
scheduleRepository.save(newSchedule);
117118

118-
chatService.createNewChat("\"" + postScheduleDto.getInfo() + "\" " + "일정을 추가해드렸습니다:)", ChatType.AI, 1, member);
119+
//vectorDB에 저장하기
120+
postNewAiSchedule(
121+
postMetaDataScheduleDto.getInfo(),
122+
postMetaDataScheduleDto.getLocation(),
123+
postMetaDataScheduleDto.getPerson(),
124+
postMetaDataScheduleDto.getStartTime(),
125+
postMetaDataScheduleDto.getEndTime(),
126+
category.getName(),
127+
category.getId(),
128+
category.getColor(),
129+
newSchedule.getMember().getId(),
130+
newSchedule.getId());
131+
132+
chatService.createNewChatWithMetaData("\"" + postMetaDataScheduleDto.getInfo() + "\" " + "일정을 추가해드렸습니다! 관련 검색 결과를 추천해드릴게요. 원하는 내용을 스크랩해주세요:)",
133+
ChatType.AI, 10, member, "{\"keyword\":\"" + postMetaDataScheduleDto.getKeyword() + "\",\"scheduleId\":" + newSchedule.getId() + "}"
134+
);
119135
}
120136
else{
121137
throw new NotFoundCategoryException();
122138
}
123139
} else {
124-
chatService.createNewChat("\"" + postScheduleDto.getInfo() + "\" " + "일정 추가를 취소했습니다.\n더 필요한 것이 있으시면 알려주세요!", ChatType.AI, 1, member);
140+
chatService.createNewChat("\"" + postMetaDataScheduleDto.getInfo() + "\" " + "일정 추가를 취소했습니다.\n더 필요한 것이 있으시면 알려주세요!", ChatType.AI, 1, member);
125141
}
126142

127143
// 모든 채팅 내역 반환
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package Ness.Backend.domain.schedule.dto.request;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
9+
10+
import java.time.ZonedDateTime;
11+
12+
@Data
13+
@NoArgsConstructor
14+
@AllArgsConstructor
15+
@Builder
16+
public class PostMetaDataScheduleDto {
17+
@Schema(description = "스케쥴 텍스트 내용", example = "AI 공부")
18+
@JsonProperty("title")
19+
private String info;
20+
21+
@Schema(description = "스케쥴 위치", example = "이화여대 ECC")
22+
private String location;
23+
24+
@Schema(description = "스케쥴 사람", example = "영희")
25+
private String person;
26+
27+
@Schema(description = "스케쥴 시작 시간", example = "2024-03-08T15:07:27.056103+09:00")
28+
@JsonProperty("start")
29+
private ZonedDateTime startTime;
30+
31+
@Schema(description = "스케쥴 끝 시간", example = "2024-03-08T15:07:27.056103+09:00")
32+
@JsonProperty("end")
33+
private ZonedDateTime endTime;
34+
35+
@Schema(description = "스케쥴 카테고리 DB 넘버", example = "0")
36+
private Long categoryNum;
37+
38+
@Schema(description = "스케쥴 메타데이터", example = "검색 키워드")
39+
private String keyword;
40+
}

0 commit comments

Comments
 (0)