""" web/models.py — Pydantic request/response schemas. """ import re from typing import Literal from pydantic import BaseModel, field_validator # ─── Auth ───────────────────────────────────────────────────────────────────── class LoginRequest(BaseModel): username: str password: str # ─── Keyword groups ─────────────────────────────────────────────────────────── class PatternEntry(BaseModel): regex: str label: str @field_validator("regex") @classmethod def regex_must_compile(cls, v: str) -> str: try: re.compile(v, re.IGNORECASE) except re.error as e: raise ValueError(f"Invalid regex: {e}") from e return v class KeywordGroup(BaseModel): id: str name: str patterns: list[PatternEntry] class KeywordGroupsPayload(BaseModel): groups: list[KeywordGroup] # ─── Channels ───────────────────────────────────────────────────────────────── class ChannelsPayload(BaseModel): channels: list[str | int] # ─── Users ─────────────────────────────────────────────────────────────────── Role = Literal["superadmin", "admin", "reader"] class CreateUserRequest(BaseModel): username: str password: str role: Role class UpdateUserRequest(BaseModel): password: str | None = None role: Role | None = None is_active: bool | None = None