Skip to content

Commit

Permalink
Merge pull request #142 from studio-recoding/feat-chat-search
Browse files Browse the repository at this point in the history
[🚀feat] 채팅으로 일정 추가 시 검색 키워드 추가
  • Loading branch information
JeonHaeseung committed Jul 15, 2024
2 parents 950cf7d + 5f9c2d1 commit bd1f60f
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/Ness/Backend/domain/chat/ChatService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Chat> chatList = chatRepository.findOneWeekUserChatsByMember_Id(memberId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -54,8 +55,8 @@ public ResponseEntity<GetScheduleListDto> deleteOneSchedule(@AuthUser Member mem

@PostMapping("/ai")
@Operation(summary = "AI에 의해서 생성된 새로운 스케쥴", description = "프론트가 보내주는 AI에 의해서 생성된 새로운 스케쥴을 Accept/Deny합니다.")
public ResponseEntity<GetChatListDto> PostAiSchedule(@AuthUser Member member, @RequestParam Boolean isAccepted, @RequestParam Long chatId, @RequestBody PostScheduleDto postScheduleDto){
GetChatListDto oneUserChats = scheduleService.postAiScheduleAccept(member.getId(), isAccepted, chatId, postScheduleDto);
public ResponseEntity<GetChatListDto> 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));
}

Expand Down
36 changes: 26 additions & 10 deletions src/main/java/Ness/Backend/domain/schedule/ScheduleService.java
Original file line number Diff line number Diff line change
Expand Up @@ -92,36 +92,52 @@ 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)
.build();

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);
}

// 모든 채팅 내역 반환
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit bd1f60f

Please sign in to comment.