from database import Session from models.models import Client, ClientGroup from flask import Blueprint, request, jsonify import sys sys.path.append('/workspace') clients_bp = Blueprint("clients", __name__, url_prefix="/api/clients") @clients_bp.route("/without_description", methods=["GET"]) def get_clients_without_description(): session = Session() clients = session.query(Client).filter( (Client.description == None) | (Client.description == "") ).all() result = [ { "uuid": c.uuid, "hardware_token": c.hardware_token, "ip": c.ip, "type": c.type, "hostname": c.hostname, "os_version": c.os_version, "software_version": c.software_version, "macs": c.macs, "model": c.model, "registration_time": c.registration_time.isoformat() if c.registration_time else None, "last_alive": c.last_alive.isoformat() if c.last_alive else None, "is_active": c.is_active, "group_id": c.group_id, } for c in clients ] session.close() return jsonify(result) @clients_bp.route("//description", methods=["PUT"]) def set_client_description(uuid): data = request.get_json() description = data.get("description", "").strip() if not description: return jsonify({"error": "Beschreibung darf nicht leer sein"}), 400 session = Session() client = session.query(Client).filter_by(uuid=uuid).first() if not client: session.close() return jsonify({"error": "Client nicht gefunden"}), 404 client.description = description session.commit() session.close() return jsonify({"success": True}) @clients_bp.route("", methods=["GET"]) def get_clients(): session = Session() clients = session.query(Client).all() result = [ { "uuid": c.uuid, "hardware_token": c.hardware_token, "ip": c.ip, "type": c.type, "hostname": c.hostname, "os_version": c.os_version, "software_version": c.software_version, "macs": c.macs, "model": c.model, "description": c.description, "registration_time": c.registration_time.isoformat() if c.registration_time else None, "last_alive": c.last_alive.isoformat() if c.last_alive else None, "is_active": c.is_active, "group_id": c.group_id, } for c in clients ] session.close() return jsonify(result) @clients_bp.route("/group", methods=["PUT"]) def update_clients_group(): data = request.get_json() client_ids = data.get("client_ids", []) group_name = data.get("group_name") session = Session() group = session.query(ClientGroup).filter_by(name=group_name).first() if not group: session.close() return jsonify({"error": "Gruppe nicht gefunden"}), 404 session.query(Client).filter(Client.uuid.in_(client_ids)).update( {Client.group_id: group.id}, synchronize_session=False ) session.commit() session.close() return jsonify({"success": True})