"""Contract logic.""" from abacus_common_logic.connectors.database import db from sqlalchemy import bindparam, select from sqlalchemy.orm import aliased from abacus_contract import models def get_account_ids_by_contract_ids(contract_ids: list[int]) -> list[int]: """Get account_ids by contract_id.""" if not contract_ids: return [] AC = aliased(models.AccountContract, name='ac') query = ( select(AC.contract_id, AC.account_id) .select_from(AC) .where(AC.contract_id.in_(bindparam('ids', expanding=True))) ) rows = db.session.execute(query, {'ids': list(contract_ids)}).all() mapping = {contract_id: account_id for contract_id, account_id in rows} result: list[int] = [] for contract_id in contract_ids: account_id = mapping.get(contract_id) if account_id is not None: result.append(account_id) return result