2025-12-04 10:04:21 +08:00

89 lines
2.0 KiB
Python

from datetime import datetime
from typing import List, Optional
from pydantic import EmailStr, Field
from app.models.schemas.rwschema import RWSchema
class AdminRoleLite(RWSchema):
id: int
name: str
description: str = ""
permissions: List[str] = Field(default_factory=list)
class AdminUserSummary(RWSchema):
id: int
username: str
email: EmailStr
bio: Optional[str] = None
image: Optional[str] = None
roles: List[AdminRoleLite] = Field(default_factory=list)
created_at: datetime
updated_at: datetime
class AdminUserCreate(RWSchema):
username: str
email: EmailStr
password: str = Field(min_length=6, max_length=64)
bio: Optional[str] = None
image: Optional[str] = None
role_ids: List[int] = Field(default_factory=list)
class AdminUserUpdate(RWSchema):
username: Optional[str] = None
email: Optional[EmailStr] = None
password: Optional[str] = Field(default=None, min_length=6, max_length=64)
bio: Optional[str] = None
image: Optional[str] = None
role_ids: Optional[List[int]] = None
class AdminUserResponse(RWSchema):
user: AdminUserSummary
class AdminUserListResponse(RWSchema):
users: List[AdminUserSummary]
total: int
class AdminDashboardStats(RWSchema):
users: int
roles: int
articles: int
total_views: int
published_today: int
class AdminMenuSlot(RWSchema):
slot_key: str = Field(..., alias="slotKey")
label: str
tags: List[str] = Field(default_factory=list)
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
class AdminMenuSlotUpdate(RWSchema):
tags: List[str] = Field(default_factory=list)
label: Optional[str] = None
class AdminMenuSlotResponse(RWSchema):
slot: AdminMenuSlot
class AdminMenuSlotListResponse(RWSchema):
slots: List[AdminMenuSlot] = Field(default_factory=list)
class AdminHomeFeaturedItem(RWSchema):
slug: str
class AdminHomeFeaturedUpdate(RWSchema):
articles: List[AdminHomeFeaturedItem] = Field(default_factory=list)