"""Admin domain Pydantic schemas."""
from __future__ import annotations
from typing import TYPE_CHECKING
from pydantic import BaseModel, ConfigDict, EmailStr
if TYPE_CHECKING:
import datetime
from uuid import UUID
from pydotorg.domains.users.models import EmailPrivacy, SearchVisibility
[docs]
class DashboardStats(BaseModel):
"""Dashboard statistics schema."""
total_users: int
active_users: int
staff_users: int
total_jobs: int
pending_jobs: int
approved_jobs: int
total_events: int
upcoming_events: int
total_sponsors: int
active_sponsors: int
model_config = ConfigDict(from_attributes=True)
[docs]
class PendingModeration(BaseModel):
"""Pending moderation items summary."""
pending_jobs_count: int
pending_events_count: int
pending_sponsors_count: int
recent_signups_count: int
model_config = ConfigDict(from_attributes=True)
[docs]
class RecentActivity(BaseModel):
"""Recent activity item."""
id: UUID
activity_type: str
description: str
timestamp: datetime.datetime
user_id: UUID | None = None
username: str | None = None
model_config = ConfigDict(from_attributes=True)
[docs]
class AdminUserRead(BaseModel):
"""Full user data schema for admin panel."""
id: UUID
username: str
email: EmailStr
first_name: str
last_name: str
is_active: bool
is_staff: bool
is_superuser: bool
email_verified: bool
oauth_provider: str | None
oauth_id: str | None
date_joined: datetime.datetime
last_login: datetime.datetime | None
bio: str
search_visibility: SearchVisibility
email_privacy: EmailPrivacy
public_profile: bool
created_at: datetime.datetime
updated_at: datetime.datetime
model_config = ConfigDict(from_attributes=True)
@property
def full_name(self) -> str:
"""Get the user's full name."""
return f"{self.first_name} {self.last_name}".strip()
[docs]
class UserStaffUpdate(BaseModel):
"""Schema for updating user staff/admin status."""
is_active: bool | None = None
is_staff: bool | None = None
is_superuser: bool | None = None
model_config = ConfigDict(from_attributes=True)
[docs]
class SystemInfo(BaseModel):
"""System information schema."""
python_version: str
litestar_version: str
database_version: str
total_database_size: str | None
cache_status: str
uptime: str
model_config = ConfigDict(from_attributes=True)
def _rebuild_models() -> None:
"""Rebuild models to resolve forward references."""
import datetime as _datetime
from uuid import UUID as _UUID
from pydotorg.domains.users.models import EmailPrivacy as _EmailPrivacy
from pydotorg.domains.users.models import SearchVisibility as _SearchVisibility
_types = {
"UUID": _UUID,
"datetime": _datetime,
"EmailPrivacy": _EmailPrivacy,
"SearchVisibility": _SearchVisibility,
}
RecentActivity.model_rebuild(_types_namespace=_types)
AdminUserRead.model_rebuild(_types_namespace=_types)
_rebuild_models()