feat(task-005): complete article intake dashboard detail flow

This commit is contained in:
2026-05-21 18:54:11 +03:00
parent 7972e9a95f
commit cf84400118
28 changed files with 1714 additions and 61 deletions
+188 -2
View File
@@ -386,6 +386,13 @@
}
],
"default": null
},
"workflow_events": {
"items": {
"$ref": "#/components/schemas/WorkflowEventSummary"
},
"title": "Workflow Events",
"type": "array"
}
},
"required": [
@@ -1998,6 +2005,79 @@
],
"title": "ValidationError",
"type": "object"
},
"WorkflowEventSummary": {
"additionalProperties": false,
"properties": {
"actor_user_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Actor User Id"
},
"article_id": {
"format": "uuid",
"title": "Article Id",
"type": "string"
},
"created_at": {
"format": "date-time",
"title": "Created At",
"type": "string"
},
"event_type": {
"minLength": 1,
"title": "Event Type",
"type": "string"
},
"from_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ArticleWorkflowStatus"
},
{
"type": "null"
}
],
"default": null
},
"id": {
"format": "uuid",
"title": "Id",
"type": "string"
},
"payload": {
"additionalProperties": true,
"title": "Payload",
"type": "object"
},
"to_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ArticleWorkflowStatus"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"id",
"article_id",
"event_type",
"created_at"
],
"title": "WorkflowEventSummary",
"type": "object"
}
}
},
@@ -2008,8 +2088,55 @@
"openapi": "3.1.0",
"paths": {
"/api/articles": {
"get": {
"operationId": "list_articles_route_api_articles_get",
"parameters": [
{
"in": "header",
"name": "X-Demo-User-Email",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "X-Demo-User-Email"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ArticleListResponse"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"summary": "List Articles Route",
"tags": [
"articles"
]
},
"post": {
"operationId": "create_article_api_articles_post",
"operationId": "post_article_api_articles_post",
"parameters": [
{
"in": "header",
@@ -2060,7 +2187,66 @@
"description": "Validation Error"
}
},
"summary": "Create Article",
"summary": "Post Article",
"tags": [
"articles"
]
}
},
"/api/articles/{article_id}": {
"get": {
"operationId": "get_article_api_articles__article_id__get",
"parameters": [
{
"in": "path",
"name": "article_id",
"required": true,
"schema": {
"format": "uuid",
"title": "Article Id",
"type": "string"
}
},
{
"in": "header",
"name": "X-Demo-User-Email",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "X-Demo-User-Email"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ArticleDetailResponse"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"summary": "Get Article",
"tags": [
"articles"
]
+12
View File
@@ -57,6 +57,7 @@ export type ArticleDetailResponse = {
research_manifests?: ResearchArtifactManifestSummary[];
reviews?: ReviewSummary[];
target_site?: TargetSiteConfig | null;
workflow_events?: WorkflowEventSummary[];
};
export type ArticleListResponse = {
@@ -335,3 +336,14 @@ export type ValidationError = {
msg: string;
type: string;
};
export type WorkflowEventSummary = {
actor_user_id?: string | null;
article_id: string;
created_at: string;
event_type: string;
from_status?: ArticleWorkflowStatus | null;
id: string;
payload?: Record<string, unknown>;
to_status?: ArticleWorkflowStatus | null;
};