75 lines
2.8 KiB
Python
Executable File
75 lines
2.8 KiB
Python
Executable File
from datetime import datetime
|
|
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
|
|
db = SQLAlchemy()
|
|
|
|
|
|
class Phone(db.Model):
|
|
__tablename__ = "phones"
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
phone_number = db.Column(db.String(32), unique=True, nullable=False, index=True)
|
|
plan = db.Column(db.String(120), nullable=True)
|
|
contract_expiration = db.Column(db.Date, nullable=True)
|
|
eligible_for_replacement = db.Column(db.Date, nullable=True)
|
|
current_owner = db.Column(db.String(200), nullable=True)
|
|
venue = db.Column(db.String(200), nullable=True)
|
|
verified = db.Column(db.String(8), nullable=True)
|
|
comment = db.Column(db.Text, nullable=True)
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
|
|
def to_dict(self):
|
|
return {
|
|
"id": self.id,
|
|
"phone_number": self.phone_number,
|
|
"plan": self.plan,
|
|
"contract_expiration": self.contract_expiration.isoformat() if self.contract_expiration else None,
|
|
"eligible_for_replacement": self.eligible_for_replacement.isoformat() if self.eligible_for_replacement else None,
|
|
"current_owner": self.current_owner,
|
|
"venue": self.venue,
|
|
"verified": self.verified,
|
|
"comment": self.comment,
|
|
}
|
|
|
|
|
|
class User(db.Model):
|
|
__tablename__ = "users"
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
username = db.Column(db.String(80), unique=True, nullable=False, index=True)
|
|
password_hash = db.Column(db.String(255), nullable=False)
|
|
role = db.Column(db.String(20), nullable=False, default="viewer") # "admin" or "viewer"
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
|
|
def to_dict(self):
|
|
return {
|
|
"id": self.id,
|
|
"username": self.username,
|
|
"role": self.role,
|
|
}
|
|
|
|
|
|
class InternetConnection(db.Model):
|
|
__tablename__ = "internet_connections"
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
venue = db.Column(db.String(200), nullable=False)
|
|
isp_provider = db.Column(db.String(200), nullable=True)
|
|
plan = db.Column(db.String(200), nullable=True)
|
|
contract_expiration = db.Column(db.Date, nullable=True)
|
|
notes = db.Column(db.Text, nullable=True)
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
|
|
def to_dict(self):
|
|
return {
|
|
"id": self.id,
|
|
"venue": self.venue,
|
|
"isp_provider": self.isp_provider,
|
|
"plan": self.plan,
|
|
"contract_expiration": self.contract_expiration.isoformat() if self.contract_expiration else None,
|
|
"notes": self.notes,
|
|
}
|