From 8330ce66caea59576423bdb1c231a5c802fcf5ce Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Thu, 21 Jul 2022 09:59:54 +0200 Subject: [PATCH] =?UTF-8?q?API:=20acc=C3=A8s=20aux=20d=C3=A9partements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/departements.py | 95 ++++++++++++++++++++++++++++++----------- 1 file changed, 70 insertions(+), 25 deletions(-) diff --git a/app/api/departements.py b/app/api/departements.py index 853dc712..4721a806 100644 --- a/app/api/departements.py +++ b/app/api/departements.py @@ -21,6 +21,14 @@ def get_departement(dept_ident: str) -> Departement: return Departement.query.get_or_404(dept_id) +@bp.route("/departements", methods=["GET"]) +@token_auth.login_required +@token_permission_required(Permission.APIView) +def departements(): + """Liste les départements""" + return jsonify([dept.to_dict() for dept in Departement.query]) + + @bp.route("/departements_ids", methods=["GET"]) @token_auth.login_required @token_permission_required(Permission.APIView) @@ -29,12 +37,12 @@ def departements_ids(): return jsonify([dept.id for dept in Departement.query]) -@bp.route("/departement/", methods=["GET"]) +@bp.route("/departement/", methods=["GET"]) @token_auth.login_required @token_permission_required(Permission.APIView) -def departement(dept_ident: str): +def departement(acronym: str): """ - Info sur un département. Accès par id ou acronyme. + Info sur un département. Accès par acronyme. Exemple de résultat : { @@ -45,27 +53,29 @@ def departement(dept_ident: str): "date_creation": "Fri, 15 Apr 2022 12:19:28 GMT" } """ - dept = get_departement(dept_ident) + dept = Departement.query.filter_by(acronym=acronym).first_or_404() return jsonify(dept.to_dict()) -@bp.route("/departements", methods=["GET"]) +@bp.route("/departement/id/", methods=["GET"]) @token_auth.login_required @token_permission_required(Permission.APIView) -def departements(): - """Liste les départements""" - return jsonify([dept.to_dict() for dept in Departement.query]) +def departement_by_id(dept_id: int): + """ + Info sur un département. Accès par id. + """ + dept = Departement.query.get_or_404(dept_id) + return jsonify(dept.to_dict()) -@bp.route("/departement//etudiants", methods=["GET"]) +@bp.route("/departement//etudiants", methods=["GET"]) @token_auth.login_required @token_permission_required(Permission.APIView) -def list_etudiants(dept_ident: str): +def dept_etudiants(acronym: str): """ Retourne la liste des étudiants d'un département - dept: l'acronym d'un département - formsemestre_id: l'id d'un formesemestre + acronym: l'acronyme d'un département Exemple de résultat : [ @@ -83,30 +93,45 @@ def list_etudiants(dept_ident: str): ... ] """ - # Le département, spécifié par un id ou un acronyme - dept = get_departement(dept_ident) - + dept = Departement.query.filter_by(acronym=acronym).first_or_404() return jsonify([etud.to_dict_short() for etud in dept.etudiants]) -@bp.route("/departement//formsemestres_ids", methods=["GET"]) +@bp.route("/departement/id//etudiants", methods=["GET"]) @token_auth.login_required @token_permission_required(Permission.APIView) -def formsemestres_ids(dept_ident: str): +def dept_etudiants_by_id(dept_id: int): + """ + Retourne la liste des étudiants d'un département d'id donné. + """ + dept = Departement.query.get_or_404(dept_id) + return jsonify([etud.to_dict_short() for etud in dept.etudiants]) + + +@bp.route("/departement//formsemestres_ids", methods=["GET"]) +@token_auth.login_required +@token_permission_required(Permission.APIView) +def dept_formsemestres_ids(acronym: str): """liste des ids formsemestre du département""" - # Le département, spécifié par un id ou un acronyme - dept = get_departement(dept_ident) + dept = Departement.query.filter_by(acronym=acronym).first_or_404() return jsonify([formsemestre.id for formsemestre in dept.formsemestres]) -@bp.route("/departement//formsemestres_courants", methods=["GET"]) +@bp.route("/departement/id//formsemestres_ids", methods=["GET"]) @token_auth.login_required @token_permission_required(Permission.APIView) -def liste_semestres_courant(dept_ident: str): - """ - Liste des semestres actifs d'un départements donné +def dept_formsemestres_ids_by_id(dept_id: int): + """liste des ids formsemestre du département""" + dept = Departement.query.get_or_404(dept_id) + return jsonify([formsemestre.id for formsemestre in dept.formsemestres]) - dept: l'acronym d'un département + +@bp.route("/departement//formsemestres_courants", methods=["GET"]) +@token_auth.login_required +@token_permission_required(Permission.APIView) +def dept_formsemestres_courants(acronym: str): + """ + Liste des semestres actifs d'un département d'acronyme donné Exemple de résultat : [ @@ -144,7 +169,27 @@ def liste_semestres_courant(dept_ident: str): ] """ # Le département, spécifié par un id ou un acronyme - dept = get_departement(dept_ident) + dept = Departement.query.filter_by(acronym=acronym).first_or_404() + + # Les semestres en cours de ce département + formsemestres = models.FormSemestre.query.filter( + FormSemestre.dept_id == dept.id, + FormSemestre.date_debut <= app.db.func.now(), + FormSemestre.date_fin >= app.db.func.now(), + ) + + return jsonify([d.to_dict(convert_parcours=True) for d in formsemestres]) + + +@bp.route("/departement/id//formsemestres_courants", methods=["GET"]) +@token_auth.login_required +@token_permission_required(Permission.APIView) +def dept_formsemestres_courants_by_id(dept_id: int): + """ + Liste des semestres actifs d'un département d'id donné + """ + # Le département, spécifié par un id ou un acronyme + dept = Departement.query.get_or_404(dept_id) # Les semestres en cours de ce département formsemestres = models.FormSemestre.query.filter(