From 32e041f4dc5f74946e1aea9ffe3694edeaf18deb Mon Sep 17 00:00:00 2001 From: taehyeon1998 Date: Thu, 13 Aug 2026 20:48:06 +0900 Subject: [PATCH] =?UTF-8?q?[DOCS]=20brain=20=EC=84=9C=EB=B2=84=20README=20?= =?UTF-8?q?API=20=EC=82=AC=EC=9A=A9=20=ED=9D=90=EB=A6=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/README.md b/README.md index ac0a9a8..ef89a29 100644 --- a/README.md +++ b/README.md @@ -266,6 +266,117 @@ http://127.0.0.1:8000/docs --- +## πŸ”— API μ‚¬μš© 및 연동 흐름 + +ν΄λΌμ΄μ–ΈνŠΈλŠ” brain APIλ₯Ό 직접 ν˜ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. Spring μ„œλ²„κ°€ μ‚¬μš©μž 인증과 μš”μ²­ 검증을 μˆ˜ν–‰ν•œ λ’€ `X-Internal-Api-Key`λ₯Ό 포함해 brain APIλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. + +### 1. 졜초 일정 미리보기 μš”μ²­ + +μƒˆλ‘œμš΄ 일정 μž‘μ„±μ„ μ‹œμž‘ν•  λ•Œ `tempEventId`λŠ” JSON `null`둜 μ „λ‹¬ν•˜κ±°λ‚˜ ν•„λ“œλ₯Ό μƒλž΅ν•©λ‹ˆλ‹€. λ¬Έμžμ—΄ `"null"`을 μ „λ‹¬ν•˜λ©΄ μ‹€μ œ μž„μ‹œ 일정 ID둜 μ·¨κΈ‰λ˜λ―€λ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. + +```json +{ + "tempEventId": null, + "eventTitle": "λ‹€μŒμ£Ό κΈˆμš”μΌ 3μ‹œλΆ€ν„° 4μ‹œκΉŒμ§€ 회의", + "draftRevision": 0, + "selectedDate": "2026-08-13" +} +``` + +brain은 졜초 μš”μ²­μ— μƒˆλ‘œμš΄ `tempEventId`λ₯Ό μƒμ„±ν•˜κ³  μš”μ²­μ˜ `draftRevision`을 κ·ΈλŒ€λ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€. + +```json +{ + "tempEventId": "tmp_f7258568-0374-4710-8473-329576255448", + "eventTitle": "λ‹€μŒμ£Ό κΈˆμš”μΌ 3μ‹œλΆ€ν„° 4μ‹œκΉŒμ§€ 회의", + "draftRevision": 0, + "startDate": "2026-08-21", + "dateSource": "RELATIVE_EXPRESSION", + "endDate": null, + "startTime": "15:00:00", + "endTime": "16:00:00", + "placeCandidate": null, + "toEmbedding": ["회의"], + "isAllDayCandidate": false, + "needsConfirmation": false, + "warnings": [] +} +``` + +### 2. μž…λ ₯ μˆ˜μ • μš”μ²­ + +같은 일정을 μž‘μ„±ν•˜λŠ” λ™μ•ˆμ—λŠ” 이전 μ‘λ‹΅μ˜ `tempEventId`λ₯Ό κ·ΈλŒ€λ‘œ μ „λ‹¬ν•˜κ³ , ν˜ΈμΆœν•˜λŠ” μͺ½μ—μ„œ `draftRevision`을 μ¦κ°€μ‹œν‚΅λ‹ˆλ‹€. brain은 `draftRevision`을 μžλ™μœΌλ‘œ μ¦κ°€μ‹œν‚€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. + +```json +{ + "tempEventId": "tmp_f7258568-0374-4710-8473-329576255448", + "eventTitle": "λ‹€μŒμ£Ό κΈˆμš”μΌ 4μ‹œλΆ€ν„° 5μ‹œκΉŒμ§€ 회의", + "draftRevision": 1, + "selectedDate": "2026-08-13" +} +``` + +- λ™μΌν•œ 일정 μž‘μ„± κ³Όμ •μ—μ„œλŠ” 같은 `tempEventId`λ₯Ό μœ μ§€ν•©λ‹ˆλ‹€. +- 일정 μ €μž₯, μž‘μ„± μ·¨μ†Œ λ˜λŠ” μƒˆλ‘œμš΄ 일정 μž‘μ„±μ„ μ‹œμž‘ν•˜λ©΄ ν˜ΈμΆœν•˜λŠ” μͺ½μ—μ„œ κΈ°μ‘΄ `tempEventId`λ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. +- brain은 μž„μ‹œ μΌμ •μ˜ μ €μž₯Β·μ·¨μ†Œ μƒνƒœλ₯Ό λ³΄κ΄€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. +- μΆ”μ²œ νŒŒμ΄ν”„λΌμΈμ€ `tempEventId`별 μ΅œμ‹  `draftRevision`을 κΈ°μ€€μœΌλ‘œ 였래된 μš”μ²­μ˜ 후속 단계λ₯Ό μ€‘λ‹¨ν•©λ‹ˆλ‹€. + +### 3. λ‚ μ§œ κ²°μ • μš°μ„ μˆœμœ„ + +일정 μ‹œμž‘ λ‚ μ§œλŠ” λ‹€μŒ μˆœμ„œλ‘œ κ²°μ •ν•©λ‹ˆλ‹€. + +1. 일정 μ›λ¬Έμ—μ„œ νŒŒμ‹±ν•œ λ‚ μ§œ +2. μš”μ²­μœΌλ‘œ μ „λ‹¬λœ `selectedDate` +3. Asia/Seoul κΈ°μ€€ 였늘 + +`dateSource`λŠ” λ‚ μ§œκ°€ κ²°μ •λœ 좜처λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. + +| Value | Description | +| --- | --- | +| `EXPLICIT` | μ‚¬μš©μžκ°€ μ ˆλŒ€ λ‚ μ§œλ₯Ό 직접 μž…λ ₯ | +| `RELATIVE_EXPRESSION` | 내일, λ‹€μŒ μ£Ό κΈˆμš”μΌ λ“±μ˜ μƒλŒ€ λ‚ μ§œ ν‘œν˜„μ„ νŒŒμ‹± | +| `SELECTED_DATE` | 원문에 λ‚ μ§œκ°€ μ—†μ–΄ μš”μ²­μ˜ `selectedDate` μ‚¬μš© | +| `DEFAULT_TODAY` | 원문과 μš”μ²­μ— λ‚ μ§œκ°€ μ—†μ–΄ Asia/Seoul κΈ°μ€€ 였늘 μ‚¬μš© | + +### 4. 일정 미리보기 κ²°κ³Όλ₯Ό μΆ”μ²œ μš”μ²­μœΌλ‘œ λ³€ν™˜ + +일정 미리보기 응닡과 μΆ”μ²œ μš”μ²­μ€ ν•„λ“œ 이름이 일뢀 λ‹€λ₯΄λ―€λ‘œ Spring μ„œλ²„μ—μ„œ λ‹€μŒκ³Ό 같이 λ³€ν™˜ν•©λ‹ˆλ‹€. + +| Event Preview Response | Recommendation Request | +| --- | --- | +| `startDate` | `startDateCandidate` | +| `startTime` | `startTimeCandidate` | +| `endDate` | `endDateCandidate` | +| `endTime` | `endTimeCandidate` | +| `dateSource` | `startDateSource` | +| `toEmbedding` | `embeddingWords` | + +μΆ”μ²œ μš”μ²­μ—λŠ” 일정 μž…λ ₯ 좜처λ₯Ό λ‚˜νƒ€λ‚΄λŠ” `sourceType`도 포함해야 ν•©λ‹ˆλ‹€. + +```json +{ + "tempEventId": "tmp_f7258568-0374-4710-8473-329576255448", + "draftRevision": 1, + "eventTitle": "λ‹€μŒμ£Ό κΈˆμš”μΌ 4μ‹œλΆ€ν„° 5μ‹œκΉŒμ§€ 회의", + "sourceType": "USER_NATURAL_LANGUAGE", + "startDateCandidate": "2026-08-21", + "startTimeCandidate": "16:00:00", + "endDateCandidate": null, + "endTimeCandidate": "17:00:00", + "startDateSource": "RELATIVE_EXPRESSION", + "placeCandidate": null, + "description": null, + "embeddingWords": ["회의"] +} +``` + +| `sourceType` | Description | +| --- | --- | +| `USER_NATURAL_LANGUAGE` | μ‚¬μš©μžκ°€ μžμ—°μ–΄λ‘œ μž…λ ₯ν•œ 일정 | +| `USER_MANUAL_EDIT` | μ‚¬μš©μžκ°€ 미리보기 정보λ₯Ό 직접 μˆ˜μ •ν•œ 일정 | + +--- + ## βœ… Health Check ```http