All checks were successful
PostgreSQL Compatibility Matrix / PG14 smoke (pull_request) Successful in 12s
PostgreSQL Compatibility Matrix / PG15 smoke (pull_request) Successful in 11s
PostgreSQL Compatibility Matrix / PG16 smoke (pull_request) Successful in 9s
PostgreSQL Compatibility Matrix / PG17 smoke (pull_request) Successful in 10s
PostgreSQL Compatibility Matrix / PG18 smoke (pull_request) Successful in 11s
This commit introduces optional `first_name` and `last_name` fields to the user model, including database migrations, backend, and frontend support. It enhances user profiles, updates user creation and editing flows, and refines the UI to display full names where available.
42 lines
973 B
Python
42 lines
973 B
Python
from datetime import datetime
|
|
from pydantic import BaseModel, EmailStr, field_validator
|
|
|
|
|
|
class UserOut(BaseModel):
|
|
id: int
|
|
email: EmailStr
|
|
first_name: str | None = None
|
|
last_name: str | None = None
|
|
role: str
|
|
created_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class UserCreate(BaseModel):
|
|
email: EmailStr
|
|
first_name: str | None = None
|
|
last_name: str | None = None
|
|
password: str
|
|
role: str = "viewer"
|
|
|
|
|
|
class UserUpdate(BaseModel):
|
|
email: EmailStr | None = None
|
|
first_name: str | None = None
|
|
last_name: str | None = None
|
|
password: str | None = None
|
|
role: str | None = None
|
|
|
|
|
|
class UserPasswordChange(BaseModel):
|
|
current_password: str
|
|
new_password: str
|
|
|
|
@field_validator("new_password")
|
|
@classmethod
|
|
def validate_new_password(cls, value: str) -> str:
|
|
if len(value) < 8:
|
|
raise ValueError("new_password must be at least 8 characters")
|
|
return value
|