diff --git a/src/govoplan_campaign/backend/schemas.py b/src/govoplan_campaign/backend/schemas.py index e1adc07..056f371 100644 --- a/src/govoplan_campaign/backend/schemas.py +++ b/src/govoplan_campaign/backend/schemas.py @@ -597,6 +597,7 @@ class AppendSentRequest(BaseModel): class CampaignActionResponse(BaseModel): result: dict[str, Any] + class ReportEmailRequest(BaseModel): model_config = ConfigDict(extra="forbid") @@ -610,111 +611,3 @@ class ReportEmailRequest(BaseModel): class ReportEmailResponse(BaseModel): result: dict[str, Any] - - -class AuditLogItemResponse(BaseModel): - model_config = ConfigDict(from_attributes=True) - - id: str - tenant_id: str | None = None - user_id: str | None = None - api_key_id: str | None = None - action: str - object_type: str | None = None - object_id: str | None = None - details: dict[str, Any] | None = None - created_at: datetime - - -class AuditLogListResponse(BaseModel): - items: list[AuditLogItemResponse] - - - -class LoginRequest(BaseModel): - model_config = ConfigDict(extra="forbid") - - email: str - password: str - # Kept optional for backwards compatibility and future tenant-switch login flows. - # The WebUI no longer sends it. If omitted, the backend resolves the user by email. - tenant_slug: str | None = None - - - - -class SwitchTenantRequest(BaseModel): - model_config = ConfigDict(extra="forbid") - - tenant_id: str - - -class TenantInfo(BaseModel): - id: str - slug: str - name: str - is_active: bool = True - default_locale: str = "en" - - -class TenantMembershipInfo(TenantInfo): - roles: list[str] = Field(default_factory=list) - is_active: bool = True - - -class UserInfo(BaseModel): - id: str - account_id: str - email: str - # Global account identity used by the title bar and account settings. - display_name: str | None = None - # Optional tenant-local alias used in tenant administration and ownership. - tenant_display_name: str | None = None - is_tenant_admin: bool = False - password_reset_required: bool = False - - -class ProfileUpdateRequest(BaseModel): - model_config = ConfigDict(extra="forbid") - - display_name: str | None = Field(default=None, max_length=255) - tenant_display_name: str | None = Field(default=None, max_length=255) - - -class RoleInfo(BaseModel): - id: str - slug: str - name: str - permissions: list[str] = Field(default_factory=list) - level: Literal["tenant", "system"] = "tenant" - - -class GroupInfo(BaseModel): - id: str - slug: str - name: str - - -class LoginResponse(BaseModel): - access_token: str - token_type: str = "bearer" - expires_at: datetime - user: UserInfo - # Backwards-compatible alias for the active tenant. - tenant: TenantInfo - active_tenant: TenantInfo - tenants: list[TenantMembershipInfo] = Field(default_factory=list) - scopes: list[str] - roles: list[RoleInfo] = Field(default_factory=list) - groups: list[GroupInfo] = Field(default_factory=list) - - -class MeResponse(BaseModel): - user: UserInfo - # Backwards-compatible alias for the active tenant. - tenant: TenantInfo - active_tenant: TenantInfo - tenants: list[TenantMembershipInfo] = Field(default_factory=list) - scopes: list[str] - roles: list[RoleInfo] = Field(default_factory=list) - groups: list[GroupInfo] = Field(default_factory=list)