Skip to content

Commit 1c0fe6b

Browse files
committed
feat(be): AiChatMessage + Session + Enum Class 생성 및 erd 수정
1 parent fa84f7b commit 1c0fe6b

File tree

5 files changed

+66
-7
lines changed

5 files changed

+66
-7
lines changed

docs/erd-diagram.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ erDiagram
4747
bigint session_id FK "세션 ID"
4848
text content "메시지 내용"
4949
enum sender_type "USER, AI"
50-
json metadata "AI 도구 사용 정보"
5150
datetime created_at "메시지 전송 시간"
5251
}
5352
@@ -143,7 +142,6 @@ AI 채팅 메시지를 저장하는 테이블입니다.
143142
| session_id | BIGINT | FK, NOT NULL | 세션 ID |
144143
| content | TEXT | NOT NULL | 메시지 내용 |
145144
| sender_type | ENUM | NOT NULL | 발신자 유형 (USER, AI) |
146-
| metadata | JSON | NULL | AI 도구 사용 정보 (WeatherTool, TourTool) |
147145
| created_at | DATETIME | NOT NULL | 메시지 전송 시간 |
148146

149147
**제약조건:**
@@ -243,7 +241,7 @@ Guest가 AI 채팅 세션과 채팅방을 평가하는 테이블입니다.
243241
1. User → AiChatSession 생성
244242
2. User → AiChatMessage 전송
245243
3. Spring AI → WeatherTool/TourTool 호출
246-
4. AI → AiChatMessage(sender_type=AI) 생성 + metadata 저장
244+
4. AI → AiChatMessage(sender_type=AI) 생성
247245
5. SSE로 실시간 응답 전송
248246
```
249247

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.back.koreaTravelGuide.domain.ai.aiChat.entity
2+
3+
import jakarta.persistence.Column
4+
import jakarta.persistence.Entity
5+
import jakarta.persistence.EnumType
6+
import jakarta.persistence.Enumerated
7+
import jakarta.persistence.FetchType
8+
import jakarta.persistence.GeneratedValue
9+
import jakarta.persistence.GenerationType
10+
import jakarta.persistence.Id
11+
import jakarta.persistence.JoinColumn
12+
import jakarta.persistence.ManyToOne
13+
import jakarta.persistence.Table
14+
import java.time.ZoneId
15+
import java.time.ZonedDateTime
16+
17+
@Entity
18+
@Table(name = "ai_chat_messages")
19+
class AiChatMessage(
20+
@Id
21+
@GeneratedValue(strategy = GenerationType.IDENTITY)
22+
@Column(name = "id")
23+
val id: Long? = null,
24+
@ManyToOne(fetch = FetchType.LAZY)
25+
@JoinColumn(name = "session_id", nullable = false)
26+
val aiChatSession: AiChatSession,
27+
@Column(name = "content", columnDefinition = "TEXT", nullable = false)
28+
val content: String,
29+
@Enumerated(EnumType.STRING)
30+
@Column(name = "sender_type", nullable = false)
31+
val senderType: SenderType,
32+
@Column(name = "created_at", nullable = false)
33+
val createdAt: ZonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul")),
34+
)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.back.koreaTravelGuide.domain.ai.aiChat.entity
2+
3+
import jakarta.persistence.Column
4+
import jakarta.persistence.Entity
5+
import jakarta.persistence.GeneratedValue
6+
import jakarta.persistence.GenerationType
7+
import jakarta.persistence.Id
8+
import jakarta.persistence.Table
9+
import java.time.ZoneId
10+
import java.time.ZonedDateTime
11+
12+
@Entity
13+
@Table(name = "ai_chat_sessions")
14+
class AiChatSession(
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
@Column(name = "id")
18+
val id: Long? = null,
19+
@Column(name = "user_id", nullable = false)
20+
val userId: Long,
21+
@Column(name = "session_title", nullable = true, length = 100)
22+
var sessionTitle: String? = null,
23+
@Column(name = "created_at", nullable = false)
24+
val createdAt: ZonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul")),
25+
)

src/main/kotlin/com/back/koreaTravelGuide/domain/ai/aiChat/entity/ChatHistory.kt

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.back.koreaTravelGuide.domain.ai.aiChat.entity
2+
3+
enum class SenderType {
4+
USER,
5+
AI,
6+
}

0 commit comments

Comments
 (0)