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
+}