Files
Cloud-Tour-to-Libo/app/contracts.py
T
xuelong 3dd5731751 feat: streamline platform and secure data access
- move the relational data center to MySQL and a standalone workbench\n- add Interface Center API credentials, policies, logs, and DBeaver SSH guidance\n- harden authentication and deployment while retiring unused management surfaces
2026-08-25 02:06:28 -07:00

61 lines
1.7 KiB
Python

"""Pydantic request/response models."""
from __future__ import annotations
from pydantic import BaseModel, Field
# ── Auth ─────────────────────────────────────────────────────────────────────
class LoginRequest(BaseModel):
username: str = Field(min_length=3, max_length=120)
password: str = Field(min_length=1, max_length=72)
class TokenResponse(BaseModel):
access_token: str
token_type: str = "bearer"
# ── RBAC & Accounts (P1) ─────────────────────────────────────────────────────
class RoleCreate(BaseModel):
role_key: str = Field(pattern=r"^[a-z][a-z0-9_]{1,30}$")
label: str
description: str | None = None
sort_order: int | None = None
class RoleUpdate(BaseModel):
label: str | None = None
description: str | None = None
sort_order: int | None = None
class CapabilityCreate(BaseModel):
cap_key: str = Field(pattern=r"^[a-z][a-z0-9_]{1,40}$")
label: str
sort_order: int | None = None
class RoleCapCell(BaseModel):
role_key: str
cap_key: str
value: str
class UserCreate(BaseModel):
username: str = Field(min_length=3, max_length=120)
password: str = Field(min_length=12, max_length=72)
full_name: str | None = None
phone: str | None = None
status: str | None = None
roles: list[str] = []
class UserUpdate(BaseModel):
full_name: str | None = None
phone: str | None = None
status: str | None = None
password: str | None = Field(default=None, min_length=12, max_length=72)
roles: list[str] | None = None