Spaces:
Running
Running
| from __future__ import annotations | |
| import uuid | |
| from dataclasses import dataclass, field | |
| from datetime import datetime, timezone | |
| from typing import Optional | |
| def _utcnow() -> datetime: | |
| return datetime.now(timezone.utc) | |
| def _uuid() -> str: | |
| return str(uuid.uuid4()) | |
| class User: | |
| id: str = field(default_factory=_uuid) | |
| email: str = "" | |
| username: Optional[str] = None | |
| full_name: Optional[str] = None | |
| password_hash: str = "" | |
| is_active: bool = True | |
| is_verified: bool = False | |
| failed_login_attempts: int = 0 | |
| locked_until: Optional[datetime] = None | |
| last_login: Optional[datetime] = None | |
| password_changed_at: Optional[datetime] = None | |
| created_at: datetime = field(default_factory=_utcnow) | |
| updated_at: datetime = field(default_factory=_utcnow) | |
| deleted_at: Optional[datetime] = None | |
| roles: list[str] = field(default_factory=list) | |
| class RefreshSession: | |
| id: str = field(default_factory=_uuid) | |
| user_id: str = "" | |
| token_key: str = "" | |
| token_hash: str = "" | |
| device_info: Optional[str] = None | |
| ip_address: Optional[str] = None | |
| expires_at: Optional[datetime] = None | |
| revoked_at: Optional[datetime] = None | |
| created_at: datetime = field(default_factory=_utcnow) | |
| updated_at: datetime = field(default_factory=_utcnow) | |
| class Role: | |
| id: str = field(default_factory=_uuid) | |
| name: str = "" | |
| description: Optional[str] = None | |
| permissions: list[str] = field(default_factory=list) | |
| class Permission: | |
| id: str = field(default_factory=_uuid) | |
| code: str = "" | |
| description: Optional[str] = None | |