Coverage for src/cstlcore/collections/models.py: 100%

34 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2026-02-19 12:46 +0000

1import uuid 

2from datetime import datetime 

3 

4from sqlmodel import TIMESTAMP, Column, Field, Relationship, SQLModel, text 

5 

6from cstlcore.constellations.models import Constellation 

7from cstlcore.maps.models import Map 

8from cstlcore.ydocs.models import YDoc, YDocPublic 

9 

10 

11class CollectionBase(SQLModel): 

12 name: str = Field(index=True, nullable=False) 

13 description: str | None = Field(default=None, nullable=True) 

14 

15 

16class Collection(CollectionBase, table=True): 

17 id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) 

18 constellation_id: uuid.UUID = Field( 

19 foreign_key="constellation.id", index=True, nullable=False, ondelete="CASCADE" 

20 ) 

21 

22 created_at: datetime | None = Field( 

23 default=None, 

24 sa_column=Column( 

25 TIMESTAMP(timezone=True), 

26 nullable=False, 

27 server_default=text("CURRENT_TIMESTAMP"), 

28 ), 

29 ) 

30 

31 constellation: "Constellation" = Relationship(back_populates="collections") 

32 files: list["YDoc"] = Relationship(back_populates="collection", cascade_delete=True) 

33 maps: list["Map"] = Relationship(back_populates="collection", cascade_delete=True) 

34 

35 

36class CollectionPublic(CollectionBase): 

37 id: uuid.UUID 

38 constellation_id: uuid.UUID 

39 

40 

41class CollectionCreate(CollectionBase): 

42 pass 

43 

44 

45class CollectionUpdate(SQLModel): 

46 name: str | None = None 

47 description: str | None = None 

48 

49 

50class CollectionWithYdocsPublic(SQLModel): 

51 id: uuid.UUID 

52 files: list["YDocPublic"] = [] 

53 

54 

55class CollectionDetailedPublic(SQLModel): 

56 id: uuid.UUID 

57 name: str 

58 description: str | None = None 

59 constellation_id: uuid.UUID 

60 files: list["YDocPublic"] = [] 

61 maps: list["Map"] = []