Skip to content

chore: remove code review defect comments (exercise code, no hints) - #2

Draft
hashcode-adrien with Copilot wants to merge 3 commits into
mainfrom
copilot/remove-defect-comments-code-review
Draft

hashcode-adrien with Copilot wants to merge 3 commits into
mainfrom
copilot/remove-defect-comments-code-review

Conversation

Copilot AI commented Apr 17, 2026 •

Copy link
Copy Markdown

Strips all in-source comments that explicitly signal intentional defects from the interview exercise codebase. The bugs, security flaws, and bad practices are fully preserved — only the hint text is removed so candidates can't trivially locate issues by searching for Defect, TODO, N+1, etc.

Removed comment categories

  • Backend (C#) — // Defect: …, // TODO: fix later, inline catch annotations, and relational hints (e.g. // Relation Orders (pour N+1)) across Program.cs, UsersController.cs, UserService.cs, User.cs, CreateUserRequest.cs
  • Frontend (TS/React) — // Defect: … and {/* Defect: … */} blocks across usersApi.ts, useUsers.ts, UserList.tsx, UserCard.tsx, UserForm.tsx, App.tsx

What is unchanged

All intentional defects remain intact: SQL injection via string concatenation, async void, .Result blocking call, Singleton DbContext, open CORS, XSS via dangerouslySetInnerHTML, direct state mutation, missing clearInterval, key={index}, hardcoded secrets, etc.

Original prompt

À partir de la branche/source de la PR #1 (feature/user-management), crée une nouvelle branche.
Sur cette nouvelle branche :

  • Supprime TOUS les commentaires dans le code backend (C#) et frontend (React/TypeScript) qui signalent ou expliquent un défaut volontaire ou qui mentionnent explicitement des bugs, points à revoir, défauts, TODOs relatifs aux consignes de l’entretien, etc. (ex : // Défaut, // Bug volontaire, // TODO: supprimer ce hack, // FIXME: ce n’est pas secure, etc.)
  • NE corrige PAS les bugs/défauts eux-mêmes ni leur comportement : seul le texte du commentaire est retiré.
  • Préserve tous les autres commentaires “neutres” du code si existants.
  • Ouvre une nouvelle Pull Request vers main — le code doit être identique à la PR feat: user management feature (C# API + React frontend) — interview code review exercise #1 mais sans les commentaires explicitement liés aux défauts/test exercices interview.

Titre PR suggéré : chore: remove code review defect comments (exercise code, no hints)
Description : “Supprime tous les commentaires signalant explicitement un défaut (‘defect’, ‘TODO’, ‘exercice’, etc.) du code backend et frontend. Le code conserve ses défauts d’origine pour l’entretien, mais n’affiche plus de remarques dans les commentaires sources.”

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: Je vais faire passer un entretien technique à un développeur fullstack Sénior C# et React.
Je souhaite l'interroger en lui posant des questions techniques sur une pull request sur laquelle il y aurait plusieurs points à revoir.
Créer le code (qui contient des erreurs) et fais la PR. Explique moi tous les points pour lesquels il devrait faire un commentaire.

Assistant: J'ai lancé la création de la Pull Request avec un code volontairement truffé de défauts (C# + React) — en attente de ta confirmation pour que l'agent démarre.

En parallèle, voici la grille de revue (tous les points sur lesquels le candidat devrait commenter). Tu pourras l'utiliser pendant l'entretien :


🎯 Grille d'évaluation — points attendus en revue

🟦 Backend C# / ASP.NET Core

🔴 Sécurité (bloquants)

  1. Injection SQL dans UserService.GetByName — concaténation de name dans FromSqlRaw / ExecuteSqlRaw. Doit utiliser des paramètres (FromSqlInterpolated ou paramètres nommés) ou passer par LINQ.
  2. Mot de passe en clair — stocké sans hash (BCrypt / Argon2 / PBKDF2 attendu) et renvoyé dans la réponse API.
  3. Exposition de l'entité de domaine — le contrôleur renvoie l'entité User complète (Password, InternalNotes, Email). Doit utiliser un DTO / ViewModel.
  4. CORS AllowAnyOrigin — beaucoup trop permissif, à restreindre à une liste d'origines connues.
  5. Secrets en dur (appsettings.json + constantes dans le code) — doivent venir de variables d'environnement / User Secrets / Key Vault.
  6. [AllowAnonymous] sur le contrôleur entier — aucune authentification sur des endpoints sensibles.
  7. DELETE exposé en HttpGet — viole les conventions REST et permet la suppression par simple URL (CSRF trivial).

🟠 Architecture / Async

  1. async void sur CreateUser — impossible à attendre / catcher, doit être async Task.
  2. .Result / .Wait() dans le contrôleur — risque de deadlock, à remplacer par await.
  3. Aucun CancellationToken propagé jusqu'à la DB.
  4. DbContext en Singleton — DbContext n'est pas thread-safe. Doit être AddDbContext (Scoped).
  5. SqlConnection sans using — fuite de ressources.

🟠 Performance

  1. Pas de pagination sur GetAll — Skip/Take attendus.
  2. Problème N+1 — chargement des Orders dans une boucle. Utiliser .Include(u => u.Orders).

🟠 Qualité / Observabilité

  1. Validation absente — pas de [Required], [EmailAddress], pas de ModelState.IsValid.
  2. catch (Exception) { } silencieux — avale les erreurs.
  3. Console.WriteLine au lieu de ILogger<T>.
  4. Routing incohérent — mélange [Route] / [HttpGet("users")], verbes HTTP mal utilisés.
  5. Aucun test unitaire.

🟩 Frontend React / TypeScript

🔴 Sécurité

  1. XSS — dangerouslySetInnerHTML sur user.bio sans sanitization (DOMPurify).
  2. Clé d'API dans le front (API_KEY = "sk-live-...") — une clé côté client n'est jamais secrète.
  3. Input mot de passe en type="text".
  4. URL d'API en dur — doit passer par process.env.REACT_APP_* / config.

🟠 Bugs React

  1. useEffect deps manquantes — searchTerm non listé → stale closure.
  2. key={index} dans .map() — bug de réconciliation sur tri/suppression.
  3. Mutation directe du state (users.push(...)) — React ne re-render pas correctement.
  4. Formulaire non contrôlé (document.getElementById) — anti-pattern React.
  5. setInterval sans clearInterval dans le cleanup du useEffect — fuite mémoire.

🟠 UX / Robustesse

  1. Aucun état loading / error, pas de try/catch autour des fetch.
  2. **Aucune validat...

This pull request was created from Copilot chat.

Copilot AI and others added 2 commits April 17, 2026 13:44
Copilot AI changed the title [WIP] Chore: remove code review defect comments (exercise code, no hints) chore: remove code review defect comments (exercise code, no hints) Apr 17, 2026
Copilot AI requested a review from hashcode-adrien April 17, 2026 13:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants