diff --git a/src/main/java/Ness/Backend/domain/auth/jwt/JwtTokenProvider.java b/src/main/java/Ness/Backend/domain/auth/jwt/JwtTokenProvider.java index bde8ec7..da3fef0 100644 --- a/src/main/java/Ness/Backend/domain/auth/jwt/JwtTokenProvider.java +++ b/src/main/java/Ness/Backend/domain/auth/jwt/JwtTokenProvider.java @@ -27,7 +27,8 @@ public class JwtTokenProvider { /* 토큰의 만료 시간 설정 * jwtAccessToken은 1시간, jwtRefreshToken은 1주 */ - private static final long JWT_EXPIRATION_TIME = 1000L * 60 * 60; //1시간 + //private static final long JWT_EXPIRATION_TIME = 1000L * 60 * 60; //1시간 + private static final long JWT_EXPIRATION_TIME = 1000L * 60 * 60 * 24 * 7; //7일 private static final long REFRESH_TOKEN_EXPIRATION_TIME = 1000L * 60 * 60 * 24 * 14; //14일 private static final String AUTHORITIES_KEY = "auth"; diff --git a/src/main/java/Ness/Backend/domain/chat/ChatService.java b/src/main/java/Ness/Backend/domain/chat/ChatService.java index ed03112..c9e374c 100644 --- a/src/main/java/Ness/Backend/domain/chat/ChatService.java +++ b/src/main/java/Ness/Backend/domain/chat/ChatService.java @@ -46,6 +46,20 @@ public void createNewChat(String text, ChatType chatType, int caseNumber, Member chatRepository.save(chat); } + /* 새로운 채팅 생성 및 RDB에 저장 */ + public void createNewChatWithMetaData(String text, ChatType chatType, int caseNumber, Member member, String metadata){ + Chat chat = Chat.builder() + .createdDate(createdZonedDate()) + .text(text) + .chatType(chatType) + .caseNumber(caseNumber) + .member(member) + .metadata(metadata) + .build(); + + chatRepository.save(chat); + } + /* 일주일 치 채팅 데이터 가져오기*/ public GetChatListDto getOneWeekUserChat(Long memberId){ List chatList = chatRepository.findOneWeekUserChatsByMember_Id(memberId); diff --git a/src/main/java/Ness/Backend/domain/schedule/ScheduleController.java b/src/main/java/Ness/Backend/domain/schedule/ScheduleController.java index 0f84ff8..1b14e0f 100644 --- a/src/main/java/Ness/Backend/domain/schedule/ScheduleController.java +++ b/src/main/java/Ness/Backend/domain/schedule/ScheduleController.java @@ -2,6 +2,7 @@ import Ness.Backend.domain.chat.dto.response.GetChatListDto; import Ness.Backend.domain.member.entity.Member; +import Ness.Backend.domain.schedule.dto.request.PostMetaDataScheduleDto; import Ness.Backend.domain.schedule.dto.request.PostScheduleDto; import Ness.Backend.domain.schedule.dto.request.PutScheduleDto; import Ness.Backend.domain.schedule.dto.response.GetScheduleListDto; @@ -54,8 +55,8 @@ public ResponseEntity deleteOneSchedule(@AuthUser Member mem @PostMapping("/ai") @Operation(summary = "AI에 의해서 생성된 새로운 스케쥴", description = "프론트가 보내주는 AI에 의해서 생성된 새로운 스케쥴을 Accept/Deny합니다.") - public ResponseEntity PostAiSchedule(@AuthUser Member member, @RequestParam Boolean isAccepted, @RequestParam Long chatId, @RequestBody PostScheduleDto postScheduleDto){ - GetChatListDto oneUserChats = scheduleService.postAiScheduleAccept(member.getId(), isAccepted, chatId, postScheduleDto); + public ResponseEntity PostAiSchedule(@AuthUser Member member, @RequestParam Boolean isAccepted, @RequestParam Long chatId, @RequestBody PostMetaDataScheduleDto postMetaDataScheduleDto){ + GetChatListDto oneUserChats = scheduleService.postAiScheduleAccept(member.getId(), isAccepted, chatId, postMetaDataScheduleDto); return new ResponseEntity<>(oneUserChats, HttpStatusCode.valueOf(200)); } diff --git a/src/main/java/Ness/Backend/domain/schedule/ScheduleService.java b/src/main/java/Ness/Backend/domain/schedule/ScheduleService.java index 959f809..ae8ed33 100644 --- a/src/main/java/Ness/Backend/domain/schedule/ScheduleService.java +++ b/src/main/java/Ness/Backend/domain/schedule/ScheduleService.java @@ -92,22 +92,23 @@ public GetScheduleListDto deleteSchedule(Long memberId, Long scheduleId){ } /* 사용자가 AI가 생성한 스케쥴을 Accept/Deny한 여부에 따라서 채팅 및 스케쥴 저장 */ - public GetChatListDto postAiScheduleAccept(Long memberId, Boolean idAccepted, Long chatId, PostScheduleDto postScheduleDto){ + public GetChatListDto postAiScheduleAccept(Long memberId, Boolean idAccepted, Long chatId, PostMetaDataScheduleDto postMetaDataScheduleDto){ Member member = memberRepository.findMemberById(memberId); - Category category = categoryRepository.findCategoryById(postScheduleDto.getCategoryNum()); + Category category = categoryRepository.findCategoryById(postMetaDataScheduleDto.getCategoryNum()); /* 사용자가 Accept 했으면 스케쥴 생성하기 */ if(idAccepted){ /* 카테고리 연견관계가 정상적인 경우*/ if(category != null){ Chat chat = chatRepository.findChatById(chatId); - + + //RDB에 저장 Schedule newSchedule = Schedule.builder() - .info(postScheduleDto.getInfo()) - .location(postScheduleDto.getLocation()) - .person(postScheduleDto.getPerson()) - .startTime(postScheduleDto.getStartTime()) - .endTime(postScheduleDto.getEndTime()) + .info(postMetaDataScheduleDto.getInfo()) + .location(postMetaDataScheduleDto.getLocation()) + .person(postMetaDataScheduleDto.getPerson()) + .startTime(postMetaDataScheduleDto.getStartTime()) + .endTime(postMetaDataScheduleDto.getEndTime()) .member(member) .category(category) .chat(chat) @@ -115,13 +116,28 @@ public GetChatListDto postAiScheduleAccept(Long memberId, Boolean idAccepted, Lo scheduleRepository.save(newSchedule); - chatService.createNewChat("\"" + postScheduleDto.getInfo() + "\" " + "일정을 추가해드렸습니다:)", ChatType.AI, 1, member); + //vectorDB에 저장하기 + postNewAiSchedule( + postMetaDataScheduleDto.getInfo(), + postMetaDataScheduleDto.getLocation(), + postMetaDataScheduleDto.getPerson(), + postMetaDataScheduleDto.getStartTime(), + postMetaDataScheduleDto.getEndTime(), + category.getName(), + category.getId(), + category.getColor(), + newSchedule.getMember().getId(), + newSchedule.getId()); + + chatService.createNewChatWithMetaData("\"" + postMetaDataScheduleDto.getInfo() + "\" " + "일정을 추가해드렸습니다! 관련 검색 결과를 추천해드릴게요. 원하는 내용을 스크랩해주세요:)", + ChatType.AI, 10, member, "{\"keyword\":\"" + postMetaDataScheduleDto.getKeyword() + "\",\"scheduleId\":" + newSchedule.getId() + "}" + ); } else{ throw new NotFoundCategoryException(); } } else { - chatService.createNewChat("\"" + postScheduleDto.getInfo() + "\" " + "일정 추가를 취소했습니다.\n더 필요한 것이 있으시면 알려주세요!", ChatType.AI, 1, member); + chatService.createNewChat("\"" + postMetaDataScheduleDto.getInfo() + "\" " + "일정 추가를 취소했습니다.\n더 필요한 것이 있으시면 알려주세요!", ChatType.AI, 1, member); } // 모든 채팅 내역 반환 diff --git a/src/main/java/Ness/Backend/domain/schedule/dto/request/PostMetaDataScheduleDto.java b/src/main/java/Ness/Backend/domain/schedule/dto/request/PostMetaDataScheduleDto.java new file mode 100644 index 0000000..6986901 --- /dev/null +++ b/src/main/java/Ness/Backend/domain/schedule/dto/request/PostMetaDataScheduleDto.java @@ -0,0 +1,40 @@ +package Ness.Backend.domain.schedule.dto.request; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.ZonedDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PostMetaDataScheduleDto { + @Schema(description = "스케쥴 텍스트 내용", example = "AI 공부") + @JsonProperty("title") + private String info; + + @Schema(description = "스케쥴 위치", example = "이화여대 ECC") + private String location; + + @Schema(description = "스케쥴 사람", example = "영희") + private String person; + + @Schema(description = "스케쥴 시작 시간", example = "2024-03-08T15:07:27.056103+09:00") + @JsonProperty("start") + private ZonedDateTime startTime; + + @Schema(description = "스케쥴 끝 시간", example = "2024-03-08T15:07:27.056103+09:00") + @JsonProperty("end") + private ZonedDateTime endTime; + + @Schema(description = "스케쥴 카테고리 DB 넘버", example = "0") + private Long categoryNum; + + @Schema(description = "스케쥴 메타데이터", example = "검색 키워드") + private String keyword; +} \ No newline at end of file