import logging logger = logging.getLogger(__name__) def normalize_mac(mac: str) -> str: if not mac: return "" cleaned = mac.replace('.', '').replace('-', '').replace(':', '').upper() if len(cleaned) == 12 and all(c in '0123456789ABCDEF' for c in cleaned): return ':'.join(cleaned[i:i+2] for i in range(0, 12, 2)) return mac.upper() def transform_ruijie(record: dict) -> dict: """Session Ruijie → dict (mac normalizado + campos).""" return { 'mac_address': normalize_mac(record.get('mac', '')), 'access_point_name': record.get('deviceAliasName', ''), 'building_name': record.get('buildingName', ''), 'band': record.get('band', ''), 'channel': record.get('channel', ''), 'rssi': int(record.get('rssiInt', 0) or 0), 'user_ip': record.get('userIp', ''), 'bytes_up': int(record.get('wifiUp', 0) or 0), 'bytes_down': int(record.get('wifiDown', 0) or 0), 'bytes_total': int(record.get('wifiUpDown', 0) or 0), 'serial_number': record.get('sn', ''), 'online_time_ms': record.get('onlineTime'), # epoch ms (int) 'offline_time_ms': record.get('offlineTime'), # epoch ms (int) 'active_time_ms': int(record.get('activeTime', 0) or 0), } def transform_wifire(record: dict) -> dict: """ Customer WiFire → dict para tabela users. Campos esperados de /establishments/customers: - mac / mac_address: MAC do dispositivo (tenta os dois) - name: nome do cliente - email: e-mail - cpf: CPF (campo direto na resposta WiFire) - sex: gênero ('M'/'F') - birthday / birthdate: data de nascimento 'YYYY-MM-DD' - phone / celphone: telefone - id: ID único do cliente - device_type / host_type: tipo de dispositivo - establishment_name / local_name: nome do local """ mac = ( record.get('mac') or record.get('mac_address') or record.get('device_mac') or '' ) return { 'mac_address': normalize_mac(mac), 'name': record.get('name', ''), 'email': record.get('email', ''), 'cpf': record.get('cpf', ''), 'gender': record.get('sex', ''), 'birthdate': record.get('birthday') or record.get('birthdate'), 'phone': record.get('phone') or record.get('celphone', ''), 'client_id': int(record.get('id', 0) or 0), 'host_type': record.get('device_type') or record.get('host_type', ''), 'local_name': record.get('establishment_name') or record.get('local_name', ''), }