mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 10:16:24 +00:00
meeting service API 설계서 수정
This commit is contained in:
parent
a551235ad7
commit
d6df40015e
@ -99,20 +99,13 @@ paths:
|
||||
priority: "MEDIUM"
|
||||
status: "IN_PROGRESS"
|
||||
minutesId: "770e8400-e29b-41d4-a716-446655440001"
|
||||
recentMinutes:
|
||||
myMinutes:
|
||||
- minutesId: "770e8400-e29b-41d4-a716-446655440000"
|
||||
title: "아키텍처 설계 회의"
|
||||
meetingDate: "2025-01-23T14:00:00Z"
|
||||
status: "FINALIZED"
|
||||
participantCount: 6
|
||||
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:
|
||||
upcomingMeetingsCount: 2
|
||||
activeTodosCount: 5
|
||||
@ -154,6 +147,7 @@ paths:
|
||||
startTime: "2025-01-25T14:00:00Z"
|
||||
endTime: "2025-01-25T16:00:00Z"
|
||||
location: "회의실 A"
|
||||
agenda: "1. Q1 목표 달성 현황 검토\n2. Q2 전략 방향 논의\n3. 주요 이슈 및 리스크 검토"
|
||||
participants:
|
||||
- "user1@example.com"
|
||||
- "user2@example.com"
|
||||
@ -288,6 +282,7 @@ paths:
|
||||
- 회의 통계 생성
|
||||
- AI 제안 데이터 회의록에 반영
|
||||
- 참석자에게 종료 알림
|
||||
- 검증 완료 화면 데이터 반환
|
||||
operationId: endMeeting
|
||||
x-user-story: UFR-MEET-040
|
||||
x-controller: MeetingController
|
||||
@ -296,6 +291,15 @@ paths:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/MeetingIdPath'
|
||||
- $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:
|
||||
'200':
|
||||
description: 회의 종료 성공
|
||||
@ -320,6 +324,53 @@ paths:
|
||||
discussion: 3
|
||||
decision: 2
|
||||
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':
|
||||
$ref: '#/components/responses/NotFoundError'
|
||||
'409':
|
||||
@ -629,6 +680,85 @@ paths:
|
||||
|
||||
# ==================== Todo APIs ====================
|
||||
/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:
|
||||
tags:
|
||||
- Todo
|
||||
@ -712,6 +842,7 @@ paths:
|
||||
summary: 템플릿 목록 조회
|
||||
description: |
|
||||
사용 가능한 회의록 템플릿 목록을 조회합니다.
|
||||
각 템플릿의 섹션 정보를 포함하여 반환합니다.
|
||||
- 일반 회의
|
||||
- 스크럼 회의
|
||||
- 프로젝트 킥오프
|
||||
@ -730,34 +861,47 @@ paths:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/TemplateResponse'
|
||||
|
||||
/templates/{templateId}:
|
||||
get:
|
||||
tags:
|
||||
- Template
|
||||
summary: 템플릿 상세 조회
|
||||
description: 특정 템플릿의 상세 정보를 조회합니다.
|
||||
operationId: getTemplate
|
||||
x-user-story: UFR-MEET-020
|
||||
x-controller: TemplateController
|
||||
security:
|
||||
- bearerAuth: []
|
||||
parameters:
|
||||
- name: templateId
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
description: 템플릿 ID
|
||||
responses:
|
||||
'200':
|
||||
description: 템플릿 상세 조회 성공
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TemplateDetailResponse'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFoundError'
|
||||
example:
|
||||
- templateId: "general-meeting"
|
||||
name: "일반 회의"
|
||||
description: "기본 회의록 형식"
|
||||
icon: "📋"
|
||||
category: "GENERAL"
|
||||
sections:
|
||||
- sectionType: "DISCUSSION"
|
||||
title: "회의 개요"
|
||||
order: 1
|
||||
isRequired: true
|
||||
- sectionType: "DISCUSSION"
|
||||
title: "논의 사항"
|
||||
order: 2
|
||||
isRequired: true
|
||||
- sectionType: "DECISION"
|
||||
title: "결정 사항"
|
||||
order: 3
|
||||
isRequired: true
|
||||
- sectionType: "TODO"
|
||||
title: "액션 아이템"
|
||||
order: 4
|
||||
isRequired: true
|
||||
- templateId: "scrum-meeting"
|
||||
name: "스크럼 회의"
|
||||
description: "데일리 스탠드업 형식"
|
||||
icon: "🏃"
|
||||
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 ====================
|
||||
/ws/minutes/{minutesId}:
|
||||
@ -880,16 +1024,11 @@ components:
|
||||
items:
|
||||
$ref: '#/components/schemas/ActiveTodo'
|
||||
description: 진행 중 Todo 목록
|
||||
recentMinutes:
|
||||
myMinutes:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/RecentMinutes'
|
||||
description: 최근 회의록 목록
|
||||
sharedMinutes:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/SharedMinutes'
|
||||
description: 공유받은 회의록 목록
|
||||
$ref: '#/components/schemas/MyMinutes'
|
||||
description: 내 회의록 목록
|
||||
statistics:
|
||||
$ref: '#/components/schemas/DashboardStatistics'
|
||||
description: 통계 정보
|
||||
@ -949,7 +1088,7 @@ components:
|
||||
- priority
|
||||
- status
|
||||
|
||||
RecentMinutes:
|
||||
MyMinutes:
|
||||
type: object
|
||||
properties:
|
||||
minutesId:
|
||||
@ -974,30 +1113,6 @@ components:
|
||||
- meetingDate
|
||||
- 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:
|
||||
type: object
|
||||
properties:
|
||||
@ -1034,6 +1149,10 @@ components:
|
||||
type: string
|
||||
maxLength: 200
|
||||
description: 회의 장소
|
||||
agenda:
|
||||
type: string
|
||||
maxLength: 1000
|
||||
description: 회의 안건 (선택 사항)
|
||||
participants:
|
||||
type: array
|
||||
items:
|
||||
@ -1319,14 +1438,7 @@ components:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/MinutesSection'
|
||||
aiSummaries:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/AISummary'
|
||||
relatedMinutes:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/RelatedMinutes'
|
||||
description: 섹션별 내용 (AI 요약 및 관련 회의록 포함)
|
||||
permissions:
|
||||
$ref: '#/components/schemas/MinutesPermissions'
|
||||
status:
|
||||
@ -1390,6 +1502,14 @@ components:
|
||||
verifiedAt:
|
||||
type: string
|
||||
format: date-time
|
||||
aiSummary:
|
||||
$ref: '#/components/schemas/AISummary'
|
||||
description: 이 섹션의 AI 요약
|
||||
relatedMinutes:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/RelatedMinutes'
|
||||
description: 이 섹션과 관련된 회의록 목록 (최대 3개)
|
||||
required:
|
||||
- sectionId
|
||||
- sectionType
|
||||
@ -1405,11 +1525,9 @@ components:
|
||||
summaryId:
|
||||
type: string
|
||||
format: uuid
|
||||
sectionId:
|
||||
type: string
|
||||
format: uuid
|
||||
content:
|
||||
type: string
|
||||
description: AI가 생성한 요약 내용
|
||||
createdAt:
|
||||
type: string
|
||||
format: date-time
|
||||
@ -1418,7 +1536,6 @@ components:
|
||||
format: date-time
|
||||
required:
|
||||
- summaryId
|
||||
- sectionId
|
||||
- content
|
||||
|
||||
RelatedMinutes:
|
||||
@ -1475,6 +1592,13 @@ components:
|
||||
type: string
|
||||
aiSummary:
|
||||
type: string
|
||||
relatedMinutesIds:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
format: uuid
|
||||
description: 이 섹션과 연결할 관련 회의록 ID 목록 (최대 3개)
|
||||
maxItems: 3
|
||||
required:
|
||||
- sectionId
|
||||
|
||||
@ -1541,6 +1665,102 @@ components:
|
||||
- isVerified
|
||||
|
||||
# ==================== 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:
|
||||
type: object
|
||||
properties:
|
||||
@ -1643,29 +1863,17 @@ components:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
icon:
|
||||
type: string
|
||||
description: 템플릿 아이콘 (이모지)
|
||||
category:
|
||||
type: string
|
||||
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:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/TemplateSection'
|
||||
description: 템플릿 섹션 목록
|
||||
required:
|
||||
- templateId
|
||||
- name
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user