diff --git a/farmq-admin/app.py b/farmq-admin/app.py index fb682e1..5ee94ff 100644 --- a/farmq-admin/app.py +++ b/farmq-admin/app.py @@ -17,6 +17,7 @@ from utils.database_new import ( sync_machines_from_headscale, sync_users_from_headscale ) from models.farmq_models import PharmacyInfo +from sqlalchemy import or_ import subprocess from utils.proxmox_client import ProxmoxClient @@ -349,6 +350,46 @@ def create_app(config_name=None): 'error': f'서버 오류: {str(e)}' }), 500 + @app.route('/api/pharmacies/available', methods=['GET']) + def api_get_available_pharmacies(): + """매핑되지 않은 약국 목록 가져오기""" + try: + farmq_session = get_farmq_session() + try: + # headscale_user_name이 NULL이거나 빈 문자열인 약국들만 가져오기 + pharmacies = farmq_session.query(PharmacyInfo).filter( + or_( + PharmacyInfo.headscale_user_name.is_(None), + PharmacyInfo.headscale_user_name == '' + ) + ).all() + + pharmacy_list = [] + for pharmacy in pharmacies: + pharmacy_list.append({ + 'id': pharmacy.id, + 'pharmacy_name': pharmacy.pharmacy_name, + 'manager_name': pharmacy.manager_name or '미등록', + 'business_number': pharmacy.business_number, + 'address': pharmacy.address + }) + + return jsonify({ + 'success': True, + 'pharmacies': pharmacy_list, + 'count': len(pharmacy_list) + }) + + finally: + farmq_session.close() + + except Exception as e: + print(f"❌ 매핑 가능한 약국 목록 조회 오류: {e}") + return jsonify({ + 'success': False, + 'error': f'서버 오류: {str(e)}' + }), 500 + @app.route('/api/users//link-pharmacy', methods=['POST']) def api_link_user_pharmacy(user_name): """사용자와 약국 연결""" @@ -624,17 +665,21 @@ def create_app(config_name=None): users_data = json.loads(result.stdout) - # FARMQ 약국 정보와 매칭 + # FARMQ 약국 정보와 매칭 (명시적으로 매핑된 것만) farmq_session = get_farmq_session() try: pharmacies = farmq_session.query(PharmacyInfo).all() - pharmacy_map = {p.headscale_user_name: p for p in pharmacies if p.headscale_user_name} + # 명시적으로 headscale_user_name이 설정되고 해당 사용자가 실제로 존재하는 경우만 매핑 + pharmacy_map = {} + for p in pharmacies: + if p.headscale_user_name and p.headscale_user_name.strip(): + pharmacy_map[p.headscale_user_name] = p # 사용자별 노드 수 조회 for user in users_data: user_name = user.get('name', '') - # 약국 정보 매칭 + # 약국 정보 매칭 - 명시적으로 연결된 것만 pharmacy = pharmacy_map.get(user_name) user['pharmacy'] = { 'id': pharmacy.id, diff --git a/farmq-admin/templates/base.html b/farmq-admin/templates/base.html index 295e002..29b1a99 100644 --- a/farmq-admin/templates/base.html +++ b/farmq-admin/templates/base.html @@ -214,8 +214,8 @@