From 0d2e1374edfb453bca5b2d02605ee489bb9b4b15 Mon Sep 17 00:00:00 2001 From: Giovanni-Josserand Date: Wed, 3 Sep 2025 14:31:04 +0200 Subject: [PATCH] add of longProjects and update of projects table --- main.py | 13 ++++-- routers/longProjects.py | 49 +++++++++++++++++++++++ routers/{projects.py => shortProjects.py} | 5 +-- 3 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 routers/longProjects.py rename routers/{projects.py => shortProjects.py} (93%) diff --git a/main.py b/main.py index d200679..8fbc98f 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,7 @@ import os from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware -from routers import skills, experiences, experienceTasks, projects +from routers import skills, experiences, experienceTasks, shortProjects, longProjects app = FastAPI() @@ -37,7 +37,12 @@ app.include_router( tags=["ExperienceTasks"] ) app.include_router( - projects.router, - prefix="/api/projects", - tags=["Projects"] + shortProjects.router, + prefix="/api/shortProjects", + tags=["ShortProjects"] +) +app.include_router( + longProjects.router, + prefix="/api/longProjects", + tags=["LongProjects"] ) \ No newline at end of file diff --git a/routers/longProjects.py b/routers/longProjects.py new file mode 100644 index 0000000..69adca5 --- /dev/null +++ b/routers/longProjects.py @@ -0,0 +1,49 @@ +from fastapi import APIRouter, HTTPException +import MySQLdb +from database import get_db_connection + +router = APIRouter() + + +@router.get("/") +def read_longProjects(): + conn = get_db_connection() + if not conn: + raise HTTPException(status_code=503, detail="Service de base de données indisponible.") + + try: + with conn.cursor(MySQLdb.cursors.DictCursor) as cursor: + sql = """ + SELECT + p.id, + p.title, + p.long_description, + p.school, + p.date, + p.repo_link, + p.nb_image, + p.image_name, + GROUP_CONCAT(DISTINCT s.name ORDER BY s.name SEPARATOR ', ') AS skills + FROM + projects p + LEFT JOIN + project_skills ps ON p.id = ps.project_id + LEFT JOIN + skills s ON ps.skill_id = s.id + GROUP BY + p.id; + """ + cursor.execute(sql) + result = cursor.fetchall() + + for project in result: + if project['skills']: + project['skills'] = project['skills'].split(', ') + else: + project['skills'] = [] + + return {"data": result} + except MySQLdb.Error as e: + raise HTTPException(status_code=500, detail=f"Erreur lors de la requête: {e}") + finally: + conn.close() \ No newline at end of file diff --git a/routers/projects.py b/routers/shortProjects.py similarity index 93% rename from routers/projects.py rename to routers/shortProjects.py index 9c668ae..16da9bb 100644 --- a/routers/projects.py +++ b/routers/shortProjects.py @@ -1,4 +1,3 @@ -# routers/skills.py (sans générateur) from fastapi import APIRouter, HTTPException import MySQLdb from database import get_db_connection @@ -7,7 +6,7 @@ router = APIRouter() @router.get("/") -def read_projects(): +def read_shortProjects(): conn = get_db_connection() if not conn: raise HTTPException(status_code=503, detail="Service de base de données indisponible.") @@ -18,7 +17,7 @@ def read_projects(): SELECT p.id, p.title, - p.description, + p.short_description, p.school, p.nb_image, p.image_name,