Skip to content
 
 

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Grimthars — Backend API

API REST Spring Boot avec authentification JWT et base de données H2 en mémoire.


Prérequis

  • Java 21
  • Maven (ou utiliser ./mvnw inclus dans le projet)

Lancer le projet

./mvnw spring-boot:run

L'API démarre sur http://localhost:8080


Format de réponse

Toutes les réponses suivent ce format uniforme :

{
  "success": true | false,
  "message": "...",
  "data": { ... } | null
}

Authentification

Register — POST /api/auth/register

Body :

{
  "email": "user@example.com",
  "username": "john",
  "password": "123456"
}

Réponse succès (200) :

{
  "success": true,
  "message": "Inscription réussie",
  "data": {
    "token": "eyJhbGci...",
    "email": "user@example.com",
    "username": "john"
  }
}

Réponse erreur (400) :

{
  "success": false,
  "message": "Email déjà utilisé",
  "data": null
}

Login — POST /api/auth/login

Body :

{
  "email": "user@example.com",
  "password": "123456"
}

Réponse succès (200) :

{
  "success": true,
  "message": "Connexion réussie",
  "data": {
    "token": "eyJhbGci...",
    "email": "user@example.com",
    "username": "john"
  }
}

Endpoints protégés

Pour les routes qui nécessitent une authentification, ajouter le header :

Authorization: Bearer <token>

Validation

Champ Règle
email Requis, format email valide
username Requis
password Requis, minimum 6 caractères

Réponse erreur de validation (422) :

{
  "success": false,
  "message": "password : la taille doit être comprise entre 6 et 2147483647",
  "data": null
}


Produits

Ajouter un produit — POST /api/products

Body :

{
  "name": "Laptop Pro",
  "description": "Laptop 15 pouces",
  "price": 1299.99,
  "category": "Informatique",
  "stock": 10
}

Réponse succès (200) :

{
  "success": true,
  "message": "Produit créé",
  "data": {
    "id": 1,
    "name": "Laptop Pro",
    "description": "Laptop 15 pouces",
    "price": 1299.99,
    "category": "Informatique",
    "stock": 10
  }
}

Liste des produits — GET /api/products

Route publique — aucun token requis.

Query params (tous optionnels) :

Paramètre Type Défaut Description
search string Recherche dans le nom et description
category string Filtre par catégorie (exact)
minPrice number Prix minimum
maxPrice number Prix maximum
page int 0 Numéro de page (commence à 0)
size int 10 Nombre d'éléments par page
sortBy string name Champ de tri (name, price, etc.)
sortDir string asc Direction : asc ou desc

Exemples :

# Tous les produits
GET http://localhost:8080/api/products

# Recherche par mot-clé (nom ou description)
GET http://localhost:8080/api/products?search=laptop

# Filtre par catégorie
GET http://localhost:8080/api/products?category=Informatique

# Filtre par prix
GET http://localhost:8080/api/products?minPrice=50&maxPrice=500

# Pagination (page 2, 5 éléments par page)
GET http://localhost:8080/api/products?page=1&size=5

# Tri par prix décroissant
GET http://localhost:8080/api/products?sortBy=price&sortDir=desc

# Tout combiné
GET http://localhost:8080/api/products?search=casque&category=Audio&minPrice=20&maxPrice=200&page=0&size=5&sortBy=price&sortDir=asc

Réponse succès (200) :

{
  "success": true,
  "message": "Produits récupérés",
  "data": {
    "content": [
      {
        "id": 1,
        "name": "Laptop Pro 15",
        "description": "Laptop haute performance 15 pouces",
        "price": 1299.99,
        "category": "Informatique",
        "stock": 10
      }
    ],
    "currentPage": 0,
    "totalPages": 2,
    "totalElements": 10,
    "size": 5
  }
}

Console H2 (dev uniquement)

Accès à la base en mémoire via navigateur : http://localhost:8080/h2-console

Champ Valeur
JDBC URL jdbc:h2:mem:grimtharsdb
Username sa
Password (vide)

About

Backend app Grimthars

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages