89 lines
2.0 KiB
Python
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)
|