ajout HATEOS et manque 2 tests

Maxime
Maxime POINT 1 year ago
parent 194eff0552
commit e2cf019437

@ -0,0 +1,26 @@
package SAE.ApiREST.WebService.Wrapper;
import SAE.ApiREST.WebService.model.Article;
import SAE.ApiREST.WebService.model.Collect;
public class ArticleCollect {
private Collect collection;
private Article article;
public ArticleCollect() {}
public ArticleCollect(Collect collection, Article article) {
this.collection = collection;
this.article = article;
}
public Collect getCollection() {
return collection;
}
public Article getNewArticle() {
return article;
}
// Setters if necessary
}

@ -0,0 +1,25 @@
package SAE.ApiREST.WebService.Wrapper;
import SAE.ApiREST.WebService.model.Collect;
public class CollectionName {
private Collect collection;
private String newName;
public CollectionName() {}
public CollectionName(Collect collection, String newName) {
this.collection = collection;
this.newName = newName;
}
public Collect getCollection() {
return collection;
}
public String getNewName() {
return newName;
}
// Setters if necessary
}

@ -1,11 +1,14 @@
package SAE.ApiREST.WebService.controller; package SAE.ApiREST.WebService.controller;
import SAE.ApiREST.WebService.Wrapper.ArticleCollect;
import SAE.ApiREST.WebService.Wrapper.CollectionName;
import SAE.ApiREST.WebService.exception.ArticleException; import SAE.ApiREST.WebService.exception.ArticleException;
import SAE.ApiREST.WebService.exception.CollectException; import SAE.ApiREST.WebService.exception.CollectException;
import SAE.ApiREST.WebService.model.Article; import SAE.ApiREST.WebService.model.Article;
import SAE.ApiREST.WebService.model.Collect; import SAE.ApiREST.WebService.model.Collect;
import SAE.ApiREST.WebService.service.ICollectionService; import SAE.ApiREST.WebService.service.ICollectionService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link; import org.springframework.hateoas.Link;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -13,6 +16,7 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
@ -70,7 +74,7 @@ public class CollectController {
// region DELETE // region DELETE
@DeleteMapping(value = "/deleteColletionById/{id}") @DeleteMapping(value = "/deleteColletionById/{id}")
public @ResponseBody EntityModel<Link> deleteColletionById(@RequestParam("id") Integer id){ public @ResponseBody EntityModel<Link> deleteColletionById(@PathVariable("id") Integer id){
if(!collectionService.deleteColletionById(id)) { if(!collectionService.deleteColletionById(id)) {
throw new CollectException("No collections available"); throw new CollectException("No collections available");
} }
@ -79,7 +83,7 @@ public class CollectController {
} }
@DeleteMapping(value = "/deleteColletionByName/{name}") @DeleteMapping(value = "/deleteColletionByName/{name}")
public @ResponseBody EntityModel<Link> deleteColletionByName(@RequestParam("name") String name){ public @ResponseBody EntityModel<Link> deleteColletionByName(@PathVariable("name") String name){
if(!collectionService.deleteColletionByName(name)) { if(!collectionService.deleteColletionByName(name)) {
throw new CollectException("No collections available"); throw new CollectException("No collections available");
} }
@ -88,7 +92,7 @@ public class CollectController {
} }
@DeleteMapping(value = "/deleteAllColletionByName/{name}") @DeleteMapping(value = "/deleteAllColletionByName/{name}")
public @ResponseBody EntityModel<Link> deleteAllColletionByName(@RequestParam("name") String name){ public @ResponseBody EntityModel<Link> deleteAllColletionByName(@PathVariable("name") String name){
if(!collectionService.deleteAllColletionByName(name)) { if(!collectionService.deleteAllColletionByName(name)) {
throw new CollectException("No collections available"); throw new CollectException("No collections available");
} }
@ -99,7 +103,7 @@ public class CollectController {
// region PUT // region PUT
@PutMapping(value = "/addCollection") @PutMapping(value = "/addCollection")
public @ResponseBody EntityModel<Collect> addCollection(@RequestParam("collection") Collect collection){ public @ResponseBody EntityModel<Collect> addCollection(@RequestBody Collect collection){
Collect results = collectionService.addCollection(collection); Collect results = collectionService.addCollection(collection);
return EntityModel.of(results, return EntityModel.of(results,
linkTo(methodOn(CollectController.class).getCollectionById(results.getId())).withSelfRel(), linkTo(methodOn(CollectController.class).getCollectionById(results.getId())).withSelfRel(),
@ -114,32 +118,40 @@ public class CollectController {
} }
@PutMapping(value = "/addCollections") @PutMapping(value = "/addCollections")
public @ResponseBody EntityModel<List<Collect>> addCollections(@RequestParam("collections") List<Collect> collections){ public @ResponseBody CollectionModel<EntityModel<Collect>> addCollections(@RequestBody List<Collect> collections){
List<Collect> results = collectionService.addCollections(collections); List<Collect> results = collectionService.addCollections(collections);
return EntityModel.of(results, List<EntityModel<Collect>> collectModels = results.stream()
linkTo(methodOn(CollectController.class).getAllCollection() .map(collect -> EntityModel.of(collect,
).withRel("getAllCollection")); linkTo(methodOn(CollectController.class).getAllCollection()).withRel("getAllCollection")))
.collect(Collectors.toList());
return CollectionModel.of(collectModels);
} }
// endregion // endregion
// region POST // region POST
@PostMapping(value="/modifyCollectionName", produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value="/modifyCollectionName", produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody EntityModel<Collect> modifyCollectionName(@RequestParam("collection") Collect collection, @RequestParam("name") String name){ public @ResponseBody EntityModel<Collect> modifyCollectionName(@RequestBody CollectionName request) {
Collect results = collectionService.modifyCollectionName(collection,name); String newName = request.getNewName();
Collect collection = request.getCollection();
if(collection == null) {
throw new ArticleException("No articles available");
}
Collect results = collectionService.modifyCollectionName(collection, newName);
// Assuming your modification logic here
return EntityModel.of(results, return EntityModel.of(results,
linkTo(methodOn(CollectController.class).getCollectionById(results.getId())).withSelfRel(), linkTo(methodOn(CollectController.class).getCollectionById(results.getId())).withSelfRel(),
linkTo(methodOn(CollectController.class).getAllArticlesById(results.getId()) linkTo(methodOn(CollectController.class).getAllArticlesById(results.getId())).withRel("getAllArticlesById"),
).withRel("getAllArticlesById"), linkTo(methodOn(CollectController.class).deleteColletionById(results.getId())).withRel("deleteColletionById"),
linkTo(methodOn(CollectController.class).deleteColletionById(results.getId()) linkTo(methodOn(CollectController.class).deleteAllColletionByName(results.getName())).withRel("deleteAllColletionByName"),
).withRel("deleteColletionById"), linkTo(methodOn(CollectController.class).getAllCollection()).withRel("getAllCollection"));
linkTo(methodOn(CollectController.class).deleteAllColletionByName(results.getName())
).withRel("deleteAllColletionByName"),
linkTo(methodOn(CollectController.class).getAllCollection()
).withRel("getAllCollection"));
} }
@PostMapping(value="/modifyCollectionNameById/{id}", produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value="/modifyCollectionNameById/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody EntityModel<Collect> modifyCollectionNameById(@RequestParam("id") Integer id, @RequestParam("name") String name){ public @ResponseBody EntityModel<Collect> modifyCollectionNameById(@PathVariable("id") Integer id, @RequestBody String name){
Collect results = collectionService.modifyCollectionNameById(id,name); Collect results = collectionService.modifyCollectionNameById(id,name);
return EntityModel.of(results, return EntityModel.of(results,
linkTo(methodOn(CollectController.class).getCollectionById(id)).withSelfRel(), linkTo(methodOn(CollectController.class).getCollectionById(id)).withSelfRel(),
@ -157,26 +169,37 @@ public class CollectController {
// region Article // region Article
@GetMapping(value = "/getAllArticlesById/{id}", produces = MediaType.APPLICATION_JSON_VALUE) @GetMapping(value = "/getAllArticlesById/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody EntityModel<List<Article>> getAllArticlesById(@PathVariable(value = "id") Integer id){ public @ResponseBody CollectionModel<EntityModel<Article>> getAllArticlesById(@PathVariable(value = "id") Integer id){
List<Article> results = collectionService.getAllArticlesById(id); List<Article> results = collectionService.getAllArticlesById(id);
if(results == null) { if(results == null) {
throw new ArticleException("No articles available"); throw new ArticleException("No articles available");
} }
List<EntityModel<Article>> collectModels = results.stream()
return EntityModel.of(results, .map(collect -> EntityModel.of(collect,
linkTo(methodOn(CollectController.class).getAllCollection() linkTo(methodOn(CollectController.class).getCollectionById(id)).withRel("getCollection"),
).withRel("getAllCollection")); linkTo(methodOn(CollectController.class).getAllCollection()).withRel("getAllCollection")))
.collect(Collectors.toList());
return CollectionModel.of(collectModels);
} }
@PutMapping(value = "/addArticle", produces = MediaType.APPLICATION_JSON_VALUE) @PutMapping(value = "/addArticle", produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody EntityModel<Collect> addArticle(@RequestParam("collection") Collect collection, @RequestParam("article") Article article){ public @ResponseBody EntityModel<Article> addArticle(@RequestBody ArticleCollect request) {
Article article = request.getNewArticle();
Collect collection = request.getCollection();
if(article == null) {
throw new ArticleException("Invalid article");
}
if(collection == null) {
throw new CollectException("No articles available");
}
Collect results = collectionService.addArticle(collection,article); Collect results = collectionService.addArticle(collection,article);
Article art = results.getAllArticles().get(results.getAllArticles().indexOf(article)); Article art = results.getAllArticles().get(results.getAllArticles().indexOf(article));
return EntityModel.of(results, return EntityModel.of(art,
linkTo(methodOn(CollectController.class).getCollectionById(results.getId())).withSelfRel(), linkTo(methodOn(CollectController.class).getCollectionById(results.getId())).withSelfRel(),
linkTo(methodOn(TeacherController.class).getTeachById(results.getTeacher().getId())).withSelfRel(), //linkTo(methodOn(TeacherController.class).getTeachById(results.getTeacher().getId())).withSelfRel(),
linkTo(methodOn(ArticleControler.class).getArticleById(art.getId())).withSelfRel(), //linkTo(methodOn(ArticleControler.class).getArticleById(art.getId())).withSelfRel(),
linkTo(methodOn(CollectController.class).getAllArticlesById(results.getId()) linkTo(methodOn(CollectController.class).getAllArticlesById(results.getId())
).withRel("getAllArticlesById"), ).withRel("getAllArticlesById"),
linkTo(methodOn(CollectController.class).deleteColletionById(results.getId()) linkTo(methodOn(CollectController.class).deleteColletionById(results.getId())
@ -188,7 +211,16 @@ public class CollectController {
} }
@DeleteMapping(value = "/deleteArticle", produces = MediaType.APPLICATION_JSON_VALUE) @DeleteMapping(value = "/deleteArticle", produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody EntityModel<Collect> deleteArticle(@RequestParam("collection") Collect collection, @RequestParam("article") Article article){ public @ResponseBody EntityModel<Collect> deleteArticle(@RequestBody ArticleCollect request) {
Article article = request.getNewArticle();
Collect collection = request.getCollection();
if(article == null) {
throw new ArticleException("Invalid article");
}
if(collection == null) {
throw new CollectException("No articles available");
}
Collect results = collectionService.deleteArticle(collection,article); Collect results = collectionService.deleteArticle(collection,article);
return EntityModel.of(results, return EntityModel.of(results,
linkTo(methodOn(CollectController.class).getCollectionById(results.getId())).withSelfRel(), linkTo(methodOn(CollectController.class).getCollectionById(results.getId())).withSelfRel(),

Loading…
Cancel
Save