272 lines
6.4 KiB
YAML
272 lines
6.4 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: Unified Task Reports API
|
|
version: 1.0.0
|
|
description: API contract for consolidated task reports across task types.
|
|
|
|
servers:
|
|
- url: /api
|
|
|
|
paths:
|
|
/reports:
|
|
get:
|
|
summary: List unified task reports
|
|
description: Returns paginated normalized reports with filtering and sorting.
|
|
operationId: listReports
|
|
parameters:
|
|
- in: query
|
|
name: page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- in: query
|
|
name: page_size
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
maximum: 100
|
|
default: 20
|
|
- in: query
|
|
name: task_types
|
|
description: Comma-separated values
|
|
schema:
|
|
type: string
|
|
example: migration,backup
|
|
- in: query
|
|
name: statuses
|
|
description: Comma-separated values
|
|
schema:
|
|
type: string
|
|
example: failed,in_progress
|
|
- in: query
|
|
name: time_from
|
|
schema:
|
|
type: string
|
|
format: date-time
|
|
- in: query
|
|
name: time_to
|
|
schema:
|
|
type: string
|
|
format: date-time
|
|
- in: query
|
|
name: search
|
|
schema:
|
|
type: string
|
|
maxLength: 200
|
|
- in: query
|
|
name: sort_by
|
|
schema:
|
|
type: string
|
|
enum: [updated_at, status, task_type]
|
|
default: updated_at
|
|
- in: query
|
|
name: sort_order
|
|
schema:
|
|
type: string
|
|
enum: [asc, desc]
|
|
default: desc
|
|
responses:
|
|
'200':
|
|
description: Paginated unified reports
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ReportCollection'
|
|
'400':
|
|
description: Invalid query parameters
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
'401':
|
|
description: Unauthorized
|
|
'403':
|
|
description: Forbidden
|
|
|
|
/reports/{report_id}:
|
|
get:
|
|
summary: Get report detail
|
|
description: Returns one normalized report with optional diagnostics and next actions.
|
|
operationId: getReportDetail
|
|
parameters:
|
|
- in: path
|
|
name: report_id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Report detail
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ReportDetailView'
|
|
'401':
|
|
description: Unauthorized
|
|
'403':
|
|
description: Forbidden
|
|
'404':
|
|
description: Report not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
|
|
components:
|
|
schemas:
|
|
TaskType:
|
|
type: string
|
|
enum:
|
|
- llm_verification
|
|
- backup
|
|
- migration
|
|
- documentation
|
|
- unknown
|
|
|
|
ReportStatus:
|
|
type: string
|
|
enum:
|
|
- success
|
|
- failed
|
|
- in_progress
|
|
- partial
|
|
|
|
ReportSourceRef:
|
|
type: object
|
|
additionalProperties: true
|
|
description: Optional pointers to related domain objects (dashboard/dataset/environment).
|
|
|
|
ErrorContext:
|
|
type: object
|
|
properties:
|
|
code:
|
|
type: string
|
|
message:
|
|
type: string
|
|
next_actions:
|
|
type: array
|
|
items:
|
|
type: string
|
|
required: [message]
|
|
|
|
TaskReport:
|
|
type: object
|
|
properties:
|
|
report_id:
|
|
type: string
|
|
task_id:
|
|
type: string
|
|
task_type:
|
|
$ref: '#/components/schemas/TaskType'
|
|
status:
|
|
$ref: '#/components/schemas/ReportStatus'
|
|
started_at:
|
|
type: string
|
|
format: date-time
|
|
nullable: true
|
|
updated_at:
|
|
type: string
|
|
format: date-time
|
|
summary:
|
|
type: string
|
|
details:
|
|
type: object
|
|
nullable: true
|
|
additionalProperties: true
|
|
error_context:
|
|
$ref: '#/components/schemas/ErrorContext'
|
|
source_ref:
|
|
$ref: '#/components/schemas/ReportSourceRef'
|
|
required:
|
|
- report_id
|
|
- task_id
|
|
- task_type
|
|
- status
|
|
- updated_at
|
|
- summary
|
|
|
|
ReportQueryEcho:
|
|
type: object
|
|
properties:
|
|
page:
|
|
type: integer
|
|
page_size:
|
|
type: integer
|
|
task_types:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/TaskType'
|
|
statuses:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ReportStatus'
|
|
time_from:
|
|
type: string
|
|
format: date-time
|
|
nullable: true
|
|
time_to:
|
|
type: string
|
|
format: date-time
|
|
nullable: true
|
|
search:
|
|
type: string
|
|
nullable: true
|
|
sort_by:
|
|
type: string
|
|
enum: [updated_at, status, task_type]
|
|
sort_order:
|
|
type: string
|
|
enum: [asc, desc]
|
|
required: [page, page_size, sort_by, sort_order]
|
|
|
|
ReportCollection:
|
|
type: object
|
|
properties:
|
|
items:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/TaskReport'
|
|
total:
|
|
type: integer
|
|
minimum: 0
|
|
page:
|
|
type: integer
|
|
minimum: 1
|
|
page_size:
|
|
type: integer
|
|
minimum: 1
|
|
has_next:
|
|
type: boolean
|
|
applied_filters:
|
|
$ref: '#/components/schemas/ReportQueryEcho'
|
|
required: [items, total, page, page_size, has_next, applied_filters]
|
|
|
|
ReportDetailView:
|
|
type: object
|
|
properties:
|
|
report:
|
|
$ref: '#/components/schemas/TaskReport'
|
|
timeline:
|
|
type: array
|
|
items:
|
|
type: object
|
|
additionalProperties: true
|
|
diagnostics:
|
|
type: object
|
|
nullable: true
|
|
additionalProperties: true
|
|
next_actions:
|
|
type: array
|
|
items:
|
|
type: string
|
|
required: [report]
|
|
|
|
ErrorResponse:
|
|
type: object
|
|
properties:
|
|
detail:
|
|
type: string
|
|
code:
|
|
type: string
|
|
required: [detail] |