From de0aac4769667e37ab5ca69f2c49aab3f2fcb267 Mon Sep 17 00:00:00 2001 From: felix Date: Mon, 26 Feb 2024 17:11:09 +0100 Subject: [PATCH] GET requests --- WebService/pom.xml | 15 +- .../controller/ArticleControler.java | 165 +++++++++++++ .../WebService/exception/ArticleAdvice.java | 17 ++ .../exception/ArticleException.java | 7 + .../SAE/ApiREST/WebService/model/Article.java | 10 + .../WebService/service/IArticleService.java | 24 ++ .../service/StubArticleService.java | 227 ++++++++++++++++++ 7 files changed, 462 insertions(+), 3 deletions(-) create mode 100644 WebService/src/main/java/SAE/ApiREST/WebService/controller/ArticleControler.java create mode 100644 WebService/src/main/java/SAE/ApiREST/WebService/exception/ArticleAdvice.java create mode 100644 WebService/src/main/java/SAE/ApiREST/WebService/exception/ArticleException.java create mode 100644 WebService/src/main/java/SAE/ApiREST/WebService/service/IArticleService.java create mode 100644 WebService/src/main/java/SAE/ApiREST/WebService/service/StubArticleService.java diff --git a/WebService/pom.xml b/WebService/pom.xml index 9f379f5..de41c7d 100644 --- a/WebService/pom.xml +++ b/WebService/pom.xml @@ -5,13 +5,13 @@ org.springframework.boot spring-boot-starter-parent - 3.2.3 + 3.2.2 - SAE.ApiREST + com.example WebService 0.0.1-SNAPSHOT - WebService + tp2 Demo project for Spring Boot 17 @@ -27,6 +27,15 @@ spring-boot-starter-test test + + + org.springframework.boot + spring-boot-starter-web + + + jakarta.persistence + jakarta.persistence-api + diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/controller/ArticleControler.java b/WebService/src/main/java/SAE/ApiREST/WebService/controller/ArticleControler.java new file mode 100644 index 0000000..4449e34 --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/controller/ArticleControler.java @@ -0,0 +1,165 @@ +package SAE.ApiREST.WebService.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import SAE.ApiREST.WebService.exception.ArticleException; +import SAE.ApiREST.WebService.model.Article; +import SAE.ApiREST.WebService.service.IArticleService; + +import java.util.ArrayList; +import java.util.List; + +@Controller +@RequestMapping("/ArticleWebService") +public class ArticleControler { + @Autowired + IArticleService articleService; + + // region POST + + // endregion + + // region PUT + + // endregion + + // region GET + + @GetMapping(value = "/getAllArticle", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getAllArticles() { + ArrayList
results = (ArrayList
) articleService.getAllArticles(); + + if(results.isEmpty()) { + throw new ArticleException("No articles available"); + } + + return results; + } + + @GetMapping(value = "/getArticleById/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody Article getArticlesById(@PathVariable(value = "id") Integer id) { + Article results = articleService.getArticlesById(id); + + if(results == null) { + throw new ArticleException("Undefined id"); + } + + return results; + } + + @GetMapping(value = "/getArticlesByTitle/{title}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getArticlesByTitle(@PathVariable(value = "title") String title) { + ArrayList
results = (ArrayList
) articleService.getArticlesByTitle(title); + + if(results.isEmpty()) { + throw new ArticleException("Undefined title"); + } + + return results; + } + + @GetMapping(value = "/getArticlesByType/{type}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getArticlesByType(@PathVariable(value = "type") Integer type) { + ArrayList
results = (ArrayList
) articleService.getArticlesByType(type); + + if (results.isEmpty()) { + throw new ArticleException(String.format("No content of type %d", type)); + } + + return results; + } + + @GetMapping(value = "/getVisibleArticles", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getVisibleArticles() { + ArrayList
results = (ArrayList
) articleService.getVisibleArticles(); + + if (results.isEmpty()) { + throw new ArticleException("No visible article"); + } + + return results; + } + + @GetMapping(value = "/getInvisibleArticles", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getInvisibleArticles() { + ArrayList
results = (ArrayList
) articleService.getInvisibleArticles(); + + if (results.isEmpty()) { + throw new ArticleException("No invisible article"); + } + + return results; + } + + @GetMapping(value = "/getArticlesAddedBefore/{dateAdded}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getArticlesAddedBefore(@PathVariable(value = "dateAdded") String dateAdded) { + ArrayList
results = (ArrayList
) articleService.getArticlesAddedBefore(dateAdded); + + if (results.isEmpty()) { + throw new ArticleException(String.format("No article added before %t", dateAdded)); + } + return results; + } + + @GetMapping(value = "/getArticlesAddedAfter/{dateAdded}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getArticlesAddedAfter(@PathVariable(value = "dateAdded") String dateAdded) { + ArrayList
results = (ArrayList
) articleService.getArticlesAddedAfter(dateAdded); + + if (results.isEmpty()) { + throw new ArticleException(String.format("No article added after %t", dateAdded)); + } + return results; + } + + @GetMapping(value = "/getArticlesAddedBetween/{beginning}/{end}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getArticlesAddedAfter(@PathVariable(value = "beginning") String beginning, @PathVariable(value = "end") String end) { + ArrayList
results = (ArrayList
) articleService.getArticlesAddedBetween(beginning, end); + + if (results.isEmpty()) { + throw new ArticleException(String.format("No article added between %t and %t", beginning, end)); + } + return results; + } + + @GetMapping(value = "/getArticlesPublishedBefore/{datePublished}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getArticlesPublishedBefore(@PathVariable(value = "datePublished") String datePublished) { + ArrayList
results = (ArrayList
) articleService.getArticlesPublishedBefore(datePublished); + + if (results.isEmpty()) { + throw new ArticleException(String.format("No article published before %t", datePublished)); + } + + return results; + } + + @GetMapping(value = "/getArticlesPublishedAfter/{datePublished}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getArticlesPublishedAfter(@PathVariable(value = "datePublished") String datePublished) { + ArrayList
results = (ArrayList
) articleService.getArticlesPublishedAfter(datePublished); + + if (results.isEmpty()) { + throw new ArticleException(String.format("No article published after %t", datePublished)); + } + + return results; + } + + @GetMapping(value = "/getArticlesPublishedBetween/{beginning}/{end}", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody List
getArticlesPublishedAfter(@PathVariable(value = "beginning") String beginning, @PathVariable(value = "end") String end) { + ArrayList
results = (ArrayList
) articleService.getArticlesPublishedBetween(beginning, end); + + if (results.isEmpty()) { + throw new ArticleException(String.format("No article published between %t and %t", beginning, end)); + } + + return results; + } + + // endregion + + // region DELETE + + // endregion +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/exception/ArticleAdvice.java b/WebService/src/main/java/SAE/ApiREST/WebService/exception/ArticleAdvice.java new file mode 100644 index 0000000..9e57124 --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/exception/ArticleAdvice.java @@ -0,0 +1,17 @@ +package SAE.ApiREST.WebService.exception; + +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.http.HttpStatus; + +@ControllerAdvice +public class ArticleAdvice { + @ResponseBody + @ExceptionHandler(ArticleException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + String articleHandler(ArticleException ex) { + return ex.getMessage(); + } +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/exception/ArticleException.java b/WebService/src/main/java/SAE/ApiREST/WebService/exception/ArticleException.java new file mode 100644 index 0000000..9de657d --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/exception/ArticleException.java @@ -0,0 +1,7 @@ +package SAE.ApiREST.WebService.exception; + +public class ArticleException extends RuntimeException { + public ArticleException(String exception) { + super(exception); + } +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/model/Article.java b/WebService/src/main/java/SAE/ApiREST/WebService/model/Article.java index 49380f2..550d3b0 100644 --- a/WebService/src/main/java/SAE/ApiREST/WebService/model/Article.java +++ b/WebService/src/main/java/SAE/ApiREST/WebService/model/Article.java @@ -12,6 +12,7 @@ import jakarta.persistence.Id; public class Article { @Id @GeneratedValue(strategy = GenerationType.AUTO) + String id; String title; String URL; LocalDate dateAdded; @@ -23,6 +24,7 @@ public class Article { public Article() {} public Article(String title, String URL, LocalDate dateAdded, LocalDate datePublished, Boolean visibility, Integer type) { + this.id = "1"; this.title = title; this.URL = URL; this.dateAdded = dateAdded; @@ -31,6 +33,14 @@ public class Article { this.type = type; } + public String getId() { + return this.id; + } + + public void setId(String id) { + this.id = id; + } + public String getTitle() { return this.title; } diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/service/IArticleService.java b/WebService/src/main/java/SAE/ApiREST/WebService/service/IArticleService.java new file mode 100644 index 0000000..427d987 --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/service/IArticleService.java @@ -0,0 +1,24 @@ +package SAE.ApiREST.WebService.service; + +import java.util.List; + +import SAE.ApiREST.WebService.model.Article; + +public interface IArticleService { + + // region GET + public List
getAllArticles(); + Article getArticlesById(Integer id); + public List
getArticlesByTitle(String title); + public List
getArticlesByType(Integer type); + public List
getVisibleArticles(); + public List
getInvisibleArticles(); + public List
getArticlesAddedBefore(String dateAdded); + public List
getArticlesAddedAfter(String dateAdded); + public List
getArticlesAddedBetween(String beginning, String end); + public List
getArticlesPublishedBefore(String datePublished); + public List
getArticlesPublishedAfter(String datePublished); + public List
getArticlesPublishedBetween(String beginning, String end); + // endregion + +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/service/StubArticleService.java b/WebService/src/main/java/SAE/ApiREST/WebService/service/StubArticleService.java new file mode 100644 index 0000000..2ea238a --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/service/StubArticleService.java @@ -0,0 +1,227 @@ +package SAE.ApiREST.WebService.service; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Service; + +import SAE.ApiREST.WebService.model.Article; + +@Service +public class StubArticleService implements IArticleService { + + // region GET + @Override + public List
getAllArticles() { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.now().minusMonths(2), + true, + 1) + ); + articles.add(new Article( + "moi", + "zaeaeaeazeza", + LocalDate.now().minusMonths(2), + LocalDate.now().minusMonths(3), + false, + 1) + ); + articles.add(new Article( + "eux", + "erfdhdh", + LocalDate.now().minusMonths(3), + LocalDate.now().minusMonths(4), + true, + 1) + ); + articles.add(new Article( + "tout ceux qui le veulent", + "azersdfgg", + LocalDate.now().minusMonths(4), + LocalDate.now().minusMonths(5), + false, + 2) + ); + + return articles; + } + + @Override + public Article getArticlesById(Integer id) { + return new Article( + "azeaeaze", + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.now().minusMonths(2), + true, + 1); + } + + @Override + public List
getArticlesByTitle(String title) { + List
articles = new ArrayList<>(); + + articles.add(new Article( + title, + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.now().minusMonths(2), + true, + 1) + ); + + return articles; + } + + @Override + public List
getArticlesByType(Integer type) { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "aeazeazeaz", + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.now().minusMonths(2), + true, + type) + ); + + return articles; + } + + @Override + public List
getVisibleArticles() { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.now().minusMonths(2), + true, + 1) + ); + + return articles; + } + + @Override + public List
getInvisibleArticles() { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.now().minusMonths(2), + false, + 1) + ); + + return articles; + } + + @Override + public List
getArticlesAddedBefore(String dateAdded) { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.parse(dateAdded, DateTimeFormatter.ISO_DATE).minusMonths(1), + LocalDate.now().minusMonths(2), + true, + 1) + ); + + return articles; + } + + @Override + public List
getArticlesAddedAfter(String dateAdded) { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.parse(dateAdded, DateTimeFormatter.ISO_DATE).plusMonths(1), + LocalDate.now().minusMonths(2), + true, + 1) + ); + + return articles; + } + + @Override + public List
getArticlesAddedBetween(String beginning, String end) { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.parse(beginning, DateTimeFormatter.ISO_DATE), + LocalDate.now().minusMonths(2), + true, + 1) + ); + + return articles; + } + + @Override + public List
getArticlesPublishedBefore(String datePublished) { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.parse(datePublished, DateTimeFormatter.ISO_DATE).plusMonths(2), + true, + 1) + ); + + return articles; + } + + @Override + public List
getArticlesPublishedAfter(String datePublished) { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.parse(datePublished, DateTimeFormatter.ISO_DATE).plusMonths(2), + true, + 1) + ); + + return articles; + } + + @Override + public List
getArticlesPublishedBetween(String beginning, String end) { + List
articles = new ArrayList<>(); + + articles.add(new Article( + "toi", + "azezeaea", + LocalDate.now().minusMonths(1), + LocalDate.parse(end, DateTimeFormatter.ISO_DATE), + true, + 1) + ); + + return articles; + } + // endregion +}