#!/usr/bin/env python3 from uuid import uuid4 from enum import Enum from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.sql import func from flask_bcrypt import generate_password_hash, check_password_hash from db import db """ Database models """ __author__ = '@tormakris' __copyright__ = "Copyright 2020, videON Team" __module_name__ = "models" __version__text__ = "1" class User(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, nullable=False, unique=True) password = db.Column(db.String, nullable=False) last_logon = db.Column(db.TIMESTAMP, nullable=False, server_default=func.now()) timestamp = db.Column(db.TIMESTAMP, nullable=False, server_default=func.now()) def hash_password(self): self.password = generate_password_hash(self.password).decode('utf8') def check_password(self, password): return check_password_hash(self.password, password) class StreamResourceTypeEnum(Enum): INGEST = 1 ENCODE = 2 RESTREAM = 3 class StreamResource(db.Model): id = db.Column(UUID(as_uuid=True), primary_key=True, unique=True, nullable=False, default=uuid4) resource_type = db.Column(db.Enum(StreamResourceTypeEnum), nullable=False) url = db.Column(db.String, nullable=True) output_urls = db.relationship('OuputUrls', backref='streamresource', lazy=False) bitrate = db.Column(db.Integer, nullable=True) width = db.Column(db.Integer, nullable=True) height = db.Column(db.Integer, nullable=True) parent_id = db.Column(db.Integer, db.ForeignKey('stream_resource.id'), nullable=True) children = db.relationship('StreamResource', lazy=False) class OuputUrls(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) output_url = db.Column(db.String, nullable=False) streamresource_id = db.Column(db.Integer, db.ForeignKey('stream_resource.id'), nullable=False)