From bbd4e332f4ceb0d823284b981e5020bedf7892c0 Mon Sep 17 00:00:00 2001 From: Sam Geyskens Date: Fri, 6 Mar 2026 09:12:32 +0100 Subject: [PATCH] feat: add CRUD functionality for classes with API endpoints and UI integration --- backend/routes/api.py | 46 +++++++++++++++++++++++++++++ backend/templates/directeur.html | 50 ++++++++++++++++++++++++++++---- 2 files changed, 91 insertions(+), 5 deletions(-) diff --git a/backend/routes/api.py b/backend/routes/api.py index d1d4668..050864b 100644 --- a/backend/routes/api.py +++ b/backend/routes/api.py @@ -460,6 +460,52 @@ def set_my_classes(): + +# ── Klassen CRUD (directeur) ─────────────────────────────────────────────────── + +@api_bp.route('/classes', methods=['GET']) +@login_required +@director_required +def list_classes(): + """Alle klassen van de school.""" + classes = Class.query.filter_by(school_id=current_user.school_id) .order_by(Class.name).all() + return jsonify({'classes': [ + {'id': c.id, 'name': c.name, + 'teachers': [{'id': t.id, 'full_name': t.full_name} for t in c.teachers]} + for c in classes + ]}) + + +@api_bp.route('/classes', methods=['POST']) +@login_required +@director_required +def create_class(): + """Nieuwe klas aanmaken.""" + data = request.get_json() or {} + name = data.get('name', '').strip() + if not name: + return jsonify({'error': 'Naam is verplicht'}), 400 + if Class.query.filter_by(school_id=current_user.school_id, name=name).first(): + return jsonify({'error': 'Een klas met deze naam bestaat al'}), 409 + klas = Class(name=name, school_id=current_user.school_id) + db.session.add(klas) + audit_log('class.create', 'class', detail={'name': name}) + db.session.commit() + return jsonify({'class': {'id': klas.id, 'name': klas.name, 'teachers': []}}), 201 + + +@api_bp.route('/classes/', methods=['DELETE']) +@login_required +@director_required +def delete_class(class_id): + """Klas verwijderen (enkel eigen school).""" + klas = Class.query.filter_by(id=class_id, school_id=current_user.school_id).first_or_404() + name = klas.name + db.session.delete(klas) + audit_log('class.delete', 'class', target_id=str(class_id), detail={'name': name}) + db.session.commit() + return jsonify({'deleted': class_id}) + # ── Klas-leerkracht koppeling (directeur) ────────────────────────────────────── @api_bp.route('/classes//teachers', methods=['PUT']) diff --git a/backend/templates/directeur.html b/backend/templates/directeur.html index 43cc9b0..5f01daa 100644 --- a/backend/templates/directeur.html +++ b/backend/templates/directeur.html @@ -188,6 +188,9 @@