feat: add location crud
All checks were successful
Deploy to Production / deploy (push) Successful in 1m2s

This commit is contained in:
魏风
2026-03-12 19:47:41 +08:00
parent f0a0667b84
commit ef93d4e5c2
19 changed files with 1278 additions and 8 deletions

View File

@@ -54,6 +54,7 @@ class User(UserBase, table=True):
sa_type=DateTime(timezone=True), # type: ignore
)
items: list["Item"] = Relationship(back_populates="owner", cascade_delete=True)
locations: list["Location"] = Relationship(back_populates="owner", cascade_delete=True)
# Properties to return via API, id is always required
@@ -108,6 +109,47 @@ class ItemsPublic(SQLModel):
count: int
# Shared properties
class LocationBase(SQLModel):
title: str = Field(min_length=1, max_length=255)
description: str | None = Field(default=None, max_length=255)
# Properties to receive on location creation
class LocationCreate(LocationBase):
pass
# Properties to receive on location update
class LocationUpdate(LocationBase):
title: str | None = Field(default=None, min_length=1, max_length=255) # type: ignore
# Database model, database table inferred from class name
class Location(LocationBase, table=True):
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
created_at: datetime | None = Field(
default_factory=get_datetime_utc,
sa_type=DateTime(timezone=True), # type: ignore
)
owner_id: uuid.UUID = Field(
foreign_key="user.id", nullable=False, ondelete="CASCADE"
)
owner: User | None = Relationship(back_populates="locations")
# Properties to return via API, id is always required
class LocationPublic(LocationBase):
id: uuid.UUID
owner_id: uuid.UUID
created_at: datetime | None = None
class LocationsPublic(SQLModel):
data: list[LocationPublic]
count: int
# Generic message
class Message(SQLModel):
message: str