-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
46 lines (36 loc) · 1.66 KB
/
models.py
File metadata and controls
46 lines (36 loc) · 1.66 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
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Ticket(db.Model):
__tablename__ = "tickets"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
description = db.Column(db.Text, nullable=True)
status = db.Column(db.String(30), nullable=False, default="open")
priority = db.Column(db.String(30), nullable=False, default="medium")
requester_email = db.Column(db.String(254), nullable=True)
assigned_to = db.Column(db.String(254), nullable=True)
created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
def to_dict(self):
return {
"id": self.id,
"title": self.title,
"description": self.description,
"status": self.status,
"priority": self.priority,
"requester_email": self.requester_email,
"assigned_to": self.assigned_to,
"created_at": self.created_at.isoformat() + "Z",
"updated_at": self.updated_at.isoformat() + "Z",
}
class ApiToken(db.Model):
"""
Stores ONLY a hash of the token so we never persist plaintext bearer tokens.
"""
__tablename__ = "api_tokens"
id = db.Column(db.Integer, primary_key=True)
token_hash = db.Column(db.String(64), unique=True, nullable=False) # sha256 hex
label = db.Column(db.String(120), nullable=True)
is_active = db.Column(db.Boolean, nullable=False, default=True)
created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)