Skip to content

azerty0rslr/Projet_java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

Partie 1

Dans un premier temps je m'occupe tout d'abord de l'installation de Spring Initializr comme écrite sur le TP :
image

Une fois généré, téléchargé et dézippé au plus proche de la racine j'ouvre le projet avec IntelliJ.
On créer ensuite l'arborescence comme demandé dans le TP :
image

Pour être sûre que tout fonctionne, je créer une classe TestController pour tester la connectivité sur Postman et pouvoir continuer le TP :

package tp.example.store;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        return "test fonctionne";
    }
}

Partie 2

Ajouter les dépendances

Je reprends la structure des TP de demo et j'ajoute dans build.gradle :

	// Driver de MySQL
	runtimeOnly 'com.mysql:mysql-connector-j'

	// Starter Spring Data JPA
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

Avant de configurer la connexion MySQL, je créer la database :
image

On configure ensuite la connexion MySQL en reprenant aussi les éléments des TP de demo. On ajoute ça dans application.properties :

spring.application.name=store

# Param bdd
spring.datasource.url=jdbc:mysql://localhost:3306/db_store?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=


# Recreer le schema
# Recréer les tables
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

Ne pas oublier de rebuild gradle et dans project structure de mettre la version 17 :
image

Article.java

package tp.example.store.bo;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Article {

    // Génère un Id auto-increment de l'article
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

    // Pour le titre de l'article
    public String title;
}

ArticleRepository.java

package tp.example.store.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import tp.example.store.bo.Article;

public interface ArticleRepository extends JpaRepository<Article, Long> {
}

ArticleRestController.java

package tp.example.store.rest;

import org.springframework.web.bind.annotation.*;
import tp.example.store.bo.Article;
import tp.example.store.dao.ArticleRepository;

import java.util.List;

@RestController
public class ArticleRestController {

    private ArticleRepository articleRepository;

    public ArticleRestController(ArticleRepository articleRepository) {
        this.articleRepository = articleRepository;
    }

    @GetMapping("/get-all-articles")
    public List<Article> getAll() {
        // Select all dans Article
        List<Article> articles = this.articleRepository.findAll();

        return articles;
    }

    @GetMapping("/trouve/{id}")
    // renvoie l'article si trouvé sinon rien
    public Article getId(@PathVariable Long id) {
        return articleRepository.findById(id).orElse(null);
        // On ne peut pas retirer le orElse sinon erreur ou mettre article en option - voir sur stackoverflow
        // Marche aussi avec get()
    }

    @DeleteMapping("/supprimer/{id}")
    // Sur Postman bien mettre le delete sinon ko code d'erreur
    // Si l'article est supprimé renvoie true
    public boolean delete(@PathVariable Long id) {
        if (articleRepository.existsById(id)) {
            articleRepository.deleteById(id);
            return true;
        }
        // si n'existe pas renvoie false
        return false;
    }

    @PostMapping("/article")
    public String save(@RequestBody Article article) {
        // si l'article existe déjà, il sauvegarde les modifs
        if (articleRepository.existsById(article.id)) {
            articleRepository.save(article);
            return "Article sauvegardé";
        }
        // si l'article n'existe pas, il le crée, ne fonctionne pas et je ne trouve rien de plus sur internet
        articleRepository.save(article);
        return "Article créé";
    }
}

Partie 3

Article.java

J'ajoute pour la partie 3 l'élément suivant :

    // Utilisé sur ArticleService (partie 3 du tp)
    public Long getId() {
        return id;
    }

ApiResponse.java

package tp.example.store.rest;
// On se mets sur la structure du cours 5 (standardiser les réponses)

public class ApiResponse<T> {

    public String code;
    public String message;
    public T data;

    public ApiResponse(String code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
}

ArticleService.java

package tp.example.store.service;

import org.springframework.stereotype.Service;
import tp.example.store.bo.Article;
import tp.example.store.dao.ArticleRepository;
import tp.example.store.rest.ApiResponse;

import java.util.List;
import java.util.Optional;

@Service
public class ArticleService {
    // On reprend aussi la structure du cours 5 (logique métier dans le Service)

    private final ArticleRepository articleRepository;

    public ArticleService(ArticleRepository articleRepository) {
        this.articleRepository = articleRepository;
    }

    // Prend tous les articles de la database
    public ApiResponse<List<Article>> getAll() {

        List<Article> articles = articleRepository.findAll();

        return new ApiResponse<>(
                "202",
                "La liste des articles",
                articles
        );
    }

    // Sort l'article avec l'id correspondant
    public ApiResponse<Article> getId(Long id) {

        Optional<Article> article = articleRepository.findById(id);

        if (article.isPresent()) {
            return new ApiResponse<>(
                    "202",
                    "L'article trouvé",
                    article.get()
            );
        }

        return new ApiResponse<>(
                "703",
                "Data null",
                null
        );
    }

    // Supprime l'article avec l'id correspondant
    public ApiResponse<Void> delete(Long id) {

        if (articleRepository.existsById(id)) {
            articleRepository.deleteById(id);

            return new ApiResponse<>(
                    "202",
                    "Article supprimé",
                    null
            );
        }

        return new ApiResponse<>(
                "703",
                "Article introuvable",
                null
        );
    }

    // Met à jour l'article avec l'id correspondant
    public ApiResponse<Article> save(Article article) {
        // MAJ
        if (articleRepository.existsById(article.getId())) {
            Article updated = articleRepository.save(article);

            return new ApiResponse<>(
                    "203",
                    "L'article modifié",
                    updated
            );
        }

        // Création
        Article created = articleRepository.save(article);

        return new ApiResponse<>(
                "202",
                "L'article crée",
                created
        );
    }
}

ArticleRestController

package tp.example.store.rest;

import org.springframework.web.bind.annotation.*;
import tp.example.store.bo.Article;
import tp.example.store.service.ArticleService;

import java.util.List;

@RestController
// Pour la modification, on reprend la structure du cours pour appeler le service
public class ArticleRestController {

    private final ArticleService articleService;

    public ArticleRestController(ArticleService articleService) {
        this.articleService = articleService;
    }

    @GetMapping("/get-all-articles")
    public ApiResponse<List<Article>> getAll() {
        return articleService.getAll();
    }

    @GetMapping("/articles/{id}")
    public ApiResponse<Article> getId(@PathVariable Long id) {
        return articleService.getId(id);
    }

    @DeleteMapping("/articles/{id}")
    // Void permet de retourner null contrairement à List et à Article
    public ApiResponse<Void> delete(@PathVariable Long id) {
        return articleService.delete(id);
    }

    @PostMapping("/articles")
    public ApiResponse<Article> save(@RequestBody Article article) {
        return articleService.save(article);
    }
}

Sorties de la partie 3

  • En GET /get-all-articles
image
  • En GET /articles/{id}
image
  • En DELETE /articles/{id}
image
  • En POST /articles
image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages