42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
from typing import Optional, List
|
|
from sqlmodel import Field, Relationship, SQLModel, create_engine
|
|
|
|
class ThingTagLink(SQLModel, table=True):
|
|
thing_id: Optional[int] = Field(
|
|
default=None, foreign_key="thing.id", primary_key=True
|
|
)
|
|
tag_id: Optional[int] = Field(
|
|
default=None, foreign_key="tag.id", primary_key=True
|
|
)
|
|
class Thing(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
name: str
|
|
serial_no: str
|
|
description: str
|
|
count: int
|
|
|
|
attachments: List["Attachment"] = Relationship(back_populates="thing")
|
|
tags: List["Tag"] = Relationship(back_populates="thing", link_model=ThingTagLink)
|
|
class Tag(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
tag: str
|
|
things: List["Thing"] = Relationship(back_populates="thing", link_model=ThingTagLink)
|
|
class Attachment(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
name: str
|
|
path: str
|
|
|
|
thing_id: Optional[int] = Field(default=None, foreign_key="thing.id")
|
|
thing: Optional[Thing] = Relationship(back_populates="attachments")
|
|
sqlite_file_name = "poka-ijo.db"
|
|
sqlite_url = f"sqlite:///{sqlite_file_name}"
|
|
|
|
_engine = create_engine(sqlite_url, echo=True)
|
|
|
|
def engine():
|
|
return _engine
|
|
|
|
def create_db_and_tables():
|
|
SQLModel.metadata.create_all(engine())
|
|
return engine()
|