from pydantic import BaseModel, EmailStr, Field from datetime import datetime from typing import Optional, List from enum import Enum class UserRole(str, Enum): SYSTEM_ADMIN = "system_admin" GROUP_ADMIN = "group_admin" USER = "user" class UserBase(BaseModel): email: EmailStr username: Optional[str] = None full_name: Optional[str] = None role: UserRole = UserRole.USER is_active: bool = True phone_number: Optional[str] = None birth_date: Optional[str] = None gender: Optional[str] = None profile_picture: Optional[str] = None organization: Optional[str] = None class UserCreate(BaseModel): email: EmailStr password: str name: str organization: Optional[str] = None class UserUpdate(BaseModel): full_name: Optional[str] = None phone_number: Optional[str] = None birth_date: Optional[str] = None gender: Optional[str] = None profile_picture: Optional[str] = None class UserInDB(UserBase): id: str = Field(alias="_id") hashed_password: str created_at: datetime updated_at: datetime last_login: Optional[datetime] = None class Config: populate_by_name = True class User(UserBase): id: str created_at: datetime updated_at: datetime last_login: Optional[datetime] = None class UserPermissions(BaseModel): single_sign_on: bool = True share_name: bool = True share_gender: bool = False share_birth_date: bool = False share_email: bool = True share_phone: bool = False