NeonClary
Fix LLM chat startup and polish cybersecurity advisor UI.
689d159
Raw
History Blame Contribute Delete
2 kB
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