-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
119 lines (87 loc) · 5.24 KB
/
models.py
File metadata and controls
119 lines (87 loc) · 5.24 KB
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean, Date, DateTime, CheckConstraint
from sqlalchemy.orm import relationship
from database import Base
# SQLAlchemy Models
class User(Base):
__tablename__ = "users"
username = Column(String(50), primary_key=True, index=True)
email = Column(String(255), nullable=False, index=True)
password = Column(String(255), nullable=False)
firstName = Column("firstname", String(20), nullable=False, index=True)
lastName = Column("lastname", String(20), nullable=False, index=True)
birthDate = Column("birthdate", Date, nullable=False)
status = Column(String(8), nullable=False, default="pending")
subscriptions = relationship("UserSubscribesPolicy", back_populates="user")
operations = relationship("UserMadeOperation", back_populates="user")
__table_args__ = (
CheckConstraint("status IN ('pending', 'active', 'disabled', 'blocked')", name='status_check'),
)
class Policy(Base):
__tablename__ = "policy"
name = Column(String(8), primary_key=True, index=True)
maxAccess = Column("maxaccess", Integer)
threshold = Column(Integer)
allowed_categories = relationship("PolicyAllowsCategory", back_populates="policy")
subscriptions = relationship("UserSubscribesPolicy", back_populates="policy")
__table_args__ = (
CheckConstraint("name IN ('trial', 'silver', 'gold', 'platinum')", name="policy_name_check"),
)
class Operation(Base):
__tablename__ = "operations"
name = Column(String(50), primary_key=True, index=True)
target = Column(String(8), nullable=True)
description = Column(String(100), nullable=False)
__table_args__ = (
CheckConstraint("target IN ('class', 'relation', 'subgraph')", name='target_check'),
)
categories = relationship("OperationIsCategory", back_populates="operation")
user_operations = relationship("UserMadeOperation", back_populates="operation")
class Category(Base):
__tablename__ = "categories"
name = Column(String(13), primary_key=True, index=True)
__table_args__ = (
CheckConstraint("name IN ('add', 'fix', 'reification', 'explain', 'openGPTDialog', 'generate')", name='category_check'),
)
operations = relationship("OperationIsCategory", back_populates="category")
policy = relationship("PolicyAllowsCategory", back_populates="category")
class UserSubscribesPolicy(Base):
__tablename__ = "usersubscribespolicy"
username = Column(String(50), ForeignKey("users.username", ondelete="CASCADE"), primary_key=True)
startDate = Column("startdate", DateTime(timezone=True))
endDate = Column("enddate", DateTime(timezone=True))
requestDate = Column("requestdate", DateTime(timezone=True), primary_key=True)
status = Column(String(8), nullable=False)
policyName = Column("policyname", String(8), ForeignKey("policy.name", ondelete="RESTRICT"), nullable=False)
numOperations = Column("numoperations", Integer, nullable=True)
user = relationship("User", back_populates="subscriptions")
policy = relationship("Policy", back_populates="subscriptions")
__table_args__ = (
CheckConstraint("status IN ('pending', 'active', 'rejected', 'expired')", name="subscription_status_check"),
CheckConstraint("policyName IN ('trial', 'silver', 'gold', 'platinum,)", name="subscription_policy_check"),
)
class UserMadeOperation(Base):
__tablename__ = "usermadeoperation"
username = Column(String(50), ForeignKey("users.username", ondelete="CASCADE"), primary_key=True)
date = Column(DateTime(timezone=True), primary_key=True)
operationName = Column("operationname", String(50), ForeignKey("operations.name", ondelete="RESTRICT"), nullable=False)
user = relationship("User", back_populates="operations")
operation = relationship("Operation", back_populates="user_operations")
class OperationIsCategory(Base):
__tablename__ = "operationiscategory"
operationName = Column("operationname", String(50), ForeignKey("operations.name", ondelete="CASCADE"), primary_key=True)
categoryName = Column("categoryname", String(13), ForeignKey("categories.name", ondelete="RESTRICT"), primary_key=True)
operation = relationship("Operation", back_populates="categories")
category = relationship("Category", back_populates="operations")
__table_args__ = (
CheckConstraint("categoryName IN ('add', 'fix', 'reification', 'explain', 'openGPTDialog', 'generate')", name="operation_category_check"),
)
class PolicyAllowsCategory(Base):
__tablename__ = "policyallowscategory"
policyName = Column("policyname", String(8), ForeignKey("policy.name", ondelete="CASCADE"), primary_key=True)
categoryName = Column("categoryname", String(13), ForeignKey("categories.name", ondelete="RESTRICT"), primary_key=True)
policy = relationship("Policy", back_populates="allowed_categories")
category = relationship("Category", back_populates="policy")
__table_args__ = (
CheckConstraint("policyName IN ('trial', 'silver', 'gold', 'platinum')", name="policy_category_policy_check"),
CheckConstraint("categoryName IN ('add', 'fix', 'reification', 'explain', 'openGPTDialog', 'generate')", name="policy_category_name_check"),
)