Coverage for api/users/schema.py: 100.00%
59 statements
« prev ^ index » next coverage.py v7.9.2, created at 2026-01-25 13:05 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2026-01-25 13:05 +0000
1from enum import Enum
2from datetime import datetime
3from core.config import settings
4from typing import List, Optional
5from pydantic import BaseModel, EmailStr, Field
7class UserResponse(BaseModel):
8 id: str = Field(..., description="User ID")
9 email: str = Field(..., description="User email address")
10 first_name: str = Field(..., description="First name")
11 last_name: str = Field(..., description="Last name")
12 phone: str = Field(..., description="Phone number")
13 status: bool = Field(..., description="User status")
14 created_at: datetime = Field(..., description="User creation time")
15 role: Optional[str] = Field(None, description="User role")
17class UserPagination(BaseModel):
18 users: List[UserResponse] = Field(..., description="List of users")
19 total: int = Field(..., description="Total number of users")
20 page: int = Field(..., description="Current page number")
21 per_page: int = Field(..., description="Number of users per page")
22 total_pages: int = Field(..., description="Total number of pages")
24class UserSortBy(str, Enum):
25 FIRST_NAME: str = "first_name"
26 LAST_NAME: str = "last_name"
27 EMAIL: str = "email"
28 PHONE: str = "phone"
29 ROLE: str = "role"
30 STATUS: str = "status"
31 CREATED_AT: str = "created_at"
33class UserCreate(BaseModel):
34 first_name: str = Field(..., min_length=1, max_length=50, description="First name")
35 last_name: str = Field(..., min_length=1, max_length=50, description="Last name")
36 email: EmailStr = Field(..., description="User email address")
37 phone: str = Field(..., min_length=1, max_length=20, description="Phone number")
38 password: str = Field(..., min_length=settings.PASSWORD_MIN_LENGTH, max_length=50, description="Password")
39 status: bool = Field(True, description="User status")
40 role: Optional[str] = Field(None, description="User role")
42class UserUpdate(BaseModel):
43 first_name: Optional[str] = Field(None, min_length=1, max_length=50, description="First name")
44 last_name: Optional[str] = Field(None, min_length=1, max_length=50, description="Last name")
45 email: Optional[EmailStr] = Field(None, description="User email address")
46 phone: Optional[str] = Field(None, min_length=1, max_length=20, description="Phone number")
47 status: Optional[bool] = Field(None, description="User status")
48 role: Optional[str] = Field(None, description="User role")
50class UserDelete(BaseModel):
51 user_ids: List[str] = Field(..., min_items=1, description="List of user IDs to delete")
53class PasswordReset(BaseModel):
54 new_password: str = Field(..., min_length=settings.PASSWORD_MIN_LENGTH, max_length=50, description="New password")
56class UserDeleteResult(BaseModel):
57 user_id: str = Field(..., description="User ID")
58 status: str = Field(..., description="Processing status: success, failed", example="success|failed", pattern="^(success|failed)$")
59 message: str = Field(..., description="Result message")
61class UserDeleteBatchResponse(BaseModel):
62 results: List[UserDeleteResult] = Field(..., description="Individual user deletion results")
63 total_users: int = Field(..., description="Total number of users processed")
64 success_count: int = Field(..., description="Number of successfully deleted users")
65 failed_count: int = Field(..., description="Number of failed deletions")
67user_delete_success_response_example = {
68 "code": 200,
69 "message": "All users deleted successfully",
70 "data": {
71 "results": [
72 {
73 "user_id": "uuid-user-id-1",
74 "status": "success",
75 "message": "User deleted successfully"
76 },
77 {
78 "user_id": "uuid-user-id-2",
79 "status": "success",
80 "message": "User deleted successfully"
81 }
82 ],
83 "total_users": 2,
84 "success_count": 2,
85 "failed_count": 0
86 }
87}
89user_delete_partial_response_example = {
90 "code": 207,
91 "message": "Users deleted with partial success",
92 "data": {
93 "results": [
94 {
95 "user_id": "uuid-user-id-1",
96 "status": "success",
97 "message": "User deleted successfully"
98 },
99 {
100 "user_id": "uuid-user-id-2",
101 "status": "failed",
102 "message": "User not found"
103 }
104 ],
105 "total_users": 2,
106 "success_count": 1,
107 "failed_count": 1
108 }
109}
111user_delete_failed_response_example = {
112 "code": 400,
113 "message": "All users failed to delete",
114 "data": {
115 "results": [
116 {
117 "user_id": "uuid-user-id-1",
118 "status": "failed",
119 "message": "User not found"
120 }
121 ],
122 "total_users": 1,
123 "success_count": 0,
124 "failed_count": 1
125 }
126}