fooder-api/fooder/domain/user_product_usage.py

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]