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
« prev ^ index » next coverage.py v7.9.1, created at 2026-02-19 12:46 +0000
1import uuid
2from datetime import datetime
4from sqlmodel import TIMESTAMP, Column, Field, Relationship, SQLModel, text
6from cstlcore.constellations.models import Constellation
7from cstlcore.maps.models import Map
8from cstlcore.ydocs.models import YDoc, YDocPublic
11class CollectionBase(SQLModel):
12 name: str = Field(index=True, nullable=False)
13 description: str | None = Field(default=None, nullable=True)
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 )
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 )
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)
36class CollectionPublic(CollectionBase):
37 id: uuid.UUID
38 constellation_id: uuid.UUID
41class CollectionCreate(CollectionBase):
42 pass
45class CollectionUpdate(SQLModel):
46 name: str | None = None
47 description: str | None = None
50class CollectionWithYdocsPublic(SQLModel):
51 id: uuid.UUID
52 files: list["YDocPublic"] = []
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"] = []