summaryrefslogtreecommitdiff
path: root/app/models.py
blob: 5b61045a96b8e66d27bf201b5ed58ae45f230359 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# -*- mode: python; -*-


from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import func

from flask_login import UserMixin

db = SQLAlchemy()


class User(UserMixin, db.Model):
    """UserMixin inheritance required for features described here:

    https://stackoverflow.com/questions/63231163/what-is-the-usermixin-in-flask"""

    __tablename__ = "User"

    def get_id(self):
        return self.primary_key

    primary_key = db.Column("UserId", db.Integer, primary_key=True)
    username = db.Column("Username", db.String(20), nullable=False)
    hashed_password = db.Column("HashedPassword", db.String(100), nullable=False)
    name_first = db.Column("NameFirst", db.String(20), nullable=False)
    name_last = db.Column("NameLast", db.String(20), nullable=False)
    date_time_created = db.Column(
        "DateTimeCreated", db.String, server_default=func.now()
    )
    date_time_updated = db.Column(
        "DateTimeUpdated", db.String, server_onupdate=func.now()
    )
    downloads = db.relationship("Download", back_populates="user")

    def __repr__(self):
        return f"<User {self.name_first} {self.name_last}>"


class Download(db.Model):
    """One record per file downloaded."""

    __tablename__ = "Download"
    primary_key = db.Column("DownloadId", db.Integer, primary_key=True)
    title = db.Column("Title", db.String(20), nullable=False)
    url = db.Column("URL", db.String, nullable=False)
    date_time_downloaded = db.Column(
        "DateTimeDownloaded", db.String, server_default=func.now()
    )
    user_id = db.Column("UserId", db.Integer, db.ForeignKey("User.UserId"))
    user = db.relationship("User", back_populates="downloads")

    def __init__(
        self,
        title,
        url,
        user_id,
    ):
        self.title = title
        self.url = url
        self.user_id = user_id

    def __repr__(self):
        return f"<Download {self.user.title} for {self.user.first_name} downloaded {self.date_time_downloaded}>"
Copyright 2019--2024 Marius PETER