Files
Fulfillment-Backend/services/marketplace.py
2024-09-01 01:05:11 +03:00

95 lines
3.6 KiB
Python

from pyexpat.errors import messages
from sqlalchemy import select, insert, delete, update
from sqlalchemy.orm import joinedload
from models import BaseMarketplace, Marketplace
from schemas.marketplace import *
from services.base import BaseService
class MarketplaceService(BaseService):
async def get_all_base_marketplaces(self) -> GetAllBaseMarketplacesResponse:
stmt = (select(BaseMarketplace).order_by(BaseMarketplace.key))
base_marketplaces = (await self.session.scalars(stmt)).all()
return GetAllBaseMarketplacesResponse(
base_marketplaces=base_marketplaces
)
async def get_client_marketplaces(self, request: GetClientMarketplacesRequest) -> GetClientMarketplacesResponse:
stmt = (
select(
Marketplace
)
.options(
joinedload(Marketplace.base_marketplace),
joinedload(Marketplace.client)
)
.where(
Marketplace.client_id == request.client_id
)
)
marketplaces = (await self.session.scalars(stmt)).all()
return GetClientMarketplacesResponse(
marketplaces=marketplaces
)
async def create_marketplace(self, request: CreateMarketplaceRequest) -> CreateMarketplaceResponse:
try:
marketplace = request.marketplace
marketplace_dict = marketplace.dict()
stmt = (
insert(Marketplace)
.values(
**marketplace_dict
)
)
await self.session.execute(stmt)
await self.session.commit()
return CreateMarketplaceResponse(ok=True, message='Маркетплейс успешно создан')
except Exception as e:
await self.session.rollback()
return CreateMarketplaceResponse(ok=False, message=str(e))
async def delete_marketplace(self, request: DeleteMarketplaceRequest) -> DeleteMarketplaceResponse:
try:
stmt = (
delete(Marketplace)
.where(
Marketplace.id == request.marketplace_id
)
)
await self.session.execute(stmt)
await self.session.commit()
return DeleteMarketplaceResponse(ok=True, message='Маркетплейс успешно удален')
except Exception as e:
await self.session.rollback()
return DeleteMarketplaceResponse(ok=False, message=str(e))
async def update_marketplace(self, request: UpdateMarketplaceRequest) -> UpdateMarketplaceResponse:
try:
marketplace = request.marketplace
marketplace_dict = marketplace.dict()
del marketplace_dict['id']
del marketplace_dict['base_marketplace']
del marketplace_dict['client']
marketplace_dict['base_marketplace_key'] = marketplace.base_marketplace.key
marketplace_dict['client_id'] = marketplace.client.id
stmt = (
update(
Marketplace
)
.values(
**marketplace_dict
)
.where(
Marketplace.id == marketplace.id
)
)
await self.session.execute(stmt)
await self.session.commit()
return UpdateMarketplaceResponse(ok=True, message='Маркетплейс успешно обновлен')
except Exception as e:
await self.session.rollback()
return UpdateMarketplaceResponse(ok=False, message=str(e))