From a509a3a58663a3bd6c3e414d8a0b71bc374df00f Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Wed, 12 Feb 2025 15:27:48 +0400 Subject: [PATCH] feat: removed price categories --- models/deal.py | 11 +----- models/service.py | 22 ----------- routers/service.py | 55 --------------------------- schemas/deal.py | 4 +- schemas/service.py | 31 --------------- services/deal.py | 9 ----- services/service.py | 91 +-------------------------------------------- 7 files changed, 3 insertions(+), 220 deletions(-) diff --git a/models/deal.py b/models/deal.py index 4ec78e4..2a2dcaa 100644 --- a/models/deal.py +++ b/models/deal.py @@ -15,18 +15,11 @@ from .shipping_warehouse import ShippingWarehouse if TYPE_CHECKING: from . import ( DealBillRequest, - ServicePriceCategory, DealGroup, User, ) -class DealPriceCategory(BaseModel): - __tablename__ = 'deal_price_category' - deal_id: Mapped[int] = mapped_column(ForeignKey('deals.id'), primary_key=True, unique=True) - category_id: Mapped[int] = mapped_column(ForeignKey('service_price_category.id'), primary_key=True) - - class Deal(BaseModel): __tablename__ = 'deals' id = Column(Integer, autoincrement=True, primary_key=True, index=True) @@ -85,9 +78,7 @@ class Deal(BaseModel): comment = Column(String, nullable=False, server_default='', comment='Коментарий к заданию') bill_request: Mapped[Optional['DealBillRequest']] = relationship(back_populates='deal', lazy='joined') - category: Mapped[Optional["ServicePriceCategory"]] = relationship('ServicePriceCategory', - secondary=DealPriceCategory.__table__, - lazy='joined') + group: Mapped[Optional["DealGroup"]] = relationship( 'DealGroup', secondary='deal_relations', diff --git a/models/service.py b/models/service.py index acf24d8..6beb0d1 100644 --- a/models/service.py +++ b/models/service.py @@ -9,7 +9,6 @@ services_kit_services = Table( BaseModel.metadata, Column('services_kit_id', ForeignKey('services_kits.id')), Column('service_id', ForeignKey('services.id')), - ) @@ -47,10 +46,6 @@ class Service(BaseModel): lazy='selectin', order_by="asc(ServicePriceRange.from_quantity)", cascade="all, delete-orphan") - category_prices = relationship('ServiceCategoryPrice', - back_populates='service', - lazy='selectin', - cascade="all, delete-orphan") rank: Mapped[str] = mapped_column( nullable=False, server_default='', @@ -68,23 +63,6 @@ class ServicePriceRange(BaseModel): price = Column(Double, nullable=False, comment='Цена') -class ServiceCategoryPrice(BaseModel): - __tablename__ = 'service_category_prices' - service_id: Mapped[int] = mapped_column(ForeignKey('services.id'), primary_key=True) - category_id: Mapped[int] = mapped_column(ForeignKey('service_price_category.id'), primary_key=True) - - price: Mapped[float] = mapped_column(Double, nullable=False, comment='Цена') - - service: Mapped["Service"] = relationship('Service', lazy='joined', back_populates='category_prices') - category: Mapped["ServicePriceCategory"] = relationship('ServicePriceCategory', lazy='joined') - - -class ServicePriceCategory(BaseModel): - __tablename__ = 'service_price_category' - id: Mapped[int] = mapped_column(primary_key=True) - name: Mapped[str] = mapped_column(nullable=False) - - class ServiceCategory(BaseModel): __tablename__ = 'service_categories' id = Column(Integer, autoincrement=True, primary_key=True, index=True) diff --git a/routers/service.py b/routers/service.py index db7a1f8..19331a3 100644 --- a/routers/service.py +++ b/routers/service.py @@ -227,61 +227,6 @@ async def update_services_kit( return await ServiceService(session).update_kit(request) -# endregion - -# region Price Categories -# crud price categories -@service_router.get( - '/price-categories/get-all', - response_model=GetAllPriceCategoriesResponse, - operation_id='get_all_price_categories', - dependencies=[Depends(guest_user)] -) -async def get_all_price_categories( - session: SessionDependency -): - return await ServiceService(session).get_all_price_categories() - - -@service_router.post( - '/price-categories/create', - response_model=CreatePriceCategoryResponse, - operation_id='create_price_category', - dependencies=[Depends(authorized_user)] -) -async def create_price_category( - session: SessionDependency, - request: CreatePriceCategoryRequest -): - return await ServiceService(session).create_price_category(request) - - -@service_router.post( - '/price-categories/update', - response_model=UpdatePriceCategoryResponse, - operation_id='update_price_category', - dependencies=[Depends(authorized_user)] -) -async def update_price_category( - session: SessionDependency, - request: UpdatePriceCategoryRequest -): - return await ServiceService(session).update_price_category(request) - - -@service_router.post( - '/price-categories/delete', - response_model=DeletePriceCategoryResponse, - operation_id='delete_price_category', - dependencies=[Depends(authorized_user)] -) -async def delete_price_category( - session: SessionDependency, - request: DeletePriceCategoryRequest -): - return await ServiceService(session).delete_price_category(request) - - # endregion # region Exports diff --git a/schemas/deal.py b/schemas/deal.py index d5f79f6..f2df444 100644 --- a/schemas/deal.py +++ b/schemas/deal.py @@ -10,7 +10,7 @@ from schemas.client import ClientSchema from schemas.group import DealGroupSchema from schemas.marketplace import BaseMarketplaceSchema from schemas.product import ProductSchema -from schemas.service import ServiceSchema, ServicePriceCategorySchema +from schemas.service import ServiceSchema from schemas.shipping import PalletSchema, BoxSchema from schemas.shipping_warehouse import ShippingWarehouseSchema, BaseShippingWarehouseSchema from schemas.status import StatusSchema, DealStatusHistorySchema @@ -91,7 +91,6 @@ class DealSchema(BaseSchema): comment: str shipping_warehouse: Optional[Union[ShippingWarehouseSchema, str]] = None bill_request: Optional[DealBillRequestSchema] = None - category: Optional[ServicePriceCategorySchema] = None group: Optional[DealGroupSchema] = None manager: Optional[UserSchema] = None pallets: List[PalletSchema] = [] @@ -163,7 +162,6 @@ class DealQuickCreateRequest(BaseSchema): acceptance_date: datetime.datetime shipping_warehouse: constr(strip_whitespace=True) base_marketplace: BaseMarketplaceSchema - category: Optional[ServicePriceCategorySchema] = None status_id: int diff --git a/schemas/service.py b/schemas/service.py index 639dc9f..9afda0f 100644 --- a/schemas/service.py +++ b/schemas/service.py @@ -20,16 +20,6 @@ class ServiceCategorySchema(BaseSchema): product_service_rank: str -class ServicePriceCategorySchema(BaseSchema): - id: int - name: str - - -class ServiceCategoryPriceSchema(BaseSchema): - category: ServicePriceCategorySchema - price: float - - class ServiceSchema(BaseSchema): id: int name: str @@ -37,7 +27,6 @@ class ServiceSchema(BaseSchema): price: float service_type: int price_ranges: List[ServicePriceRangeSchema] - category_prices: List[ServiceCategoryPriceSchema] cost: Optional[int] rank: str is_placeholder: Optional[bool] = False @@ -65,10 +54,6 @@ class UpdateServiceKitSchema(BaseServiceKitSchema): services_ids: List[int] -# endregion - -# region Category prices - # endregion # endregion @@ -170,22 +155,6 @@ class GetAllServicesKitsResponse(BaseSchema): services_kits: List[GetServiceKitSchema] -class GetAllPriceCategoriesResponse(BaseSchema): - price_categories: List[ServicePriceCategorySchema] - - -class CreatePriceCategoryResponse(OkMessageSchema): - pass - - -class UpdatePriceCategoryResponse(OkMessageSchema): - pass - - -class DeletePriceCategoryResponse(OkMessageSchema): - pass - - class ServiceReorderResponse(OkMessageSchema): pass diff --git a/services/deal.py b/services/deal.py index ff63da9..0988360 100644 --- a/services/deal.py +++ b/services/deal.py @@ -118,15 +118,6 @@ class DealService(BaseService): base_marketplace_key=request.base_marketplace.key ) self.session.add(deal) - await self.session.flush() - # add category if specified - if request.category: - deal_category = DealPriceCategory( - deal_id=deal.id, - category_id=request.category.id - ) - self.session.add(deal_category) - await self.session.commit() return DealQuickCreateResponse(deal_id=deal.id) diff --git a/services/service.py b/services/service.py index d6c9ebf..cc7d9d8 100644 --- a/services/service.py +++ b/services/service.py @@ -5,8 +5,7 @@ from sqlalchemy.exc import IntegrityError from sqlalchemy.orm import joinedload from enums.service import ServiceType -from models import Service, ServiceCategory, ServicePriceRange, ServicesKit, services_kit_services, \ - ServiceCategoryPrice, ServicePriceCategory +from models import Service, ServiceCategory, ServicePriceRange, ServicesKit, services_kit_services from schemas.service import * from services.base import BaseService from utils.list_utils import previous_current_next @@ -62,7 +61,6 @@ class ServiceService(BaseService): price=0, service_type=service_type, price_ranges=[], - category_prices=[], cost=0, rank='', is_placeholder=True @@ -88,7 +86,6 @@ class ServiceService(BaseService): del service_dict['id'] del service_dict['category'] del service_dict['price_ranges'] - del service_dict['category_prices'] del service_dict['is_placeholder'] service_type = ServiceType(raw_service.service_type) category_id = raw_service.category.id @@ -110,15 +107,6 @@ class ServiceService(BaseService): del price_range_dict['id'] price_range_obj = ServicePriceRange(**price_range_dict) self.session.add(price_range_obj) - category_prices = request.service.category_prices - for category_price in category_prices: - category_price_dict = category_price.model_dump() - category_price_dict['service_id'] = service.id - category_price_dict['category_id'] = category_price.category.id - - del category_price_dict['category'] - category_price_obj = ServiceCategoryPrice(**category_price_dict) - self.session.add(category_price_obj) await self.session.commit() return ServiceCreateResponse(ok=True, message="Услуга успешно создана") except Exception as e: @@ -136,7 +124,6 @@ class ServiceService(BaseService): service_dict['category_id'] = raw_service.category.id del service_dict['category'] del service_dict['price_ranges'] - del service_dict['category_prices'] del service_dict['is_placeholder'] if prev_category_id != new_category_id: latest_rank = await self.get_latest_rank_in_category(new_category_id, ServiceType(raw_service.service_type)) @@ -173,25 +160,6 @@ class ServiceService(BaseService): price_range_obj = ServicePriceRange(**price_range_dict) self.session.add(price_range_obj) - # deleting previouse category prices - stmt = ( - delete( - ServiceCategoryPrice - ).where( - ServiceCategoryPrice.service_id == service.id - ) - ) - await self.session.execute(stmt) - await self.session.flush() - # inserting new category prices - for category_price in raw_service.category_prices: - category_price_dict = category_price.dict() - category_price_dict['service_id'] = raw_service.id - category_price_dict['category_id'] = category_price.category.id - del category_price_dict['category'] - category_price_obj = ServiceCategoryPrice(**category_price_dict) - self.session.add(category_price_obj) - await self.session.commit() return ServiceUpdateResponse(ok=True, message="Услуга успешно обновлена") except Exception as e: @@ -345,63 +313,6 @@ class ServiceService(BaseService): except Exception as e: return UpdateServicesKitResponse(ok=False, message=str(e)) - async def get_all_price_categories(self) -> GetAllPriceCategoriesResponse: - query = await (self.session - .scalars(select(ServicePriceCategory) - .order_by(ServicePriceCategory.id))) - price_categories = [] - for category in query.all(): - price_categories.append(ServicePriceCategorySchema.model_validate(category)) - return GetAllPriceCategoriesResponse(price_categories=price_categories) - - async def create_price_category(self, request: CreatePriceCategoryRequest) -> ServiceCreateCategoryResponse: - try: - raw_category = request.name - category = ServicePriceCategory(name=raw_category) - self.session.add(category) - await self.session.commit() - return ServiceCreateCategoryResponse(ok=True, message="Категория цен успешно создана") - except Exception as e: - return ServiceCreateCategoryResponse(ok=False, message=f"Неудалось создать категорию цен, ошибка: {e}") - - async def update_price_category(self, request: UpdatePriceCategoryRequest) -> ServiceUpdateResponse: - try: - raw_category = request.name - category = await (self.session.get(ServicePriceCategory, request.id)) - if not category: - return ServiceUpdateResponse(ok=False, message="Категория цен не найдена") - await self.session.execute( - update(ServicePriceCategory) - .where(ServicePriceCategory.id == request.id) - .values(name=raw_category) - ) - await self.session.commit() - return ServiceUpdateResponse(ok=True, message="Категория цен успешно обновлена") - except Exception as e: - return ServiceUpdateResponse(ok=False, message=f"Неудалось обновить категорию цен, ошибка: {e}") - - async def delete_price_category(self, request: DeletePriceCategoryRequest) -> ServiceDeleteResponse: - try: - category = await ( - self.session - .scalar( - select( - ServicePriceCategory - ) - .filter( - ServicePriceCategory.id == request.id - ) - ) - ) - if not category: - return ServiceDeleteResponse(ok=False, message="Категория цен не найдена") - - await self.session.delete(category) - await self.session.commit() - return ServiceDeleteResponse(ok=True, message="Категория цен успешно удалена") - except Exception as e: - return ServiceDeleteResponse(ok=False, message=f"Неудалось удалить категорию цен, ошибка: {e}") - async def reorder(self, request: ServiceReorderRequest) -> ServiceReorderResponse: try: draining_service = await (self.session.get(Service, request.draining_service_id))