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

1import uuid 

2from typing import TYPE_CHECKING 

3 

4from sqlmodel import Field, Relationship, SQLModel 

5 

6if TYPE_CHECKING: 

7 from cstlcore.memberships.models import ConstellationMembership 

8 from cstlcore.ydocs.models import YDoc 

9 

10 

11class UserBase(SQLModel): 

12 email: str = Field(index=True, unique=True) 

13 name: str 

14 

15 

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 

20 

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 ) 

26 

27 

28class UserPublic(UserBase): 

29 id: uuid.UUID 

30 

31 

32class UserCreate(UserBase): 

33 password: str 

34 

35 

36class UserUpdate(UserBase): 

37 email: str | None = None 

38 name: str | None = None 

39 password: str | None = None