23 lines
950 B
Python
23 lines
950 B
Python
from sqlalchemy import ForeignKey, Index, Integer, UniqueConstraint
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from fooder.domain.base import Base, CommonMixin
|
|
from fooder.domain.product import Product
|
|
from fooder.domain.user import User
|
|
|
|
|
|
class UserProductUsage(Base, CommonMixin):
|
|
"""Counts how many processed entries a user has for a product.
|
|
Used to sort products by usage frequency."""
|
|
|
|
__table_args__ = (
|
|
UniqueConstraint("user_id", "product_id"),
|
|
# Covers outerjoin on (product_id, user_id) in list_for_user
|
|
Index("ix_userproductusage_product_user", "product_id", "user_id"),
|
|
)
|
|
|
|
product_id: Mapped[int] = mapped_column(Integer, ForeignKey("product.id"))
|
|
product: Mapped[Product] = relationship(lazy="selectin")
|
|
user_id: Mapped[int] = mapped_column(Integer, ForeignKey("user.id"), index=True)
|
|
user: Mapped[User] = relationship(lazy="selectin")
|
|
count: Mapped[int]
|