From 5d31ae0fdce93a98ee1c5e2ddd66a0a51a6ebbf3 Mon Sep 17 00:00:00 2001 From: Artem Litvinov Date: Fri, 29 Sep 2023 18:15:32 +0100 Subject: [PATCH] fix: base and mixin models --- src/fastapi_app/lib/api/v1/models/__init__.py | 0 src/fastapi_app/lib/api/v1/models/mixins.py | 25 --------------- src/fastapi_app/lib/models/__init__.py | 4 +-- src/fastapi_app/lib/models/base_sqlalchemy.py | 31 +++++++++++++++++++ 4 files changed, 33 insertions(+), 27 deletions(-) delete mode 100644 src/fastapi_app/lib/api/v1/models/__init__.py delete mode 100644 src/fastapi_app/lib/api/v1/models/mixins.py diff --git a/src/fastapi_app/lib/api/v1/models/__init__.py b/src/fastapi_app/lib/api/v1/models/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/fastapi_app/lib/api/v1/models/mixins.py b/src/fastapi_app/lib/api/v1/models/mixins.py deleted file mode 100644 index 3380a9f..0000000 --- a/src/fastapi_app/lib/api/v1/models/mixins.py +++ /dev/null @@ -1,25 +0,0 @@ -import uuid - -import sqlalchemy -from sqlalchemy.dialects.postgresql import UUID -from sqlalchemy.ext.declarative import declared_attr - - -class BaseMixin: - @declared_attr - def id(cls): - return sqlalchemy.Column( - UUID(as_uuid=True), - primary_key=True, - default=uuid.uuid4, - unique=True, - nullable=False, - ) - - @declared_attr - def created_at(cls): - return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()) - - @declared_attr - def updated_at(cls): - return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()) diff --git a/src/fastapi_app/lib/models/__init__.py b/src/fastapi_app/lib/models/__init__.py index 719ce04..80a73f7 100644 --- a/src/fastapi_app/lib/models/__init__.py +++ b/src/fastapi_app/lib/models/__init__.py @@ -1,4 +1,4 @@ -from .base_sqlalchemy import Base +from .base_sqlalchemy import Base, IdCreatedUpdatedBaseMixin from .token import Token -__all__ = ["Base", "Token"] +__all__ = ["Base", "Token", "IdCreatedUpdatedBaseMixin"] diff --git a/src/fastapi_app/lib/models/base_sqlalchemy.py b/src/fastapi_app/lib/models/base_sqlalchemy.py index b0d8b5d..2023439 100644 --- a/src/fastapi_app/lib/models/base_sqlalchemy.py +++ b/src/fastapi_app/lib/models/base_sqlalchemy.py @@ -1,5 +1,36 @@ +import uuid + +import sqlalchemy +import sqlalchemy.dialects.postgresql +import sqlalchemy.ext.declarative import sqlalchemy.orm class Base(sqlalchemy.orm.DeclarativeBase): + """Base class for all models.""" + pass + + +class IdCreatedUpdatedBaseMixin(Base): + @sqlalchemy.ext.declarative.declared_attr + def uuid(cls): + return sqlalchemy.Column( + sqlalchemy.dialects.postgresql.UUID(as_uuid=True), + primary_key=True, + default=uuid.uuid4, + unique=True, + nullable=False, + ) + + @sqlalchemy.ext.declarative.declared_attr + def created_at(cls): + return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()) + + @sqlalchemy.ext.declarative.declared_attr + def updated_at(cls): + return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()) + + @sqlalchemy.ext.declarative.declared_attr.directive + def __tablename__(cls) -> str: + return cls.__name__.lower()