An open API service indexing awesome lists of open source software.

https://github.com/valentinmadiot/crud-test-2

API RESTful utilisant Node.js et Express, incluant l'authentification, la gestion de données via MongoDB et les opérations CRUD. Sécurisée et validée pour un traitement fiable des informations.
https://github.com/valentinmadiot/crud-test-2

api-testing auth-middleware bcrypt cors crud-operations crypto-js dotenv error-handling express file-upload helmet http-methods jsonwebtoken mongodb mongoose multer nodejs openclassrooms rest-api secure-api

Last synced: 18 days ago
JSON representation

API RESTful utilisant Node.js et Express, incluant l'authentification, la gestion de données via MongoDB et les opérations CRUD. Sécurisée et validée pour un traitement fiable des informations.

Awesome Lists containing this project

README

          



🛒 CRUD Test 2   –   Projet Scolaire

##
📌 Sommaire

    🎨   [**Introduction**](#introduction)

    ⚙️   [**Technologies**](#technologies)

    🎯   [**Fonctionnalités**](#fonctionnalités)

    🧱   [**Schéma & Routes**](#schéma)

    🚀   [**Installation**](#installation)

##
🎨 Introduction

Ce projet est un exercice scolaire réalisé dans le cadre d'un parcours chez **OpenClassrooms**.

Il consiste à construire une API RESTful avec **Node.js**, **Express** et **MongoDB** pour gérer un catalogue de produits.

L'API inclut une authentification sécurisée (**JWT**), une intégration complète à **MongoDB**, et des opérations **CRUD** (Create, Read, Update, Delete).

##
⚙️ Technologies

- **Backend** : Node.js, Express
- **Base de données** : MongoDB (Mongoose)
- **Sécurité** : Bcrypt, Crypto-js, Helmet, Jsonwebtoken
- **Gestion des fichiers** : Multer
- **Validation de schéma** : Mongoose-unique-validator
- **Environnement** : Dotenv
- **Langage** : JavaScript

##
🎯 Fonctionnalités

- CRUD complet sur produits
- Authentification sécurisée avec JWT
- Upload d’images via Multer
- Sécurisation des headers avec Helmet
- Gestion centralisée des erreurs

##
🧱 Schéma & Routes

### 🔧 Schéma Mongoose attendu

```js
mongoose.Schema({
name: { type: String, required: true },
description: { type: String, required: true },
price: { type: Number, required: true },
inStock: { type: Boolean, required: true },
});
```

### 🔌 Endpoints requis

- **GET** `/api/products`
Retourne tous les produits sous la forme :

```json
{ "products": [ ... ] }
```

- **GET** `/api/products/:id`
Retourne le produit correspondant à l’ID :

```json
{ "product": { ... } }
```

- **POST** `/api/products`
Corps de requête attendu :

```json
{
"name": "Nom",
"description": "Description",
"price": 99.99,
"inStock": true
}
```

Retourne le produit nouvellement créé (avec `_id`) :

```json
{ "product": { ... } }
```

- **PUT** `/api/products/:id`
Met à jour un produit existant.
Corps attendu :

```json
{
"name": "Nom",
"description": "Description modifiée",
"price": 120.0,
"inStock": false
}
```

Réponse :

```json
{ "message": "Modified!" }
```

- **DELETE** `/api/products/:id`
Supprime le produit correspondant à l’ID.
Réponse :
```json
{ "message": "Deleted!" }
```

##
🚀 Installation

### ✅ Prérequis

- [Git](https://git-scm.com/)  —  Système de gestion de versions
- [Node.js](https://nodejs.org/fr)  —  Exécuteur local de scripts JavaScript
- [npm](https://www.npmjs.com/)  —  Gestionnaire de paquets JavaScript
- [MongoDB](https://www.mongodb.com/) — Base de données NoSQL
- [Google Chrome](https://www.google.com/)  —  Navigateur moderne
- [Visual Studio Code](https://code.visualstudio.com/)  —  Éditeur de code

### 📥 Cloner le projet

```bash
git clone https://github.com/ValentinMadiot/CRUD-Test-2
cd CRUD-Test-2
```

### 🔧 Configuration de l'environnement

Renommer `.env.exemple` en `.env`

Ajoutez les variables d’environnement dans le fichier `.env` :

```bash
# IDENTIFIANT BASE DE DONNEES (MongoDB)
MONGODB_URI=mongodb+srv://:@cluster0.mongodb.net/myDatabase?retryWrites=true&w=majority

# PASSWORD JWT (JSON Web Token)
JWT_KEY=mon_secret_token
```

### ▶️ Lancer le projet

### Backend

```bash
cd backend
npm install
npm start
```

Backend disponible sur : `http://localhost:8080`

### Frontend

```bash
cd frontend
npm install
npm start
```

Frontend disponible sur : `http://localhost:8081`