Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ public ResponseEntity<RsData<ChatConversation>> saveBotMessage(@Valid @RequestBo

@PostMapping("/greeting/{userId}")
@Operation(summary = "인사말 생성", description = "사용자가 채팅을 시작할 때 기본 인사말을 생성하고 저장")
public ResponseEntity<RsData<ChatConversation>> createGreeting(@PathVariable Long userId) {
public ResponseEntity<RsData<ChatResponseDto>> createGreeting(@PathVariable Long userId) {
try {
ChatConversation greeting = chatbotService.createGreetingMessage(userId);
ChatResponseDto greeting = chatbotService.createGreetingMessage(userId);
return ResponseEntity.ok(RsData.successOf(greeting));
} catch (Exception e) {
log.error("인사말 생성 중 오류 발생: ", e);
Expand Down
52 changes: 44 additions & 8 deletions src/main/java/com/back/domain/chatbot/dto/ChatResponseDto.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.back.domain.chatbot.dto;

import com.back.domain.chatbot.enums.MessageType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
Expand All @@ -11,22 +13,56 @@
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ChatResponseDto {

private String response;
private String message; // 텍스트 메시지
private MessageType type; // 메시지 표시 타입
private LocalDateTime timestamp;

// 단계별 추천 관련 필드 (선택사항)
private StepRecommendationResponseDto stepRecommendation;
// 단계별 추천 관련 데이터 (type이 RADIO_OPTIONS 또는 CARD_LIST일 때 사용)
private StepRecommendationResponseDto stepData;

public ChatResponseDto(String response) {
this.response = response;
// 추가 메타데이터
private MetaData metaData;

// 생성자들
public ChatResponseDto(String message) {
this.message = message;
this.type = MessageType.TEXT;
this.timestamp = LocalDateTime.now();
}

public ChatResponseDto(String response, StepRecommendationResponseDto stepRecommendation) {
this.response = response;
public ChatResponseDto(String message, StepRecommendationResponseDto stepData) {
this.message = message;
this.timestamp = LocalDateTime.now();
this.stepRecommendation = stepRecommendation;
this.stepData = stepData;

// stepData 내용에 따라 type 자동 설정
if (stepData != null) {
if (stepData.getOptions() != null && !stepData.getOptions().isEmpty()) {
this.type = MessageType.RADIO_OPTIONS;
} else if (stepData.getRecommendations() != null && !stepData.getRecommendations().isEmpty()) {
this.type = MessageType.CARD_LIST;
} else {
this.type = MessageType.TEXT;
}
} else {
this.type = MessageType.TEXT;
}
}

// 메타데이터 내부 클래스
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class MetaData {
private Integer currentStep; // 현재 단계 (단계별 추천)
private Integer totalSteps; // 전체 단계 수
private Boolean isTyping; // 타이핑 애니메이션 표시 여부
private Integer delay; // 메시지 표시 지연 시간(ms)
private String actionType; // 버튼 액션 타입
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/back/domain/chatbot/enums/MessageType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.back.domain.chatbot.enums;

public enum MessageType {
TEXT("텍스트"), // 일반 텍스트 메시지
RADIO_OPTIONS("라디오옵션"), // 라디오 버튼 선택지
CARD_LIST("카드리스트"), // 칵테일 추천 카드 리스트
LOADING("로딩중"), // 로딩 메시지
ERROR("에러"); // 에러 메시지

private final String description;

MessageType(String description) {
this.description = description;
}

public String getDescription() {
return description;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ public interface ChatConversationRepository extends JpaRepository<ChatConversati
List<ChatConversation> findByUserIdOrderByCreatedAtDesc(Long userId);

List<ChatConversation> findTop20ByUserIdOrderByCreatedAtDesc(Long userId);

boolean existsByUserIdAndMessage(Long userId, String message);
}
Loading