from typing import Optional, List from ..base_doc import BaseDoc from .constants import UserAccountProperty from backend.models.permission.constants import ( AdministrativeRole, Capability, ) from datetime import datetime from common.constants.region import UserRegion from .constants import AuthType class UserAccountDoc(BaseDoc): profile_id: Optional[str] account_id: Optional[str] service_plan_id: Optional[str] properties: UserAccountProperty capabilities: Capability user_role: int = AdministrativeRole.NONE preferred_region: UserRegion = UserRegion.ZH_CN class Settings: name = "user_account" class UserPasswordDoc(BaseDoc): user_id: str password: str class Settings: name = "user_password" class UserEmailDoc(BaseDoc): user_id: str email: str class Settings: name = "user_email" class UserMobileDoc(BaseDoc): user_id: str mobile: str class Settings: name = "user_mobile" class AuthCodeDoc(BaseDoc): auth_code: str method: str method_type: AuthType expiry: datetime used: bool = False class Settings: name = "user_auth_code" class UsageLogDoc(BaseDoc): timestamp: datetime = datetime.utcnow() # timestamp tenant_id: str # tenant id operation: str # operation type request_id: str # request id # TODO: use true one status: str # operation status latency_ms: int # latency time(milliseconds) bytes_in: int # input bytes bytes_out: int # output bytes key_id: Optional[str] = None # API Key ID extra: dict = {} # extra information class Settings: name = "usage_log_doc" indexes = [ "tenant_id", "request_id", "key_id" ]