"""Requests to ows-abacus-state.""" from typing import Any from src.connectors.requests import request from src.models.ows_abacus_state import ( AbacusStateGetResponseItemModel, AbacusStatePutResponseModel, ) from src.models.payee import Payee SERVICE = 'ows-abacus-state' def response_to_dict( data: list[dict[str, Any]], ) -> dict[str, AbacusStateGetResponseItemModel]: """Convert ABACUS state list response to action name to state model map.""" return { obj.action_name: obj for obj in map(AbacusStateGetResponseItemModel.model_validate, data) } def get_all_states(payee: Payee) -> dict[str, AbacusStateGetResponseItemModel]: """Get all payee's ABACUS states records.""" response = request( SERVICE, 'GET', f'/abacus-state/{payee.payee_type}/{payee.payee_id}/' ) return response_to_dict(response.json()) def update_state( abacus_state_id: int, action_status: str, message: str | None ) -> AbacusStatePutResponseModel: """Update an existing ABACUS state record.""" path = f'/abacus-state/{abacus_state_id}/' body = {'action_status': action_status, 'message': message} response = request(SERVICE, 'PUT', path, body) return AbacusStatePutResponseModel.model_validate(response.json()) def create_states( payee: Payee, action_name_list: list[str] ) -> dict[str, AbacusStateGetResponseItemModel]: """Create new ABACUS states records.""" path = '/abacus-states/' body = [ { 'action_name': action_name, 'parent_table_id': payee.payee_id, 'parent_table_name': str(payee.payee_type), } for action_name in action_name_list ] response = request(SERVICE, 'POST', path, body) return response_to_dict(response.json())