SyncExchangeCoinsForExchange
Purpose
Синхронизирует монеты и сети для одной биржи, выполняет mapping и пишет quarantine по нерешенным кейсам.
Код: internal/worker/activities/sync_exchange_coins.go
Input / Output
Input (models.SyncExchangeCoinsExchangeInput):
- exchange_id
- force_full_refresh
- soft_delete_grace_days
Output (models.SyncExchangeCoinsExchangeResult):
- exchange_id, status
- coins_upserted, networks_upserted, mappings_resolved, quarantine_added
- errors[], has_errors
External Dependencies
- APIs: Bybit/Binance/Gate/Bitget/BingX/KuCoin/OKX/MEXC
- DB:
exchange_assets,exchange_asset_networks,exchange_symbol_assets,exchange_asset_mappings,global_assets,global_asset_networks,asset_mapping_quarantine,exchanges
Idempotency
- Основные операции через upsert внутри транзакции.
- Повторный запуск обновляет состояние без дублирования доменных строк.
Error Taxonomy
exchange_id is requireddatabase pool is not initialized- provider skipped (
missing_credentials) ->status=skipped, quarantine запись - upstream/API ошибки ->
status=failed, quarantineapi_error - mapping причины:
missing_network_mapping,ambiguous,symbol_collision
Callers
Observability
- Логи создания глобальных ассетов и события частичных деградаций.