Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
1.5 kB
1
Indexable
Never
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