File size: 2,150 Bytes
615e7f5
f219df8
 
 
 
615e7f5
 
bd591aa
f219df8
615e7f5
4ae4100
f219df8
615e7f5
 
f219df8
 
 
 
 
 
 
 
 
 
 
 
 
bd591aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
64
from flask_dance.consumer.storage.sqla import OAuthConsumerMixin
from flask_login import UserMixin

from .extensions import db


class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), unique=True, nullable=False)
    name = db.Column(db.String(100), nullable=False)
    is_admin = db.Column(db.Boolean, default=False, nullable=False)


class OAuth(OAuthConsumerMixin, db.Model):
    __table_args__ = (
        db.UniqueConstraint(
            "provider", "provider_user_id", name="uq_oauth_provider_user"
        ),
    )

    user_id = db.Column(db.Integer, db.ForeignKey(User.id), nullable=False)
    provider_user_id = db.Column(db.String(256), nullable=False)

    user = db.relationship(
        User,
        backref=db.backref("oauth_accounts", cascade="all, delete-orphan"),
    )


class Subject(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False, unique=True)

    notes = db.relationship("Note", back_populates="subject", lazy=True)


class NoteType(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), unique=True, nullable=False)

    notes = db.relationship("Note", back_populates="note_type", lazy=True)


class Note(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    title = db.Column(db.String(200), nullable=False)
    description = db.Column(db.Text, nullable=True)

    link = db.Column(db.String(500), nullable=True)
    original_link = db.Column(db.String(500), nullable=True)

    note_type_id = db.Column(db.Integer, db.ForeignKey("note_type.id"), nullable=False)
    subject_id = db.Column(db.Integer, db.ForeignKey("subject.id"), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)

    created_at = db.Column(
        db.DateTime, nullable=False, default=db.func.current_timestamp()
    )

    user = db.relationship("User", backref=db.backref("notes", lazy=True))
    subject = db.relationship("Subject", back_populates="notes")
    note_type = db.relationship("NoteType", back_populates="notes")