Spaces:
Sleeping
Sleeping
| """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) | |