84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
"""Personal Space API schemas."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Literal, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
SavedIdeaStatus = Literal["saved", "enriched", "needs_more_info", "draft_ready", "promoted", "archived"]
|
|
SavedIdeaSourceType = Literal["project_launch", "ai_concierge", "logout_guard", "feishu", "upload", "manual"]
|
|
SavedIdeaInputMode = Literal["idea", "import", "template"]
|
|
SavedIdeaEnrichmentStatus = Literal["baseline", "ai_enriched", "ai_failed"]
|
|
|
|
|
|
class SavedIdeaAttachment(BaseModel):
|
|
type: str = "text"
|
|
name: Optional[str] = None
|
|
summary: Optional[str] = None
|
|
payload: Optional[dict[str, Any]] = None
|
|
|
|
|
|
class SavedIdeaCreateRequest(BaseModel):
|
|
raw_text: str = Field(min_length=1, max_length=4000)
|
|
title: Optional[str] = Field(default=None, max_length=255)
|
|
summary: Optional[str] = Field(default=None, max_length=1000)
|
|
source_type: SavedIdeaSourceType = "project_launch"
|
|
source_ref: Optional[str] = Field(default=None, max_length=255)
|
|
input_mode: SavedIdeaInputMode = "idea"
|
|
attachments: list[SavedIdeaAttachment] = Field(default_factory=list)
|
|
|
|
|
|
class SavedIdeaUpdateRequest(BaseModel):
|
|
title: Optional[str] = Field(default=None, min_length=1, max_length=255)
|
|
raw_text: Optional[str] = Field(default=None, min_length=1, max_length=4000)
|
|
summary: Optional[str] = Field(default=None, min_length=1, max_length=1000)
|
|
status: Optional[SavedIdeaStatus] = None
|
|
|
|
|
|
class SavedIdeaRead(BaseModel):
|
|
id: str
|
|
title: str
|
|
raw_text: str
|
|
summary: str
|
|
source_type: str
|
|
source_ref: Optional[str] = None
|
|
input_mode: str
|
|
attachments: list[dict[str, Any]] = Field(default_factory=list)
|
|
status: str
|
|
status_label: str
|
|
ai_summary: Optional[str] = None
|
|
missing_questions: list[str] = Field(default_factory=list)
|
|
readiness_score: float
|
|
enrichment_status: str = "baseline"
|
|
enrichment_payload: dict[str, Any] = Field(default_factory=dict)
|
|
enrichment_error: Optional[str] = None
|
|
enriched_at: Optional[str] = None
|
|
launch_draft_id: Optional[str] = None
|
|
promoted_project_id: Optional[int] = None
|
|
created_at: str
|
|
updated_at: str
|
|
href: str
|
|
|
|
|
|
class SavedIdeaListResponse(BaseModel):
|
|
items: list[SavedIdeaRead] = Field(default_factory=list)
|
|
|
|
|
|
class SavedIdeaPromoteResponse(BaseModel):
|
|
idea: SavedIdeaRead
|
|
draft: dict[str, Any]
|
|
redirect_url: str
|
|
|
|
|
|
__all__ = [
|
|
"SavedIdeaAttachment",
|
|
"SavedIdeaCreateRequest",
|
|
"SavedIdeaEnrichmentStatus",
|
|
"SavedIdeaListResponse",
|
|
"SavedIdeaPromoteResponse",
|
|
"SavedIdeaRead",
|
|
"SavedIdeaUpdateRequest",
|
|
]
|