feat: removed price categories

This commit is contained in:
2025-02-12 15:27:48 +04:00
parent 5b9e75dddf
commit a509a3a586
7 changed files with 3 additions and 220 deletions

View File

@@ -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',

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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))