feat: get stocks

This commit is contained in:
2025-03-10 05:17:14 +03:00
parent a91703ecd8
commit 677a1c8b9c
3 changed files with 36 additions and 1 deletions

View File

@@ -58,6 +58,21 @@ class BaseMarketplaceUpdater(ABC):
marketplace_updates.append(marketplace_update)
await self.marketplace_api.update_stocks(marketplace_updates)
async def get_all_stocks(self, only_available: bool) -> List[StockData]:
if not self.marketplace_api:
return []
stock_data_list = await queries.general.get_stocks_data(
session=self.session,
marketplace=self.marketplace
)
if only_available:
stock_data_list = list(filter(lambda x: x["full_stock"] > 0, stock_data_list))
for idx, stock_data in enumerate(stock_data_list):
stock_data['product_id'] = stock_data['marketplace_product'].product_id
del stock_data["marketplace_product"]
stock_data_list[idx] = stock_data
return stock_data_list
async def reset(self):
if not self.marketplace_api:
return

View File

@@ -11,6 +11,7 @@ from sqlalchemy.orm import joinedload, selectinload
from backend.session import session_factory
from database import Marketplace, MarketplaceProduct, Warehouse, Company
from database.sipro.enums.general import BaseMarketplace
from queries.general import StockData
from schemas.general import StockUpdate
from updaters.factory import UpdaterFactory
@@ -47,7 +48,7 @@ class StocksUpdater:
Company.is_archived == False,
Marketplace.is_deleted == False,
Marketplace.is_paused == False,
Marketplace.send_stocks==True,
Marketplace.send_stocks == True,
Marketplace.base_marketplace.in_([
BaseMarketplace.OZON,
BaseMarketplace.WILDBERRIES,
@@ -72,6 +73,11 @@ class StocksUpdater:
logging.info(
f"{marketplace.name} successfully fully updated in {round(time.time() - start, 2)} seconds.")
async def get_all_stocks_for_marketplace(self, marketplace_id: int, only_available: bool) -> List[StockData]:
marketplace = await self.get_marketplace(marketplace_id)
updater = UpdaterFactory.get_updater(self.session, marketplace)
return await updater.get_all_stocks(only_available)
async def full_update_all_marketplaces(self, marketplace_ids: Union[List[int], None] = None):
marketplaces = await self.get_marketplaces(marketplace_ids)