Spaces:
Sleeping
Sleeping
File size: 2,652 Bytes
5ccd893 | 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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | """
Auth Data Models
Defines authentication and user data structures
"""
from dataclasses import dataclass, field
from typing import Optional, Dict, Any, List
from datetime import datetime
@dataclass
class LoginRequest:
"""Login request parameters"""
email: str
password: str
def validate(self) -> List[str]:
errors = []
if not self.email or not self.email.strip():
errors.append("Email is required")
elif "@" not in self.email:
errors.append("Invalid email format")
if not self.password or len(self.password) < 6:
errors.append("Password must be at least 6 characters")
return errors
@dataclass
class SignUpRequest:
"""Sign-up request parameters"""
email: str
password: str
full_name: str
organization: Optional[str] = None
purpose: Optional[str] = None
def validate(self) -> List[str]:
errors = []
if not self.email or not self.email.strip():
errors.append("Email is required")
elif "@" not in self.email:
errors.append("Invalid email format")
if not self.password or len(self.password) < 6:
errors.append("Password must be at least 6 characters")
if not self.full_name or not self.full_name.strip():
errors.append("Full name is required")
return errors
@dataclass
class ProfileUpdate:
"""Profile update parameters"""
full_name: Optional[str] = None
organization: Optional[str] = None
purpose: Optional[str] = None
def to_dict(self) -> Dict[str, Any]:
"""Return only non-None fields"""
d = {}
if self.full_name is not None:
d["full_name"] = self.full_name
if self.organization is not None:
d["organization"] = self.organization
if self.purpose is not None:
d["purpose"] = self.purpose
return d
VALID_ACTIVITY_TYPES = [
"login", "logout", "signup",
"prediction_run", "weather_forecast",
"chatbot_query", "profile_update",
"settings_change", "dataset_view",
]
@dataclass
class ActivityLogEntry:
"""Activity log entry"""
activity_type: str
description: Optional[str] = None
metadata: Optional[Dict[str, Any]] = None
device_info: Optional[str] = None
def validate(self) -> List[str]:
errors = []
if not self.activity_type:
errors.append("activity_type is required")
elif self.activity_type not in VALID_ACTIVITY_TYPES:
errors.append(f"Invalid activity_type. Must be one of: {', '.join(VALID_ACTIVITY_TYPES)}")
return errors
|