5c028d7952
包含 FastAPI 后端、React 前端、队列/OCR/标签/待办等完整功能。 Co-authored-by: Cursor <cursoragent@cursor.com>
91 lines
1.8 KiB
Python
91 lines
1.8 KiB
Python
"""截图相关的请求/响应模型。"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class TagOut(BaseModel):
|
|
id: int
|
|
name: str
|
|
color: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class CategoryOut(BaseModel):
|
|
id: int
|
|
name: str
|
|
color: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ScreenshotBrief(BaseModel):
|
|
"""卡片列表用:尽量精简。"""
|
|
|
|
id: int
|
|
path: str
|
|
width: int
|
|
height: int
|
|
captured_at: datetime
|
|
thumb_url: Optional[str] = None
|
|
ai_title: Optional[str] = None
|
|
ai_status: str
|
|
ocr_status: str
|
|
is_favorite: bool = False
|
|
category: Optional[CategoryOut] = None
|
|
tags: list[TagOut] = []
|
|
|
|
|
|
class TodoBrief(BaseModel):
|
|
id: int
|
|
title: str
|
|
note: Optional[str] = None
|
|
kind: Optional[str] = None
|
|
status: str
|
|
created_at: datetime
|
|
completed_at: Optional[datetime] = None
|
|
screenshot_id: int
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class TodoListResp(BaseModel):
|
|
items: list[TodoBrief]
|
|
total: int
|
|
page: int
|
|
size: int
|
|
|
|
|
|
class ScreenshotDetail(ScreenshotBrief):
|
|
"""详情页用:含 OCR 与 AI 文本。"""
|
|
|
|
file_url: str
|
|
size: int
|
|
ocr_text: Optional[str] = None
|
|
ai_summary: Optional[str] = None
|
|
ai_suggestion: Optional[str] = None
|
|
todos: list[TodoBrief] = []
|
|
|
|
|
|
class ScreenshotListResp(BaseModel):
|
|
items: list[ScreenshotBrief]
|
|
total: int
|
|
page: int
|
|
size: int
|
|
|
|
|
|
class ScreenshotUpdate(BaseModel):
|
|
"""前端更新可写字段。"""
|
|
|
|
category_id: Optional[int] = None
|
|
is_favorite: Optional[bool] = None
|
|
is_hidden: Optional[bool] = None
|
|
tags: Optional[list[str]] = Field(default=None, description="标签名列表,自动新建")
|