from __future__ import annotations from datetime import datetime from typing import Optional from pydantic import BaseModel, HttpUrl class BookmarkCreate(BaseModel): url: str title: str description: str = "" context: str = "" user_tags: list[str] = [] class BookmarkUpdate(BaseModel): title: Optional[str] = None description: Optional[str] = None context: Optional[str] = None user_tags: Optional[list[str]] = None class BookmarkResponse(BaseModel): id: int url: str title: str description: str context: str folder_path: str domain: str auto_tags: list[str] user_tags: list[str] content_snippet: str created_at: str updated_at: str visit_count: int is_dead: bool class SearchResult(BaseModel): bookmark: BookmarkResponse score: float match_type: str class SearchResponse(BaseModel): results: list[SearchResult] query: str total: int class ImportResult(BaseModel): imported: int skipped: int errors: int class TagCount(BaseModel): tag: str count: int class StatsResponse(BaseModel): total_bookmarks: int total_tags: int top_domains: list[dict] dead_links: int recent_bookmarks: list[BookmarkResponse]