refactor: repository create mixin

This commit is contained in:
2025-09-05 00:04:09 +04:00
parent c632fb8037
commit e5be35be35
9 changed files with 54 additions and 43 deletions

View File

@ -1,8 +1,9 @@
from typing import Generic, TypeVar
from typing import Generic, TypeVar, Type
from sqlalchemy.ext.asyncio import AsyncSession
EntityType = TypeVar("EntityType")
CreateType = TypeVar("CreateType")
class RepBaseMixin(Generic[EntityType]):
@ -18,8 +19,20 @@ class RepDeleteMixin(RepBaseMixin[EntityType]):
if not hasattr(obj, "is_deleted"):
raise AttributeError(
f"{obj.__class__.__name__} does not support soft delete (missing `is_deleted` field)"
f"{obj.__class__.__name__} does not support soft delete (missing is_deleted field)"
)
obj.is_deleted = True
self.session.add(obj)
await self.session.commit()
class RepCreateMixin(Generic[EntityType, CreateType]):
session: AsyncSession
entity_class: Type[EntityType]
async def create(self, data: CreateType) -> int:
obj = self.entity_class(**data.model_dump())
self.session.add(obj)
await self.session.commit()
await self.session.refresh(obj)
return obj.id