Spaces:
Sleeping
Sleeping
File size: 1,997 Bytes
c6537a8 | 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 | from datetime import datetime
from typing import List, Optional
from bson import ObjectId
from pydantic import BaseModel, Field
from app.models.user import PyObjectId
class UserProfile(BaseModel):
class Config:
allow_population_by_field_name = True
arbitrary_types_allowed = True
json_encoders = {ObjectId: str}
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
user_id: PyObjectId
knowledge_level: Optional[str] = None
timezone: Optional[str] = None
cyber_role: Optional[str] = None
organization_type: Optional[str] = None
primary_domains: List[str] = []
certifications: List[str] = []
tools_stack: List[str] = []
compliance_focus: Optional[str] = None
current_goals: Optional[str] = None
learning_preferences: Optional[str] = None
advisor_notes: Optional[str] = None
updated_at: datetime = Field(default_factory=datetime.utcnow)
class UserProfileUpdate(BaseModel):
knowledge_level: Optional[str] = None
timezone: Optional[str] = None
cyber_role: Optional[str] = None
organization_type: Optional[str] = None
primary_domains: Optional[List[str]] = None
certifications: Optional[List[str]] = None
tools_stack: Optional[List[str]] = None
compliance_focus: Optional[str] = None
current_goals: Optional[str] = None
learning_preferences: Optional[str] = None
advisor_notes: Optional[str] = None
class UserProfileResponse(BaseModel):
user_id: str
knowledge_level: Optional[str] = None
timezone: Optional[str] = None
cyber_role: Optional[str] = None
organization_type: Optional[str] = None
primary_domains: List[str] = []
certifications: List[str] = []
tools_stack: List[str] = []
compliance_focus: Optional[str] = None
current_goals: Optional[str] = None
learning_preferences: Optional[str] = None
advisor_notes: Optional[str] = None
updated_at: Optional[datetime] = None
completion_pct: int = 0
|