fix: add missing relationship stubs to resolve SQLAlchemy mapper errors

- Purchase.user relationship to satisfy User.purchases back_populates
- Store.user_accounts relationship to satisfy UserStoreAccount.store back_populates

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-05-04 18:36:22 +00:00
committed by Coupon Carl [agent]
parent fe0a7fac3e
commit e119f4d0ce
2 changed files with 16 additions and 2 deletions
@@ -9,6 +9,8 @@ import uuid
from datetime import date, datetime
from decimal import Decimal
from typing import TYPE_CHECKING
from sqlalchemy import (
JSON,
Date,
@@ -20,10 +22,13 @@ from sqlalchemy import (
UniqueConstraint,
func,
)
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.orm import Mapped, mapped_column, relationship
from receiptwitness.shared.models.base import Base, TimestampMixin, UUIDPrimaryKeyMixin
if TYPE_CHECKING:
from receiptwitness.shared.models.user import User
class Purchase(UUIDPrimaryKeyMixin, TimestampMixin, Base):
"""Stub: a shopping trip/receipt. Full definition in cartsnitch/common."""
@@ -52,6 +57,8 @@ class Purchase(UUIDPrimaryKeyMixin, TimestampMixin, Base):
UniqueConstraint("user_id", "store_id", "receipt_id", name="uq_purchase_receipt"),
)
user: Mapped["User"] = relationship(back_populates="purchases")
class PurchaseItem(UUIDPrimaryKeyMixin, TimestampMixin, Base):
"""Stub: a line item on a receipt. Full definition in cartsnitch/common."""
@@ -7,12 +7,17 @@ UserStoreAccount. The canonical definitions live in cartsnitch/common.
import uuid
from typing import TYPE_CHECKING
from sqlalchemy import Float, ForeignKey, String
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.orm import Mapped, mapped_column, relationship
from receiptwitness.shared.constants import StoreSlug
from receiptwitness.shared.models.base import Base, TimestampMixin, UUIDPrimaryKeyMixin
if TYPE_CHECKING:
from receiptwitness.shared.models.user import UserStoreAccount
class Store(UUIDPrimaryKeyMixin, TimestampMixin, Base):
"""Stub: canonical retailer. Full definition in cartsnitch/common."""
@@ -24,6 +29,8 @@ class Store(UUIDPrimaryKeyMixin, TimestampMixin, Base):
logo_url: Mapped[str | None] = mapped_column(String(500))
website_url: Mapped[str | None] = mapped_column(String(500))
user_accounts: Mapped[list["UserStoreAccount"]] = relationship(back_populates="store")
class StoreLocation(UUIDPrimaryKeyMixin, TimestampMixin, Base):
"""Stub: physical store location. Full definition in cartsnitch/common."""