from datetime import datetime
from src.core.basededatos import db
class BaseModel(db.Model):
"""Clase abstracta que proporciona operaciones CRUD para los modelos"""
__abstract__ = True
id = db.Column(db.Integer, primary_key=True, unique=True)
creado_el = db.Column(db.DateTime, default=datetime.utcnow)
actualizado_el = db.Column(db.DateTime, default=datetime.utcnow,
onupdate=datetime.utcnow)
@classmethod
def listar(cls, id: int) -> object:
"""Obtener un objeto por su ID."""
return cls.query.get(id)
@classmethod
def listar_todos(cls) -> list:
"""Obtener todos los objetos de este modelo."""
return cls.query.all()
@classmethod
def actualizar(self) -> None:
"""Actualizar el objeto en la base de datos."""
db.session.commit()
@classmethod
def eliminar(self) -> None:
"""Eliminar el objeto de la base de datos."""
db.session.delete(self)
db.session.commit()
@classmethod
def modificar(self, **kwargs) -> None:
"""Modificar el objeto con nuevos valores y guardarlo en la db"""
for key, value in kwargs.items():
setattr(self, key, value)
self.update()
@classmethod
def crear(cls, **kwargs) -> object:
"""Crear un nuevo objeto y guardarlo en la base de datos."""
instance = cls(**kwargs)
instance.save()
return instance