| from pydantic import BaseModel, EmailStr, Field |
| from typing import List, Optional |
| from datetime import datetime, timedelta |
| from zoneinfo import ZoneInfo |
|
|
| |
| PKT = ZoneInfo("Asia/Karachi") |
|
|
| class UserBase(BaseModel): |
| full_name: str |
| phone_number: str |
| email: EmailStr |
|
|
| class UserCreate(UserBase): |
| password: str |
|
|
| class UserInDB(UserBase): |
| id: str = Field(default_factory=str, alias="_id") |
| hashed_password: Optional[str] = None |
| google_id: Optional[str] = None |
| is_verified: bool = False |
| |
| |
| |
| subscription_status: str = "trial" |
| subscription_plan: str = "free_trial" |
| trial_start_date: datetime = Field(default_factory=lambda: datetime.now(PKT)) |
| trial_end_time: datetime = Field(default_factory=lambda: datetime.now(PKT) + timedelta(days=1)) |
| subscription_end_date: Optional[datetime] = None |
| transaction_id: Optional[str] = None |
| device_id: Optional[str] = None |
|
|
| |
| created_at: datetime = Field(default_factory=lambda: datetime.now(PKT)) |
| updated_at: datetime = Field(default_factory=lambda: datetime.now(PKT)) |
|
|
| class UserPublic(UserBase): |
| id: str |
| is_verified: bool |
| |
| subscription_status: Optional[str] = "trial" |
| subscription_plan: Optional[str] = "free_trial" |
| trial_start_date: Optional[datetime] = None |
| trial_end_time: Optional[datetime] = None |
| device_id: Optional[str] = None |
| created_at: datetime |
|
|
| updated_at: datetime |
|
|