meeting service API 설계서 수정

This commit is contained in:
cyjadela 2025-10-23 13:31:47 +09:00
parent a551235ad7
commit d6df40015e

View File

@ -99,20 +99,13 @@ paths:
priority: "MEDIUM" priority: "MEDIUM"
status: "IN_PROGRESS" status: "IN_PROGRESS"
minutesId: "770e8400-e29b-41d4-a716-446655440001" minutesId: "770e8400-e29b-41d4-a716-446655440001"
recentMinutes: myMinutes:
- minutesId: "770e8400-e29b-41d4-a716-446655440000" - minutesId: "770e8400-e29b-41d4-a716-446655440000"
title: "아키텍처 설계 회의" title: "아키텍처 설계 회의"
meetingDate: "2025-01-23T14:00:00Z" meetingDate: "2025-01-23T14:00:00Z"
status: "FINALIZED" status: "FINALIZED"
participantCount: 6 participantCount: 6
lastModified: "2025-01-23T16:30:00Z" lastModified: "2025-01-23T16:30:00Z"
sharedMinutes:
- minutesId: "770e8400-e29b-41d4-a716-446655440002"
title: "프로젝트 킥오프 미팅"
meetingDate: "2025-01-22T10:00:00Z"
status: "FINALIZED"
sharedBy: "김철수"
sharedAt: "2025-01-22T15:00:00Z"
statistics: statistics:
upcomingMeetingsCount: 2 upcomingMeetingsCount: 2
activeTodosCount: 5 activeTodosCount: 5
@ -154,6 +147,7 @@ paths:
startTime: "2025-01-25T14:00:00Z" startTime: "2025-01-25T14:00:00Z"
endTime: "2025-01-25T16:00:00Z" endTime: "2025-01-25T16:00:00Z"
location: "회의실 A" location: "회의실 A"
agenda: "1. Q1 목표 달성 현황 검토\n2. Q2 전략 방향 논의\n3. 주요 이슈 및 리스크 검토"
participants: participants:
- "user1@example.com" - "user1@example.com"
- "user2@example.com" - "user2@example.com"
@ -288,6 +282,7 @@ paths:
- 회의 통계 생성 - 회의 통계 생성
- AI 제안 데이터 회의록에 반영 - AI 제안 데이터 회의록에 반영
- 참석자에게 종료 알림 - 참석자에게 종료 알림
- 검증 완료 화면 데이터 반환
operationId: endMeeting operationId: endMeeting
x-user-story: UFR-MEET-040 x-user-story: UFR-MEET-040
x-controller: MeetingController x-controller: MeetingController
@ -296,6 +291,15 @@ paths:
parameters: parameters:
- $ref: '#/components/parameters/MeetingIdPath' - $ref: '#/components/parameters/MeetingIdPath'
- $ref: '#/components/parameters/UserIdHeader' - $ref: '#/components/parameters/UserIdHeader'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/EndMeetingRequest'
example:
finalAgenda: "1. Q1 목표 달성률 85% 확인\n2. 신규 기능 우선순위 결정\n3. 다음 주 개발 일정 조율"
applyAiSuggestions: true
responses: responses:
'200': '200':
description: 회의 종료 성공 description: 회의 종료 성공
@ -320,6 +324,53 @@ paths:
discussion: 3 discussion: 3
decision: 2 decision: 2
todo: 3 todo: 3
verificationStatus:
totalSections: 4
verifiedSections: 2
verificationRate: 50
sections:
- sectionId: "880e8400-e29b-41d4-a716-446655440000"
sectionType: "DISCUSSION"
title: "회의 개요"
isVerified: true
isLocked: false
verifiers:
- userId: "user1"
name: "김민준"
verifiedAt: "2025-01-25T15:30:00Z"
- userId: "user2"
name: "박서연"
verifiedAt: "2025-01-25T15:35:00Z"
- sectionId: "880e8400-e29b-41d4-a716-446655440001"
sectionType: "DECISION"
title: "논의 사항"
isVerified: true
isLocked: true
verifiers:
- userId: "user1"
name: "김민준"
verifiedAt: "2025-01-25T15:40:00Z"
- userId: "user2"
name: "박서연"
verifiedAt: "2025-01-25T15:42:00Z"
- userId: "user3"
name: "이준호"
verifiedAt: "2025-01-25T15:45:00Z"
- sectionId: "880e8400-e29b-41d4-a716-446655440002"
sectionType: "TODO"
title: "결정 사항"
isVerified: false
isLocked: false
verifiers:
- userId: "user2"
name: "박서연"
verifiedAt: "2025-01-25T15:50:00Z"
- sectionId: "880e8400-e29b-41d4-a716-446655440003"
sectionType: "TODO"
title: "액션 아이템"
isVerified: false
isLocked: false
verifiers: []
'404': '404':
$ref: '#/components/responses/NotFoundError' $ref: '#/components/responses/NotFoundError'
'409': '409':
@ -629,6 +680,85 @@ paths:
# ==================== Todo APIs ==================== # ==================== Todo APIs ====================
/todos: /todos:
get:
tags:
- Todo
summary: Todo 목록 조회
description: |
사용자별 Todo 목록을 조회하고 필터링합니다.
- 상태별 필터링 (전체/진행중/완료/마감임박)
- 우선순위별 정렬
- 통계 정보 포함
operationId: getTodoList
x-user-story: UFR-TODO-020
x-controller: TodoController
security:
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/UserIdHeader'
- name: status
in: query
schema:
type: string
enum: [ALL, IN_PROGRESS, COMPLETED, URGENT]
default: ALL
description: |
Todo 상태 필터
- ALL: 전체
- IN_PROGRESS: 진행중
- COMPLETED: 완료
- URGENT: 마감 임박 (3일 이내)
- name: sort
in: query
schema:
type: string
enum: [DUE_DATE, PRIORITY, CREATED_AT]
default: DUE_DATE
description: 정렬 기준
responses:
'200':
description: Todo 목록 조회 성공
content:
application/json:
schema:
$ref: '#/components/schemas/TodoListResponse'
example:
statistics:
total: 12
inProgress: 8
completed: 4
urgent: 3
completionRate: 33.3
todos:
- todoId: "660e8400-e29b-41d4-a716-446655440000"
content: "API 설계 문서 작성"
assignee:
userId: "user1"
email: "user@example.com"
name: "김민준"
dueDate: "2025-01-30"
priority: "HIGH"
status: "IN_PROGRESS"
progress: 60
minutesId: "770e8400-e29b-41d4-a716-446655440000"
meetingTitle: "아키텍처 설계 회의"
createdAt: "2025-01-23T10:00:00Z"
- todoId: "660e8400-e29b-41d4-a716-446655440001"
content: "데이터베이스 스키마 설계"
assignee:
userId: "user1"
email: "user@example.com"
name: "김민준"
dueDate: "2025-02-05"
priority: "MEDIUM"
status: "IN_PROGRESS"
progress: 30
minutesId: "770e8400-e29b-41d4-a716-446655440001"
meetingTitle: "주간 스프린트 리뷰"
createdAt: "2025-01-22T14:00:00Z"
'401':
$ref: '#/components/responses/UnauthorizedError'
post: post:
tags: tags:
- Todo - Todo
@ -712,6 +842,7 @@ paths:
summary: 템플릿 목록 조회 summary: 템플릿 목록 조회
description: | description: |
사용 가능한 회의록 템플릿 목록을 조회합니다. 사용 가능한 회의록 템플릿 목록을 조회합니다.
각 템플릿의 섹션 정보를 포함하여 반환합니다.
- 일반 회의 - 일반 회의
- 스크럼 회의 - 스크럼 회의
- 프로젝트 킥오프 - 프로젝트 킥오프
@ -730,34 +861,47 @@ paths:
type: array type: array
items: items:
$ref: '#/components/schemas/TemplateResponse' $ref: '#/components/schemas/TemplateResponse'
example:
/templates/{templateId}: - templateId: "general-meeting"
get: name: "일반 회의"
tags: description: "기본 회의록 형식"
- Template icon: "📋"
summary: 템플릿 상세 조회 category: "GENERAL"
description: 특정 템플릿의 상세 정보를 조회합니다. sections:
operationId: getTemplate - sectionType: "DISCUSSION"
x-user-story: UFR-MEET-020 title: "회의 개요"
x-controller: TemplateController order: 1
security: isRequired: true
- bearerAuth: [] - sectionType: "DISCUSSION"
parameters: title: "논의 사항"
- name: templateId order: 2
in: path isRequired: true
required: true - sectionType: "DECISION"
schema: title: "결정 사항"
type: string order: 3
description: 템플릿 ID isRequired: true
responses: - sectionType: "TODO"
'200': title: "액션 아이템"
description: 템플릿 상세 조회 성공 order: 4
content: isRequired: true
application/json: - templateId: "scrum-meeting"
schema: name: "스크럼 회의"
$ref: '#/components/schemas/TemplateDetailResponse' description: "데일리 스탠드업 형식"
'404': icon: "🏃"
$ref: '#/components/responses/NotFoundError' category: "SCRUM"
sections:
- sectionType: "DISCUSSION"
title: "어제 한 일"
order: 1
isRequired: true
- sectionType: "TODO"
title: "오늘 할 일"
order: 2
isRequired: true
- sectionType: "CUSTOM"
title: "블로커/이슈"
order: 3
isRequired: true
# ==================== WebSocket Endpoints ==================== # ==================== WebSocket Endpoints ====================
/ws/minutes/{minutesId}: /ws/minutes/{minutesId}:
@ -880,16 +1024,11 @@ components:
items: items:
$ref: '#/components/schemas/ActiveTodo' $ref: '#/components/schemas/ActiveTodo'
description: 진행 중 Todo 목록 description: 진행 중 Todo 목록
recentMinutes: myMinutes:
type: array type: array
items: items:
$ref: '#/components/schemas/RecentMinutes' $ref: '#/components/schemas/MyMinutes'
description: 최근 회의록 목록 description: 내 회의록 목록
sharedMinutes:
type: array
items:
$ref: '#/components/schemas/SharedMinutes'
description: 공유받은 회의록 목록
statistics: statistics:
$ref: '#/components/schemas/DashboardStatistics' $ref: '#/components/schemas/DashboardStatistics'
description: 통계 정보 description: 통계 정보
@ -949,7 +1088,7 @@ components:
- priority - priority
- status - status
RecentMinutes: MyMinutes:
type: object type: object
properties: properties:
minutesId: minutesId:
@ -974,30 +1113,6 @@ components:
- meetingDate - meetingDate
- status - status
SharedMinutes:
type: object
properties:
minutesId:
type: string
format: uuid
title:
type: string
meetingDate:
type: string
format: date-time
status:
type: string
enum: [DRAFT, FINALIZED]
sharedBy:
type: string
sharedAt:
type: string
format: date-time
required:
- minutesId
- title
- status
DashboardStatistics: DashboardStatistics:
type: object type: object
properties: properties:
@ -1034,6 +1149,10 @@ components:
type: string type: string
maxLength: 200 maxLength: 200
description: 회의 장소 description: 회의 장소
agenda:
type: string
maxLength: 1000
description: 회의 안건 (선택 사항)
participants: participants:
type: array type: array
items: items:
@ -1319,14 +1438,7 @@ components:
type: array type: array
items: items:
$ref: '#/components/schemas/MinutesSection' $ref: '#/components/schemas/MinutesSection'
aiSummaries: description: 섹션별 내용 (AI 요약 및 관련 회의록 포함)
type: array
items:
$ref: '#/components/schemas/AISummary'
relatedMinutes:
type: array
items:
$ref: '#/components/schemas/RelatedMinutes'
permissions: permissions:
$ref: '#/components/schemas/MinutesPermissions' $ref: '#/components/schemas/MinutesPermissions'
status: status:
@ -1390,6 +1502,14 @@ components:
verifiedAt: verifiedAt:
type: string type: string
format: date-time format: date-time
aiSummary:
$ref: '#/components/schemas/AISummary'
description: 이 섹션의 AI 요약
relatedMinutes:
type: array
items:
$ref: '#/components/schemas/RelatedMinutes'
description: 이 섹션과 관련된 회의록 목록 (최대 3개)
required: required:
- sectionId - sectionId
- sectionType - sectionType
@ -1405,11 +1525,9 @@ components:
summaryId: summaryId:
type: string type: string
format: uuid format: uuid
sectionId:
type: string
format: uuid
content: content:
type: string type: string
description: AI가 생성한 요약 내용
createdAt: createdAt:
type: string type: string
format: date-time format: date-time
@ -1418,7 +1536,6 @@ components:
format: date-time format: date-time
required: required:
- summaryId - summaryId
- sectionId
- content - content
RelatedMinutes: RelatedMinutes:
@ -1475,6 +1592,13 @@ components:
type: string type: string
aiSummary: aiSummary:
type: string type: string
relatedMinutesIds:
type: array
items:
type: string
format: uuid
description: 이 섹션과 연결할 관련 회의록 ID 목록 (최대 3개)
maxItems: 3
required: required:
- sectionId - sectionId
@ -1541,6 +1665,102 @@ components:
- isVerified - isVerified
# ==================== Todo Schemas ==================== # ==================== Todo Schemas ====================
TodoListResponse:
type: object
properties:
statistics:
$ref: '#/components/schemas/TodoStatistics'
todos:
type: array
items:
$ref: '#/components/schemas/TodoDetail'
required:
- statistics
- todos
TodoStatistics:
type: object
properties:
total:
type: integer
description: 전체 Todo 개수
inProgress:
type: integer
description: 진행 중 Todo 개수
completed:
type: integer
description: 완료된 Todo 개수
urgent:
type: integer
description: 마감 임박 Todo 개수 (3일 이내)
completionRate:
type: number
format: double
description: 완료율 (%)
required:
- total
- inProgress
- completed
- urgent
- completionRate
TodoDetail:
type: object
properties:
todoId:
type: string
format: uuid
content:
type: string
assignee:
$ref: '#/components/schemas/TodoAssignee'
dueDate:
type: string
format: date
priority:
type: string
enum: [HIGH, MEDIUM, LOW]
status:
type: string
enum: [IN_PROGRESS, COMPLETED]
progress:
type: integer
minimum: 0
maximum: 100
description: 진행률 (%)
minutesId:
type: string
format: uuid
meetingTitle:
type: string
description: 관련 회의 제목
createdAt:
type: string
format: date-time
required:
- todoId
- content
- assignee
- priority
- status
- minutesId
- meetingTitle
TodoAssignee:
type: object
properties:
userId:
type: string
email:
type: string
format: email
name:
type: string
required:
- userId
- email
- name
CreateTodoRequest: CreateTodoRequest:
type: object type: object
properties: properties:
@ -1643,29 +1863,17 @@ components:
type: string type: string
description: description:
type: string type: string
icon:
type: string
description: 템플릿 아이콘 (이모지)
category: category:
type: string type: string
enum: [GENERAL, SCRUM, KICKOFF, WEEKLY] enum: [GENERAL, SCRUM, KICKOFF, WEEKLY]
required:
- templateId
- name
- category
TemplateDetailResponse:
type: object
properties:
templateId:
type: string
name:
type: string
description:
type: string
category:
type: string
sections: sections:
type: array type: array
items: items:
$ref: '#/components/schemas/TemplateSection' $ref: '#/components/schemas/TemplateSection'
description: 템플릿 섹션 목록
required: required:
- templateId - templateId
- name - name