8730 sujets

Développement web côté serveur, CMS

Bonjour!

Je suis en train d'écrire une API pour un projet de cours (Node + Koa en Typescript et MySQL pour la BDD).

J'ai une table "garment", qui est liée à "garment_has_color" et "garment_has_style" qui sont respectivement liées aux tables "color" et "style" (en gros ce sont des relations n:n, 1 "garment" peut avoir n "color" et 1 "color" peut être liée à n "garment", identique pour "style").

Ce que j'aimerais faire :
J'appel l'API sur cette route : /user/{id de l'utilisateur en question}/garment/all, et j'aimerais retourner la liste de tout ses "garment" (donc une row par garment) avec les "color" et "style" liés.

Ce que j'ai pour l'instant :
Pour l'instant, voilà mon SQL

SELECT garment.*, 
GROUP_CONCAT(DISTINCT color.id_color, ';', color.label_color, ';', color.hex_color, ';', color.rgb_color SEPARATOR '@') as has_colors,
GROUP_CONCAT(DISTINCT style.id_style, ';', style.label_style SEPARATOR '@') as has_styles
FROM garment
INNER JOIN garment_has_color ON garment.id_garment = garment_has_color.garment_id_garment
INNER JOIN color ON garment_has_color.color_id_color = color.id_color
INNER JOIN garment_has_style ON garment.id_garment = garment_has_style.garment_id_garment
INNER JOIN style ON garment_has_style.style_id_style = style.id_style
WHERE garment.user_id_user = ?
GROUP BY garment.id_garment


Ce SQL me permet de bien récupérer le contenu de ma table "garment" ainsi que les "color" et "style" liés mais avec le GROUP_CONCAT(), ce qui fait que j'ai pas mal de traitement à faire côté Node pour faire correspondre ces résultats à mes Classes / Interfaces (splité plusieurs fois les strings retournés dans les GROUP_CONCAT(), convertir les types etc).

Si je fais sans les GROUP_CONCAT() et le GROUP BY à la fin, je vais récupérer plusieurs lignes par "garment" si il est lié à plusieurs "color" ou "style" donc mes retours ne seraient plus valide...

Du coup ma question, quelle serait la meilleur solution pour récupérer une row par "garment" même si le "garment" est lié à plusieurs "color" ou "style" et qui m'eviterait le plus de traitement en back ?

Merci beaucoup Smiley biggrin