52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
from datetime import datetime
|
|
|
|
from sqlalchemy.sql.expression import func
|
|
|
|
from statusforce.db import Model, Column, ForeignKey, Boolean, DateTime, Enum, Integer, String, Text, \
|
|
relationship, backref
|
|
|
|
|
|
class Service(Model):
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
name = Column(String, nullable=False)
|
|
status = Column(Enum('operational', 'unclear', 'offline', native_enum=False), default='operational')
|
|
incidents = relationship('Incident', backref=backref('service', lazy=True))
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class Incident(Model):
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
service_id = Column(Integer, ForeignKey('service.id'))
|
|
title = Column(String, nullable=False)
|
|
description = Column(Text)
|
|
is_resolved = Column(Boolean, default=False)
|
|
created = Column(DateTime, nullable=False, default=datetime.utcnow)
|
|
updated = Column(DateTime, onupdate=func.current_timestamp())
|
|
|
|
def __str__(self):
|
|
return '{} ({})'.format(self.title, self.service.name)
|
|
|
|
|
|
class User(Model):
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
full_name = Column(String)
|
|
email = Column(String, nullable=False)
|
|
password = Column(String, nullable=False)
|
|
is_active = Column(Boolean, default=True)
|
|
|
|
@property
|
|
def is_authenticated(self):
|
|
return True
|
|
|
|
@property
|
|
def is_anonymous(self):
|
|
return False
|
|
|
|
def get_id(self):
|
|
return self.id
|
|
|
|
def __str__(self):
|
|
return self.full_name or self.email
|