class Role(db.Model): __tablename__ = "Roles" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True, nullable=False) def __repr__(self): return f"<Role {self.name}>"
class Content(db.Model, ServiceMixin): QUEUED = 1 PROCESSING = 2 DONE = 3 ERROR = 0 id = db.Column(db.Integer, primary_key=True) title_text = db.Column(db.String, unique=True, nullable=False) text_en = db.Column(db.Text, unique=True, nullable=False) text_ru = db.Column(db.Text, unique=True, nullable=False) duration = db.Column(db.Integer) status = db.Column(db.Integer, default=QUEUED) chunks = db.relationship('Chunk', backref='content', lazy='dynamic') @property def is_ready(self): return self.status == Content.DONE @property def duration_for_humans(self): """ Длительность звучания текста в формате мм:сс """ MILLISECONDS_IN_SECOND = 1000 SECONDS_PER_MINUTE = 60 seconds = self.duration // MILLISECONDS_IN_SECOND minutes = seconds // SECONDS_PER_MINUTE formatted_minutes = str(minutes).zfill(2) formatted_seconds = str(seconds % SECONDS_PER_MINUTE).zfill(2) return f"{formatted_minutes}:{formatted_seconds}" def __repr__(self): return f"<Content {self.title_text}>"
class Chunk(db.Model, ServiceMixin): id = db.Column(db.Integer, primary_key=True) chunks_recognized = db.Column(db.Text) word = db.Column(db.String) word_number = db.Column(db.Integer) word_time = db.Column(db.Integer) content_id = db.Column(db.Integer, db.ForeignKey("content.id")) def __str__(self): return f"<Chunks {self.chunks_recognized}>"
class User(UserMixin, db.Model, ServiceMixin): __tablename__ = "Users" id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), index=True, unique=True, nullable=False) # хэш генерируется на before_insert password = db.Column(db.String(128), nullable=False) email = db.Column(db.String(64), unique=True, nullable=False) is_email_confirmed = db.Column(db.Boolean, default=False) first_name = db.Column(db.String(64)) last_name = db.Column(db.String(64)) is_active = db.Column(db.Boolean, nullable=False, default=True) roles = db.relationship('Role', secondary='User_roles') def set_password(self, password): self.password = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password, password) def __str__(self): return f"<User {self.username}>" def get_token(self, expires_in=600): return jwt.encode( {'reset_password': self.id, 'exp': time() + expires_in}, current_app.config['SECRET_KEY'], algorithm='HS256').decode('utf-8') @classmethod def verify_token(cls, token): try: id = jwt.decode(token, current_app.config['SECRET_KEY'], algorithms=['HS256'])['reset_password'] except: return return cls.query.get(id)
class UserRoles(db.Model): __tablename__ = "User_roles" id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer(), db.ForeignKey('Users.id', ondelete='CASCADE')) role_id = db.Column(db.Integer(), db.ForeignKey('Roles.id', ondelete='CASCADE'))
def last_modified(cls): return db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
def created_at(cls): return db.Column(db.DateTime, default=datetime.utcnow)