first kanban-view integration for client groups

This commit is contained in:
2025-06-27 08:22:01 +00:00
parent 9b78db8223
commit f176c40a02
15 changed files with 751 additions and 380 deletions

View File

@@ -1,10 +1,12 @@
# server/wsgi.py
from models import Client, ClientGroup
from flask import request, jsonify
import glob
import os
from flask import Flask, jsonify, send_from_directory, request
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, and_
from models import Client, Base, Event
from models import Client, Base, Event, ClientGroup
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
@@ -62,7 +64,8 @@ def get_clients():
"location": c.location,
"hardware_hash": c.hardware_hash,
"ip_address": c.ip_address,
"last_alive": c.last_alive.isoformat() if c.last_alive else None
"last_alive": c.last_alive.isoformat() if c.last_alive else None,
"group_id": c.group_id,
}
for c in clients
]
@@ -96,5 +99,106 @@ def get_events():
return jsonify(result)
@app.route("/api/groups", methods=["POST"])
def create_group():
data = request.get_json()
name = data.get("name")
if not name or not name.strip():
return jsonify({"error": "Gruppenname erforderlich"}), 400
session = Session()
# Prüfen, ob der Name schon existiert
if session.query(ClientGroup).filter_by(name=name).first():
session.close()
return jsonify({"error": "Gruppe existiert bereits"}), 409
group = ClientGroup(name=name, is_active=True)
session.add(group)
session.commit()
result = {
"id": group.id,
"name": group.name,
"created_at": group.created_at.isoformat() if group.created_at else None,
"is_active": group.is_active,
}
session.close()
return jsonify(result), 201
@app.route("/api/groups", methods=["GET"])
def get_groups():
"""Liefert alle Raumgruppen als Liste zurück."""
session = Session()
groups = session.query(ClientGroup).all()
result = [
{
"id": g.id,
"name": g.name,
"created_at": g.created_at.isoformat() if g.created_at else None,
"is_active": g.is_active,
}
for g in groups
]
session.close()
return jsonify(result)
@app.route("/api/groups/<int:group_id>", methods=["PUT"])
def update_group(group_id):
"""Ändert den Namen oder Status einer Raumgruppe."""
data = request.get_json()
session = Session()
group = session.query(ClientGroup).filter_by(id=group_id).first()
if not group:
session.close()
return jsonify({"error": "Gruppe nicht gefunden"}), 404
if "name" in data:
group.name = data["name"]
if "is_active" in data:
group.is_active = bool(data["is_active"])
session.commit()
result = {
"id": group.id,
"name": group.name,
"created_at": group.created_at.isoformat() if group.created_at else None,
"is_active": group.is_active,
}
session.close()
return jsonify(result)
@app.route("/api/groups/<int:group_id>", methods=["DELETE"])
def delete_group(group_id):
"""Löscht eine Raumgruppe."""
session = Session()
group = session.query(ClientGroup).filter_by(id=group_id).first()
if not group:
session.close()
return jsonify({"error": "Gruppe nicht gefunden"}), 404
session.delete(group)
session.commit()
session.close()
return jsonify({"success": True})
@app.route("/api/clients/group", methods=["PUT"])
def update_clients_group():
data = request.get_json()
client_ids = data.get("client_ids", [])
group_name = data.get("group_name")
print(f"Update Clients Group: {group_name}, IDs: {client_ids}")
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})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)