Johnntirs's picture
Room Visualizer backend (Docker)
0cdb4e8
Raw
History Blame Contribute Delete
2.21 kB
"""ORM models: upload sessions, room images, and generation records."""
from __future__ import annotations
import datetime as dt
import uuid
from sqlalchemy import DateTime, ForeignKey, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship
from .db import Base
def _uuid() -> str:
return uuid.uuid4().hex
class UploadSession(Base):
"""One upload action containing a gallery of room photos."""
__tablename__ = "upload_sessions"
id: Mapped[str] = mapped_column(String(32), primary_key=True, default=_uuid)
created_at: Mapped[dt.datetime] = mapped_column(DateTime, default=dt.datetime.utcnow)
images: Mapped[list["RoomImage"]] = relationship(
back_populates="session", cascade="all, delete-orphan"
)
class RoomImage(Base):
"""A single normalized room photo belonging to an upload session."""
__tablename__ = "room_images"
id: Mapped[str] = mapped_column(String(32), primary_key=True, default=_uuid)
session_id: Mapped[str] = mapped_column(ForeignKey("upload_sessions.id"))
filename: Mapped[str] = mapped_column(String(255))
path: Mapped[str] = mapped_column(String(512)) # absolute disk path
rel_path: Mapped[str] = mapped_column(String(512)) # path relative to /static
width: Mapped[int] = mapped_column(Integer)
height: Mapped[int] = mapped_column(Integer)
created_at: Mapped[dt.datetime] = mapped_column(DateTime, default=dt.datetime.utcnow)
session: Mapped[UploadSession] = relationship(back_populates="images")
class Generation(Base):
"""A generated (redesigned) room image and its inputs."""
__tablename__ = "generations"
id: Mapped[str] = mapped_column(String(32), primary_key=True, default=_uuid)
session_id: Mapped[str] = mapped_column(String(32))
image_id: Mapped[str] = mapped_column(String(32))
item_ids: Mapped[str] = mapped_column(Text) # comma-separated catalog ids
provider: Mapped[str] = mapped_column(String(32))
output_path: Mapped[str] = mapped_column(String(512))
output_rel_path: Mapped[str] = mapped_column(String(512))
created_at: Mapped[dt.datetime] = mapped_column(DateTime, default=dt.datetime.utcnow)