Coverage for src/model/profile_model.py : 96%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from sqlalchemy import CheckConstraint
2import uuid
4from src import db, bcrypt
5from src.utils import GUID
8class MetaProfileContentModel(db.Model):
9 """
10 MetaProfileContent Model for storing metadata between profile and content
11 """
12 __tablename__ = "meta_profile_content"
14 profile_id = db.Column(db.Integer, db.ForeignKey(
15 "profile.profile_id", ondelete="CASCADE"), primary_key=True)
16 content_id = db.Column(db.Integer, db.ForeignKey(
17 "content.content_id", ondelete="CASCADE"), primary_key=True)
18 rating = db.Column(db.Integer, CheckConstraint(
19 "rating <= 5 and rating >= 0"), default=None)
20 last_rating_date = db.Column(db.DateTime, default=None)
21 review_see_count = db.Column(db.Integer, default=0)
22 last_review_see_date = db.Column(db.DateTime, default=None)
23 # can be play_count, watch_count, num_watched_episodes
24 count = db.Column(db.Integer, default=0)
25 last_count_increment = db.Column(db.DateTime, default=None)
28LikedGenreProfileModel = db.Table("liked_genres_profile",
29 db.Column("profile_id", db.Integer, db.ForeignKey(
30 "profile.profile_id", ondelete="CASCADE"), primary_key=True),
31 db.Column("genre_id", db.Integer, db.ForeignKey(
32 "genre.genre_id", ondelete="CASCADE"), primary_key=True)
33 )
36class ProfileModel(db.Model):
37 """
38 Profile Model for storing profile related details
39 """
40 __tablename__ = "profile"
42 profile_id = db.Column(db.Integer, primary_key=True,
43 autoincrement=True, index=True)
44 uuid = db.Column(GUID(), default=uuid.uuid4, unique=True)
45 profilename = db.Column(db.String(45), nullable=False)
46 user_id = db.Column(db.Integer, db.ForeignKey(
47 "user.user_id", ondelete="CASCADE"), nullable=False)
49 # Loaded immediately after loading Profile, but when querying multiple profiles, you will not get additional queries.
50 meta_profile_contents = db.relationship(
51 "MetaProfileContentModel", lazy="subquery")
53 liked_genres = db.relationship(
54 "GenreModel", secondary=LikedGenreProfileModel, lazy="dynamic")
56 def __repr__(self):
57 return f"<Profile {self.profilename}>"