Limerio/final-test-sql

★ 0Forks 0TypeScriptGitHub ↗Compare

README

Final test sql

Installation des dépendances

npm install

Lancer le serveur web

npm run dev

Utilisation de Docker

Pour lancer la base de données.

docker compose up -d

Liste des endpoints

Regarder dans le fichier swagger.json

Initialisation de la base de donnée

Regarder dans le fichier docker/init.sql

Database schema

erDiagram
    categories {
        UUID id PK "gen_random_uuid()"
        VARCHAR category_name
        TEXT description
    }

    suppliers {
        UUID id PK "gen_random_uuid()"
        VARCHAR company_name
        VARCHAR contact_name
        TEXT address
        VARCHAR phone
        VARCHAR email
    }

    products {
        UUID id PK
        VARCHAR reference
        VARCHAR product_name
        DECIMAL unit_price
        INT stock_quantity
        UUID category_id FK
    }

    product_suppliers {
        UUID product_id PK,FK
        UUID supplier_id PK,FK
    }

    customers {
        UUID id PK "gen_random_uuid()"
        VARCHAR last_name
        VARCHAR first_name
        TEXT address
        VARCHAR phone
        VARCHAR email
    }

    orders {
        UUID id PK "gen_random_uuid()"
        UUID customer_id FK
        DATETIME order_date
        VARCHAR status
    }

    order_details {
        UUID order_id PK,FK
        UUID product_id PK,FK
        INT quantity
        DECIMAL unit_price
    }

    categories ||--o{ products : has
    products ||--o{ product_suppliers : has
    suppliers ||--o{ product_suppliers : supplies
    customers ||--o{ orders : places
    orders ||--o{ order_details : contains
    products ||--o{ order_details : "ordered in"
Loading

Vérification après la version V1

Notre application possèdent plusieurs failles de sécurité :

  • Injection SQL (concaténation de chaîne),
  • Tout le monde peut faire des actions comme supprimer un fournisseur,
  • Les CORS ne sont pas configurés de ce fait tout le monde peut faire des actions sur notre API,
  • Aucune vérification en amont si le fournisseur existe ou non quand la requête /api/products/:productId/suppliers,
  • Aucune contrainte unicité n'a été mit sur le champ name dans la table categories. Même chose pour les tables :
    • suppliers,
    • products.
  • Aucune contraite n'a été mis sur le champ email dans la table customers,
  • Aucune gestion des erreurs quand par exemple un customer n'est pas trouvé.

Vérification après la version V2

De meilleur vérification ont été mise en place :

  • Vérification des données en entrée,
  • CORS configuré,
  • Une meilleur gestion des contraintes d'unicité,
  • Une meilleur gestion des erreurs.
  • Ajout de plusieurs contraints sur les différentes tables.

Contributors

Limerio

Issues