feat: product endpoints changes for products table
This commit is contained in:
@ -1,15 +1,17 @@
|
||||
import math
|
||||
|
||||
from modules.fulfillment_base.models import Product
|
||||
from modules.fulfillment_base.repositories import ProductRepository
|
||||
from modules.fulfillment_base.schemas.product import (
|
||||
CreateProductRequest,
|
||||
ProductSchema,
|
||||
UpdateProductRequest,
|
||||
UpdateProductRequest, GetProductsResponse,
|
||||
)
|
||||
from schemas.base import PaginationSchema, PaginationInfoSchema
|
||||
from services.mixins import *
|
||||
|
||||
|
||||
class ProductService(
|
||||
ServiceGetAllMixin[Product, ProductSchema],
|
||||
ServiceCreateMixin[Product, CreateProductRequest, ProductSchema],
|
||||
ServiceUpdateMixin[Product, UpdateProductRequest],
|
||||
ServiceDeleteMixin[Product],
|
||||
@ -22,5 +24,27 @@ class ProductService(
|
||||
def __init__(self, session: AsyncSession):
|
||||
self.repository = ProductRepository(session)
|
||||
|
||||
async def get_all(
|
||||
self,
|
||||
pagination: PaginationSchema,
|
||||
*filters,
|
||||
) -> GetProductsResponse:
|
||||
products, total_items = await self.repository.get_all(
|
||||
pagination.page,
|
||||
pagination.items_per_page,
|
||||
*filters,
|
||||
)
|
||||
|
||||
total_pages = 1
|
||||
if pagination.items_per_page:
|
||||
total_pages = math.ceil(total_items / pagination.items_per_page)
|
||||
|
||||
return GetProductsResponse(
|
||||
items=[ProductSchema.model_validate(product) for product in products],
|
||||
pagination_info=PaginationInfoSchema(
|
||||
total_pages=total_pages, total_items=total_items
|
||||
),
|
||||
)
|
||||
|
||||
async def is_soft_delete(self, product: ProductSchema) -> bool:
|
||||
return True
|
||||
|
||||
Reference in New Issue
Block a user