Cette analyse examine l'alignement entre le GroupController et les schémas OpenAPI pour identifier les incohérences, les schémas inutilisés et les améliorations nécessaires pour une parfaite conformité.
| Endpoint du Controller | Schéma de Réponse Utilisé | Service Method | Format de Données Retourné |
|---|---|---|---|
createGroup |
GroupSuccessResponseSchema |
GroupService.createGroup() |
{ id, name, description, familyId, inviteCode, createdAt, updatedAt, userRole, ownerFamily, familyCount, scheduleCount } |
joinGroup |
GroupSuccessResponseSchema |
GroupService.joinGroupByInviteCode() |
GroupMembership object |
getUserGroups |
GroupsSuccessResponseSchema |
GroupService.getUserGroups() |
Array<GroupResponse> |
getGroupFamilies |
GroupsSuccessResponseSchema |
GroupService.getGroupFamilies() |
❌ INCOHÉRENCE - Retourne tableau d'objets families, pas de groupes |
updateFamilyRole |
FamilyGroupMemberSuccessResponseSchema |
GroupService.updateFamilyRole() |
FamilyGroupMember object |
removeFamilyFromGroup |
SimpleSuccessResponseSchema |
GroupService.removeFamilyFromGroup() |
{ success: true, message: string } |
updateGroup |
GroupSuccessResponseSchema |
GroupService.updateGroup() |
GroupResponse object |
deleteGroup |
SimpleSuccessResponseSchema |
GroupService.deleteGroup() |
{ success: true, message: string } |
leaveGroup |
SimpleSuccessResponseSchema |
GroupService.leaveGroup() |
{ success: true, message: string } |
getWeeklySchedule |
ScheduleSuccessResponseSchema |
SchedulingService.getWeeklySchedule() |
❌ ERREUR - Service n'existe pas |
inviteFamilyToGroup |
GroupInvitationSuccessResponseSchema |
GroupService.inviteFamilyById() |
GroupInvitation object |
getPendingInvitations |
PendingInvitationsSuccessResponseSchema |
GroupService.getPendingInvitations() |
Array<GroupInvitation> |
cancelInvitation |
SimpleSuccessResponseSchema |
GroupService.cancelInvitation() |
{ success: true, message: string } |
validateInviteCode |
GroupInvitationValidationSuccessResponseSchema |
GroupService.validateInvitationCode() |
{ valid, group, invitation } |
validateInviteCodeWithAuth |
InviteCodeValidationSuccessResponseSchema |
GroupService.validateInvitationCodeWithUser() |
{ valid, family } |
searchFamilies |
FamilySearchSuccessResponseSchema |
GroupService.searchFamiliesForInvitation() |
Array<FamilySearchResult> |
- Problème: L'endpoint
/groups/{groupId}/familiesutiliseGroupsSuccessResponseSchemamais retourne des familles, pas des groupes - Données réelles retournées: Array d'objets avec
{ id, name, role, isMyFamily, canManage, admins } - Schéma attendu: Devrait utiliser
FamilySearchSuccessResponseSchemaou créer un nouveau schémaGroupFamiliesSuccessResponseSchema
- Problème:
SchedulingService.getWeeklySchedule()n'existe pas - Import:
import { SchedulingService } from '../services/SchedulingService';mais le fichier n'existe pas - Impact: L'endpoint
/groups/{groupId}/scheduleéchouera
- Problème:
joinGroupByInviteCode()retourne unGroupMembershipmais utiliseGroupSuccessResponseSchema - Données attendues:
GroupMembershipSchemaavec{ familyId, groupId, role, joinedAt, family?, group? } - Schéma utilisé:
GroupResponseSchema(structure différente)
Les schémas suivants sont définis dans responses.ts mais jamais utilisés dans le GroupController:
FamilyInvitationSuccessResponseSchema- Pour les invitations familiales (hors contexte groupes)InvitationCreationResponseSchema- Pour la création d'invitations génériquesPermissionsSuccessResponseSchema- Pour les réponses de permissionsVehicleRemovedSuccessResponseSchema- Spécifique aux véhicules
- Services: Retournent
Date.toISOString()(ex:group.createdAt.toISOString()) - Schémas: Utilisent
z.iso.datetime()- ✅ CORRECT - Validation: Les schémas acceptent correctement les chaînes ISO 8601
- Prisma: Retourne des nombres natifs pour
familyCount,scheduleCount - Schémas: Utilisent
z.number()- ✅ CORRECT
- Services: Retournent des valeurs enum (ex:
userRole: 'ADMIN' | 'MEMBER') - Schémas: Utilisent
z.enum(['ADMIN', 'MEMBER'])- ✅ CORRECT
// Schéma actuel - Toutes les propriétés requises
{
id: string // ✓
name: string // ✓
description: string | null // ✓ (nullable correct)
familyId: string // ✓
inviteCode: string // ✓
createdAt: string // ✓
updatedAt: string // ✓
userRole: 'ADMIN' | 'MEMBER' // ✓
ownerFamily: OwnerFamilySchema // ✓
familyCount: number // ✓
scheduleCount: number // ✓
}- scheduleCount optionnel dans schéma mais toujours présent dans les retours de service
- family dans
FamilyGroupMemberSchemamarqué comme optionnel mais parfois inclus
// Créer nouveau schéma dans responses.ts
export const GroupFamiliesSuccessResponseSchema = createSuccessResponseSchema(
z.array(z.object({
id: z.cuid(),
name: z.string(),
role: z.enum(['OWNER', 'ADMIN', 'MEMBER']),
isMyFamily: z.boolean(),
canManage: z.boolean(),
admins: z.array(z.object({
name: z.string(),
email: z.email(),
})),
}))
);
// Dans GroupController.ts ligne 205
sendSuccessResponse(res, 200, GroupFamiliesSuccessResponseSchema, families);// Dans GroupController.ts ligne 135
sendSuccessResponse(res, 200, GroupMembershipSuccessResponseSchema, membership);
// Ajouter dans responses.ts
export const GroupMembershipSuccessResponseSchema = createSuccessResponseSchema(
GroupMembershipSchema
);// Créer fichier backend/src/services/SchedulingService.ts
export class SchedulingService {
async getWeeklySchedule(groupId: string, week?: string) {
// Implémenter la logique de récupération du planning hebdomadaire
}
}// Dans GroupController.ts, supprimer l'import manquant:
// import { SchedulingService } from '../services/SchedulingService';Ajouter des schémas d'erreur spécifiques pour chaque type d'erreur dans les réponses OpenAPI.
- Structure cohérente: La plupart des endpoints suivent le pattern
sendSuccessResponse() - Validation OpenAPI: Utilisation systématique des schémas pour la validation
- Gestion des erreurs: Centralisée via
errorHandler - Logging: Exhaustif dans toutes les méthodes
- Sécurité: Vérification des permissions et authentification
- Endpoints totaux: 16
- Endpoints corrects: 11 (68.75%)
- Endpoints avec problèmes: 5 (31.25%)
- Problèmes critiques: 2
- Recommandations: 5
- Créer SchedulingService.ts - Bloquant pour l'endpoint schedule
- Corriger le schéma getGroupFamilies - Incohérence majeure
- Corriger le schéma joinGroup - Mauvais type de réponse
- Tests de validation post-corrections
- Mise à jour documentation OpenAPI après corrections