Files
congsh 5c028d7952 Initial commit: snapAna 截图智能整理工具
包含 FastAPI 后端、React 前端、队列/OCR/标签/待办等完整功能。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 15:45:50 +08:00

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="标签名列表,自动新建")