Coverage for src/cstlcore/users/models.py: 91%
23 statements
« prev ^ index » next coverage.py v7.9.1, created at 2026-02-19 12:46 +0000
« prev ^ index » next coverage.py v7.9.1, created at 2026-02-19 12:46 +0000
1import uuid
2from typing import TYPE_CHECKING
4from sqlmodel import Field, Relationship, SQLModel
6if TYPE_CHECKING:
7 from cstlcore.memberships.models import ConstellationMembership
8 from cstlcore.ydocs.models import YDoc
11class UserBase(SQLModel):
12 email: str = Field(index=True, unique=True)
13 name: str
16class User(UserBase, table=True):
17 id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
18 password_hash: str
19 email_verified: bool = False
21 memberships: list["ConstellationMembership"] = Relationship(back_populates="user")
22 owned_files: list["YDoc"] = Relationship(
23 back_populates="owner",
24 sa_relationship_kwargs={"lazy": "selectin"},
25 )
28class UserPublic(UserBase):
29 id: uuid.UUID
32class UserCreate(UserBase):
33 password: str
36class UserUpdate(UserBase):
37 email: str | None = None
38 name: str | None = None
39 password: str | None = None