Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

96 products pagination #100

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
Open

96 products pagination #100

wants to merge 3 commits into from

Conversation

Lisadev84
Copy link
Collaborator

[Feature] Implémentation de la pagination avec Spring Data JPA

📌 Description

Cette PR implémente la pagination sur le endpoint exposant des listes de produits afin d'améliorer les performances et l'expérience utilisateur. L'objectif est d'utiliser Spring Data JPA pour gérer efficacement la pagination sans complexifier le contrôleur.

🎯 Contexte

Actuellement, le endpoint retournent l'intégralité des objets produits, ce qui peut entraîner :

  • Des problèmes de performance (requêtes volumineuses, temps de réponse élevé).
  • Un affichage surchargé côté client.

Avec cette implémentation, nous pouvons :
Limiter le nombre d'éléments par requête.
Améliorer la réactivité et la scalabilité de l'application.
Faciliter l'exploration des résultats pour les utilisateurs.

✅ Critères d'acceptation

📌 Pagination

  • Le endpoint concerné acceptent désormais les paramètres page et size.

📌 Utilisation de Spring Data JPA

  • Intégration de Pageable dans le repository.
  • Adaptation du service et du contrôleur pour exploiter cette fonctionnalité.

📌 Tests

  • Ajout de tests unitaires pour vérifier l'interprétation des paramètres et la validité des résultats.

🚀 Changements apportés

  • 🛠 Modification du repositorie pour accepter un objet Pageable.
  • 🔧 Mise à jour du contrôleur pour prendre en compte page et size.
  • 📄 Ajout de tests unitaires
  • 📚 Mise à jour de la documentation API (Swagger/Postman) pour refléter ces changements.

🔗 Issue liée : #96

@Lisadev84 Lisadev84 linked an issue Feb 18, 2025 that may be closed by this pull request
@@ -45,6 +45,7 @@ public class SecurityConfig {

private static final String[] API_URLS_WHITELIST = {
"/auth/**",
"/products/**",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tu peux supprimer le path ici vu que tu l'as rajouté pour la méthode GET. Les autres méthodes devront être accessible uniquement pour les producteurs

@GetMapping("/homePage")
@Operation(summary = " Get available products for home page", description ="Retrieve and display 8 products with stock > 0 and active = true for customers " )
@ApiResponse(responseCode = "200", description = "8 available products displayed")
public ResponseEntity<List<ProductDto>> getHomePageProducts() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'aurais mis la pagination sur les méthodes getAvailableProducts, getProductsByStatus parce qu'on veut la pagination sur toute l'application pas seulement la homepage et pour toutes les méthodes qui peuvent retourner plusieurs produits.
Vu que c'est une pagination il faut que tu puisse récupérer le numéro de la page que l'utilisateur veut consulter. Et si on veut être plus flexible, on peut autoriser de choisir la taille des pages aussi comme ça le front pourra demander d'avoir 8 produits pour la homepage et 20 produits pour d'autres pages s'il a envie sans avoir à dupliquer les méthodes

* @return a list of available products
*/
@Override
public List<ProductDto> getAvailableProductsForHomePage() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comme je disais avec le controller. Faudrait cette logique mais plutôt sur les méthodes getAvailableProducts, getProductsByStatus
et gérer la taille des pages et le numéro de page

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.

Products Pagination
2 participants