Skip to content

Instantly share code, notes, and snippets.

@ddtraceweb
Last active November 21, 2023 16:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ddtraceweb/dafe84e5830db09d7885070444a4b3c3 to your computer and use it in GitHub Desktop.
Save ddtraceweb/dafe84e5830db09d7885070444a4b3c3 to your computer and use it in GitHub Desktop.
Test technique Symfony / Api Platform / Postgres

Le test se décompose en trois parties:

  1. Questions Théoriques (30 minutes)
  2. Exercices de Codage Pratiques (1 heure)
  3. Problèmes de Conception d'API et de Base de Données (30 minutes)

Partie 1: Questions Théoriques (30 minutes)

  1. Symfony:

    • Décrivez le processus de requête/réponse dans Symfony.
    • Expliquez ce qu'est un service dans Symfony et comment un service est-il enregistré et utilisé?
    • Quelle est la différence entre une Entity et un Model dans Symfony?
  2. API Platform:

    • Quels sont les avantages d'utiliser API Platform avec Symfony?
    • Comment sécurisez-vous une API dans API Platform?
    • Expliquez ce que sont les (DataPersister et DataProvider) ou (StateProcessor et StateProvider) et leur utilité.
  3. PostgreSQL:

    • Quelles sont les différences entre les types de données TEXT et VARCHAR en PostgreSQL?
    • Comment implémenteriez-vous des index full-text dans PostgreSQL?
    • Quelles sont les propriétés ACID en relation avec PostgreSQL?

Partie 2: Exercices de Codage Pratiques (1 heure)

  1. Création d'une API avec Symfony et API Platform:

    • Développez une petite API avec Symfony et API Platform qui permet de gérer des Utilisateurs et des Articles. Les utilisateurs peuvent avoir plusieurs articles et chaque article appartient à un seul utilisateur.
    • Implémentez une fonctionnalité de création, lecture, et suppression d'articles.
    • Assurez-vous que seuls les propriétaires des articles ou un admin peuvent modifier ou supprimer un article.
  2. Manipulation de données avec PostgreSQL:

    • Écrivez une requête SQL pour trouver tous les articles dont le titre contient un mot spécifique.

    • Transaction SQL pour la gestion de l'inventaire d'articles:

      • En supposant que la table des articles est nommée articles et qu'elle contient une colonne quantite, écrivez une transaction SQL qui accomplit les tâches suivantes :

        1. Met à jour la quantite d'un article spécifié par son ID.
        2. Enregistre cette modification dans une table d'audit nommée audit_articles qui contient les colonnes article_id, quantite_avant, quantite_apres, timestamp et modifie_par.
      • Assurez-vous que l'opération est effectuée de manière atomique et que les changements ne seront appliqués que si les deux opérations réussissent.

      • Utilisez des instructions SQL pour démontrer comment vous gérez les erreurs et les transactions.

      Consigne pour l'exercice:

    BEGIN;
    
    -- Supposons que l'ID de l'article à mettre à jour est 1 et la nouvelle quantité est 20.
    -- L'utilisateur effectuant la mise à jour a l'ID 42.
    
    -- Trouver la quantité actuelle avant la mise à jour pour l'enregistrer dans l'audit.
    SELECT quantite INTO current_quantity FROM articles WHERE id = 1;
    
    -- Mettre à jour la quantité de l'article.
    UPDATE articles SET quantite = 20 WHERE id = 1;
    
    -- Insérer la modification dans la table d'audit.
    INSERT INTO audit_articles(article_id, quantite_avant, quantite_apres, timestamp, modifie_par)
    VALUES (1, current_quantity, 20, NOW(), 42);
    
    -- Vérifier que les deux opérations ont réussi avant de valider la transaction.
    IF FOUND THEN
        COMMIT;
    ELSE
        ROLLBACK;
    END IF;

    Note pour le candidat:

    • Remplacez les valeurs de l'ID de l'article, la nouvelle quantité, et l'ID de l'utilisateur par des variables si nécessaire.
    • Assurez-vous que vos transactions SQL gèrent correctement les cas d'erreurs pour préserver l'intégrité des données.
    • Expliquez vos choix et vos hypothèses dans les commentaires du code.

Partie 3: Problèmes de Conception d'API et de Base de Données (30 minutes)

  1. Conception d'une API RESTful:

    • Concevez des endpoints pour une API qui permet de gérer un magasin en ligne. Vous devez inclure des endpoints pour les produits, les catégories de produits, et les commandes.
    • Discutez des méthodes HTTP que vous utiliseriez pour chaque endpoint et pourquoi.
    • Expliquez comment vous géreriez l'authentification et l'autorisation dans cette API.
  2. Modélisation de Base de Données:

    • Fournissez un schéma de base de données pour la gestion d'une bibliothèque qui inclut des tables pour les livres, auteurs, et prêts. (diagramme falcultatif)
    • Quelles seraient les clés primaires et les clés étrangères?
    • Comment modéliseriez-vous une relation many-to-many entre les livres et les auteurs?

Consignes Supplémentaires pour le Candidat:

  • Pour la partie codage, vous pouvez utiliser des outils comme Symfony CLI, PHPStorm, ou d'autres IDEs de votre choix pour écrire et tester votre code.
  • Assurez-vous de commenter votre code pour expliquer votre logique.
  • Vous pouvez utiliser la documentation officielle de Symfony, API Platform, et PostgreSQL si nécessaire.

Critères d'Évaluation:

  • Compréhension des principes de base et avancés de Symfony, API Platform et PostgreSQL.
  • Qualité et propreté du code.
  • Bonnes pratiques de développement et de sécurité.
  • Capacité à suivre les instructions et à répondre aux exigences du problème.
  • Justification des choix de conception et d'implémentation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment