From c5dec33e2346f4817fcb17e3d12f2c9281324c7c Mon Sep 17 00:00:00 2001 From: rivkode Date: Sat, 25 Apr 2026 20:49:05 +0900 Subject: [PATCH] fix(diarychat): move base path to /api/v1/diary-chatrooms to avoid persona-chat collision MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #41 wired the diary chatroom controllers under /api/v1/chatrooms but that prefix was already owned by ChatRoomApiController (persona chat domain), so Spring failed to start with: Ambiguous mapping. Cannot map 'diaryChatRoomController' method ... to {POST [/api/v1/chatrooms]}: There is already 'chatRoomApiController' bean method ... - DiaryChatRoom/Message/Polling controllers now mount under /api/v1/diary-chatrooms (and .../{roomId}/messages, .../poll) - API shape and request/response bodies are unchanged; only the base path moves - PRD Β§7.0.1 records the rename as a documented spec deviation so the frontend updates the contract base accordingly πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/prd/backend_api_request.md | 1 + .../language/interfaces/diarychat/DiaryChatMessageController.kt | 2 +- .../language/interfaces/diarychat/DiaryChatPollingController.kt | 2 +- .../language/interfaces/diarychat/DiaryChatRoomController.kt | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/prd/backend_api_request.md b/docs/prd/backend_api_request.md index fa01a01..be4fd20 100644 --- a/docs/prd/backend_api_request.md +++ b/docs/prd/backend_api_request.md @@ -594,6 +594,7 @@ Screen 3은 **"각자 λ…ΉμŒ β†’ STT β†’ ν…μŠ€νŠΈλ‘œ ν•©λ₯˜ν•˜λŠ” μŒμ„± 기반 ### 7.0.1 κ΅¬ν˜„ λ©”λͺ¨ / spec λŒ€λΉ„ diff +- **베이슀 path λ³€κ²½ (ν•„μˆ˜)** β€” spec 의 `/chatrooms` λŠ” κΈ°μ‘΄ 페λ₯΄μ†Œλ‚˜ μ±„νŒ… 도메인(`ChatRoomApiController`, `/api/v1/chatrooms`)이 이미 μ‚¬μš© 쀑이라 좩돌. **λ³Έ 도메인은 `/api/v1/diary-chatrooms`** 둜 λ§ˆμš΄νŠΈν•œλ‹€. 즉 `POST /api/v1/diary-chatrooms`, `GET /api/v1/diary-chatrooms/{roomId}`, `.../messages`, `.../messages/poll` λ“± spec 의 λͺ¨λ“  `/chatrooms/...` λ₯Ό `/diary-chatrooms/...` 둜 μΉ˜ν™˜. - **events μ €μž₯ λͺ¨λΈ (κ΅¬ν˜„ λ³€κ²½)** β€” spec은 events λ₯Ό 별도 λ°μ΄ν„°λ‘œ λ‹€λ£¨μ§€λ§Œ, 단일 `after={messageId}` cursor 정합성을 μœ„ν•΄ λ°±μ—”λ“œ λ‚΄λΆ€μ—μ„œλŠ” `diary_chat_message` ν…Œμ΄λΈ”μ— `source='system' + event_type` ν˜•νƒœλ‘œ ν•¨κ»˜ μ €μž₯ν•œλ‹€. 폴링 응닡 μ‹œ `source` 둜 λΆ„λ¦¬ν•΄μ„œ `items` / `events` 두 ν•„λ“œλ‘œ λ³€ν™˜. **응닡 shape 은 spec κ·ΈλŒ€λ‘œ**. - **AI ν† κΈ€ κΈ°λ³Έκ°’** β€” spec은 `aiAssistantEnabled` κΈ°λ³Έ false. μ‚¬μš©μž(=PRD owner) κ²°μ •μœΌλ‘œ **default true** 둜 λ³€κ²½ (λ°© 생성 μ‹œ μžλ™ ON). λ°©μž₯이 끌 수 있음. - **AI μ‹λ³„μž** β€” `author.userId = -1`, `username = "Jamo AI"` ν•©μ„± author 둜 응닡 (별도 ν•„λ“œ 없이 author 객체에 λ‹΄κΉ€). diff --git a/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatMessageController.kt b/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatMessageController.kt index ba53aca..7dddd84 100644 --- a/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatMessageController.kt +++ b/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatMessageController.kt @@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @RestController -@RequestMapping("/api/v1/chatrooms/{roomId}/messages") +@RequestMapping("/api/v1/diary-chatrooms/{roomId}/messages") class DiaryChatMessageController( private val facade: DiaryChatMessageFacade, ) { diff --git a/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatPollingController.kt b/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatPollingController.kt index 7959266..b6da690 100644 --- a/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatPollingController.kt +++ b/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatPollingController.kt @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RestController import org.springframework.web.context.request.async.DeferredResult @RestController -@RequestMapping("/api/v1/chatrooms/{roomId}/messages") +@RequestMapping("/api/v1/diary-chatrooms/{roomId}/messages") class DiaryChatPollingController( private val facade: DiaryChatPollingFacade, ) { diff --git a/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatRoomController.kt b/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatRoomController.kt index cc55d97..6181285 100644 --- a/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatRoomController.kt +++ b/src/main/kotlin/com/learner/language/interfaces/diarychat/DiaryChatRoomController.kt @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @RestController -@RequestMapping("/api/v1/chatrooms") +@RequestMapping("/api/v1/diary-chatrooms") class DiaryChatRoomController( private val facade: DiaryChatRoomFacade, ) {