νλ‘μ νΈ λͺ©λ‘
μ νλ‘μ νΈ λ§λ€κΈ°
Meeting Server v2 API λ¬Έμ
π ν΅ν© μμ± API (μ κ·)
νλ‘μ νΈ + λͺ¨λ κ΄λ ¨ μ 보λ₯Ό ν λ²μ μμ±ν©λλ€. (6λ² μμ² β 1λ² μμ²)
POST /api/projects/full
{
"project": {
"name": "Meeting Server v2",
"description": "AI νμ
νλ«νΌ",
"owner": "Kim & Claude",
"status": "μ§νμ€"
},
"architecture": {
"stack": "Node.js, Express, SQLite",
"database": "SQLite with WAL mode",
"infrastructure": "PM2, Nginx, SSH Tunnel"
},
"roadmap": {
"phases": [
{"week": 1, "goal": "SQLite μ ν"},
{"week": 2, "goal": "νλ‘ νΈμλ κ°μ "}
],
"timeline": "2 weeks"
},
"decisions": [
{
"title": "SQLite μ¬μ©",
"content": "KimDB λμ SQLite μ±ν",
"priority": "high"
}
],
"meetings": [
{
"title": "ν₯μ€ν λ―Έν
",
"date": "2025-01-08",
"participants": ["Kim", "Claude"],
"summary": "νλ‘μ νΈ μμ"
}
],
"checklist": {
"items": [
{"task": "SQLite μ€μ ", "priority": 1, "status": "completed"},
{"task": "νλ‘ νΈμλ κ°λ°", "priority": 2, "status": "pending"}
]
}
}
π νλ‘μ νΈ κ΄λ¦¬
GET /api/projects # νλ‘μ νΈ λͺ©λ‘ POST /api/projects # νλ‘μ νΈ μμ± (λ©νλ°μ΄ν° μλ μΆκ°) GET /api/projects/:id # νλ‘μ νΈ μμΈ PUT /api/projects/:id # νλ‘μ νΈ μ 체 μμ PATCH /api/projects/:id # νλ‘μ νΈ λΆλΆ μμ (μ κ·) GET /api/projects/:id/full # μ 체 μ 보 ν λ²μ μ‘°ν (μ κ·) GET /api/projects/:id/stats # νλ‘μ νΈ ν΅κ³ (μ κ·) # νλ‘μ νΈ μμ± μ μλ μΆκ°λλ λ©νλ°μ΄ν°: # - created_by: "Claude Sonnet 4.5" # - server_location: "DESKTOP-CD5THBO" # - status: "μ§νμ€" # - created_at: timestamp
π κ²μ API (μ κ·)
GET /api/projects/search?q=ν€μλ # ν€μλ κ²μ GET /api/projects/search?owner=Claude # λ΄λΉμ νν° GET /api/projects/search?status=μ§νμ€ # μν νν° GET /api/projects/search?tags=AI,ML # νκ·Έ νν° # μμ GET /api/projects/search?q=SQLite&status=μλ£
π ν΅κ³ API (μ κ·)
GET /api/projects/:id/stats
# μλ΅ μμ
{
"success": true,
"stats": {
"total_decisions": 3,
"total_meetings": 2,
"checklist_progress": "5/10 (50%)",
"roadmap_progress": "2/4 phases",
"last_updated": "2025-01-08T12:00:00Z"
}
}
π μν¬νλ‘μ° μ§νλ₯ API (μ κ·)
AI μμ μ 5λ¨κ³ μ§ν μν©μ μλμΌλ‘ νλ¨ν©λλ€.
GET /api/projects/:id/workflow
# 5λ¨κ³ μν¬νλ‘μ°
1οΈβ£ κ³ν β νλ‘μ νΈ μμ±
2οΈβ£ νλλͺ¨λ β μν€ν
μ² + λ‘λλ§΅
3οΈβ£ ꡬν β 체ν¬λ¦¬μ€νΈ + κ²°μ μ¬ν
4οΈβ£ ν
μ€νΈ β "[ν
μ€νΈ]" λ
ΈνΈ
5οΈβ£ μλ£ β status "μλ£" or "[μλ£]" λ
ΈνΈ
# μλ΅ μμ
{
"success": true,
"workflow": {
"steps": [
{
"step": 1,
"name": "κ³ν",
"status": "completed",
"description": "νλ‘μ νΈ μμ±"
},
{
"step": 2,
"name": "νλλͺ¨λ",
"status": "pending",
"description": "μν€ν
μ² + λ‘λλ§΅ + νμ΅μλ£"
},
...
],
"progress": 60, // μ§νλ₯ (%)
"completed_steps": 3, // μλ£λ λ¨κ³
"total_steps": 5, // μ 체 λ¨κ³
"current_step": 2, // νμ¬ λ¨κ³
"project_status": "ꡬνμ€" // νλ‘μ νΈ μν
}
}
ποΈ μΈλΆ νλͺ© μ‘°ν (μ κ·)
GET /api/projects/:id/architecture # μν€ν μ² GET /api/projects/:id/roadmap # λ‘λλ§΅ GET /api/projects/:id/decisions # κ²°μ μ¬ν λͺ©λ‘ GET /api/projects/:id/meetings # νμλ‘ λͺ©λ‘ GET /api/projects/:id/checklist # 체ν¬λ¦¬μ€νΈ
π Notes API (MD νμΌ + Gogs μλ μ λ‘λ)
POST /api/projects/:id/notes
{
"title": "API μ€κ³ λ¬Έμ",
"content": "# API μ€κ³\n\n## κ°μ\n...",
"auto_upload": true // Gogs μλ μ
λ‘λ (κΈ°λ³Έκ°: true)
}
GET /api/projects/:id/notes # λ
ΈνΈ λͺ©λ‘
GET /api/projects/:id/notes/:noteId # νΉμ λ
ΈνΈ μ‘°ν
# Gogs μλ μ
λ‘λ κΈ°λ₯:
# - Markdown νμΌμ Gogs μ μ₯μμ μλ 컀λ°
# - gogs_url νλμ λ§ν¬ μ μ₯
# - comupload.ai-empire.kr API μ¬μ©
π§ κ°λ³ νλͺ© μμ±
POST /api/projects/:id/architecture
{
"stack": "Node.js, Express",
"database": "SQLite",
"infrastructure": "PM2, Nginx"
}
POST /api/projects/:id/roadmap
{
"phases": [{"week": 1, "goal": "κ°λ°"}],
"timeline": "2 weeks"
}
POST /api/projects/:id/decisions
{
"title": "κΈ°μ μ€ν κ²°μ ",
"content": "SQLite μ¬μ©",
"priority": "high"
}
POST /api/projects/:id/meetings
{
"title": "μ£Όκ° νμ",
"date": "2025-01-08",
"participants": ["Kim", "Claude"],
"summary": "μ§ν μν© λ
Όμ"
}
POST /api/projects/:id/checklist
{
"items": [
{"task": "DB μ€μ ", "priority": 1, "status": "completed"}
]
}
β¨ μ€ν€λ§ μλ νν°λ§ (AI νΈμμ± 100%)
AIκ° μ무 νλλ λ£μ΄λ μλ¬κ° λ°μνμ§ μμ΅λλ€!
λͺ¨λ API μλν¬μΈνΈμμ μλμΌλ‘ μ€ν€λ§ νν°λ§μ΄ μ μ©λμ΄, νμ©λ νλλ§ μ μ₯λκ³ μλͺ»λ νλλ μλμΌλ‘ μ κ±°λ©λλ€.
# νμ© νλ (ν
μ΄λΈλ³)
projects: name, description, status, owner, tags, created_by, server_location
architecture: project_id, stack, database, infrastructure, diagram
roadmap: project_id, phases
decisions: project_id, title, content, rationale
meetings: project_id, date, participants, agenda, summary
checklist: project_id, items
notes: project_id, title, content, filename, gogs_url
# μλ μ κ±°λλ μμ νλ
β decisions: priority, decided_by, decided_at, impact, status
β meetings: title, action_items, attendees
β roadmap: milestones, timeline, duration
β projects: μμμ νλ
# μ¬μ© μμ
POST /api/projects/123/decisions
{
"title": "JWT μ¬μ©",
"content": "stateless μΈμ¦",
"priority": 1, // β μλ μ κ±°λ¨ (λ‘κ·Έ κΈ°λ‘)
"decided_by": "Kim", // β μλ μ κ±°λ¨ (λ‘κ·Έ κΈ°λ‘)
"impact": "high", // β μλ μ κ±°λ¨ (λ‘κ·Έ κΈ°λ‘)
"anything": "ignored" // β μλ μ κ±°λ¨ (λ‘κ·Έ κΈ°λ‘)
}
# κ²°κ³Ό: μλ¬ μμ΄ μ±κ³΅! (title, contentλ§ μ μ₯λ¨)
# λ‘κ·Έ: [Schema Filter] decisions: μ κ±°λ νλ β priority, decided_by, impact, anything
# λ°°μ΄ νλ μλ λ³ν
phases: "string" β ["string"] (μλ λ³ν)
phases: {...} β [{...}] (μλ λ³ν)
items: {...} β [{...}] (μλ λ³ν)
participants: "Kim" β ["Kim"] (μλ λ³ν)
μ΄μ νλλ₯Ό μ κ²½μ°μ§ μκ³ μμ λ‘κ² λ°μ΄ν°λ₯Ό μ μ‘νμΈμ. μμ€ν μ΄ μλμΌλ‘ μ¬λ°λ₯Έ νλλ§ μ μ₯νκ³ , μλͺ»λ νλλ μ κ±°ν©λλ€. μλ¬κ° λ°μνμ§ μμΌλ―λ‘ λΉ λ₯Έ νλ‘ν νμ΄νκ³Ό λ°λ³΅ κ°λ°μ΄ κ°λ₯ν©λλ€.
β‘ μ±λ₯ κ°μ
- SQLite WAL λͺ¨λ: λμ μ½κΈ°/μ°κΈ° μ±λ₯ ν₯μ
- ν΅ν© API: 6λ² μμ² β 1λ² μμ² (λ€νΈμν¬ λΉμ© μ κ°)
- PATCH μ§μ: νμν νλλ§ λΆλΆ μ λ°μ΄νΈ
- μΈλ±μ±: project_id κΈ°λ° λΉ λ₯Έ μ‘°ν
- μ€ν€λ§ νν°λ§: μλͺ»λ νλ μλ μ κ±° (100% AI νΈμμ±)
π μ μ μ 보
λλ©μΈ: https://meeting2.dclub.kr λ‘컬: http://localhost:50400 ν¬μ€: /health μλ²: νμ¬ WSL (DESKTOP-CD5THBO) DB: SQLite (data/meeting.db) PM2: meeting-v2