116 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from types import SimpleNamespace
 | 
						|
 | 
						|
from sqlalchemy import select, insert, delete, update
 | 
						|
from sqlalchemy.orm import joinedload
 | 
						|
 | 
						|
from external.marketplace import YandexMarketplaceApi
 | 
						|
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))
 | 
						|
 | 
						|
    async def get_yandex_market_campaigns(self,
 | 
						|
                                          request: GetYandexMarketCampaignsRequest) -> GetYandexMarketCampaignsResponse:
 | 
						|
        try:
 | 
						|
            marketplace = SimpleNamespace()
 | 
						|
            marketplace.auth_data = {
 | 
						|
                'Api-Key': request.api_key
 | 
						|
            }
 | 
						|
            ym_api = YandexMarketplaceApi(marketplace)
 | 
						|
            campaigns = []
 | 
						|
            async for campaign in ym_api.get_campaigns():
 | 
						|
                campaigns.append({
 | 
						|
                    'id': campaign.get('id'),
 | 
						|
                    'name': campaign.get('domain'),
 | 
						|
                })
 | 
						|
            return GetYandexMarketCampaignsResponse(campaigns=campaigns)
 | 
						|
        except Exception as e:
 | 
						|
            print(e)
 | 
						|
            return GetYandexMarketCampaignsResponse(campaigns=[])
 |