File size: 1,828 Bytes
9df97a2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | from pydantic import BaseModel
from typing import List, Optional
from enum import Enum
class UserRoleFilter(str, Enum):
admin = "admin"
recruiter = "recruiter"
candidate = "candidate"
class ModerationStatusEnum(str, Enum):
pending = "pending"
approved = "approved"
rejected = "rejected"
# ββ User admin schemas ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class AdminUserResponse(BaseModel):
id: int
email: str
full_name: str
role: str
is_active: bool
created_at: str
class Config:
from_attributes = True
class PaginatedUsersResponse(BaseModel):
total: int
items: List[AdminUserResponse]
class UserStatusUpdate(BaseModel):
is_active: bool
# ββ Job admin schemas βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class AdminJobResponse(BaseModel):
id: int
title: str
description: Optional[str]
moderation_status: str
recruiter_id: int
recruiter_email: Optional[str]
created_at: str
class Config:
from_attributes = True
class PaginatedJobsResponse(BaseModel):
total: int
items: List[AdminJobResponse]
class JobModerationUpdate(BaseModel):
moderation_status: ModerationStatusEnum
# ββ Stats schema ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class AdminStatsResponse(BaseModel):
total_candidates: int
total_recruiters: int
total_active_jobs: int
total_matchings: int
|