35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
from modules.fulfillment_base.models import Product
|
|
from modules.fulfillment_base.schemas.product import (
|
|
CreateProductSchema,
|
|
UpdateProductSchema,
|
|
)
|
|
from repositories.mixins import *
|
|
from schemas.base import PaginationSchema
|
|
|
|
|
|
class ProductRepository(
|
|
BaseRepository,
|
|
RepGetAllMixin[Product],
|
|
RepDeleteMixin[Product],
|
|
RepCreateMixin[Product, CreateProductSchema],
|
|
RepUpdateMixin[Product, UpdateProductSchema],
|
|
RepGetByIdMixin[Product],
|
|
):
|
|
entity_class = Product
|
|
entity_not_found_msg = "Товар не найден"
|
|
|
|
def _process_get_all_stmt_with_args(self, stmt: Select, *args) -> Select:
|
|
search_input = args[0]
|
|
pagination: PaginationSchema = args[1]
|
|
if search_input:
|
|
stmt = stmt.where(Product.name.ilike(f"%{search_input}%"))
|
|
if pagination.items_per_page and pagination.page:
|
|
stmt = self._apply_pagination(
|
|
stmt, pagination.page, pagination.items_per_page
|
|
)
|
|
|
|
return stmt
|
|
|
|
async def update(self, product: Product, data: UpdateProductSchema) -> Product:
|
|
return await self._apply_update_data_to_model(product, data, True)
|