diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/controller/CollectController.java b/WebService/src/main/java/SAE/ApiREST/WebService/controller/CollectController.java new file mode 100644 index 0000000..8375429 --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/controller/CollectController.java @@ -0,0 +1,11 @@ +package SAE.ApiREST.WebService.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller + @RequestMapping("/CollectWebService") + public class CollectController { + + } + diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/controller/TeacherController.java b/WebService/src/main/java/SAE/ApiREST/WebService/controller/TeacherController.java new file mode 100644 index 0000000..41474ea --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/controller/TeacherController.java @@ -0,0 +1,99 @@ +package SAE.ApiREST.WebService.controller; + +import SAE.ApiREST.WebService.exception.TeacherException; +import SAE.ApiREST.WebService.model.Teacher; +import SAE.ApiREST.WebService.service.ITeacherService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; + +@Controller +@RequestMapping("/ProfWebService") +public class TeacherController { + @Autowired + private ITeacherService iTeacherServ; + + + public TeacherController(ITeacherService iserv) { + this.iTeacherServ = iserv; + } + + @GetMapping(value = "/all", produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseStatus(HttpStatus.OK) + public @ResponseBody CollectionModel getAllTeacher(){ + return CollectionModel.of( + iTeacherServ.getAllTeacher(), + linkTo(methodOn(TeacherController.class).getAllTeacher()).withSelfRel()); + } + @PostMapping(value = "addTeacher",produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseStatus(HttpStatus.CREATED) + public @ResponseBody EntityModel createTeacher( @RequestBody Teacher teach){ + + return EntityModel.of(teach, + linkTo(methodOn(TeacherController.class).createTeacher(teach)).withSelfRel(), + linkTo(methodOn(TeacherController.class).getAllTeacher()).withRel("all")); + } + @GetMapping(value = "/getid/{id}") + public @ResponseBody EntityModel getTeachById(@PathVariable("id") Integer id){ + Teacher tt = iTeacherServ.getTeacherById(id); + if( tt == null ){ + throw new TeacherException("No teacher found for this id !"); + } + return EntityModel.of(tt, + linkTo(methodOn(TeacherController.class).getTeachById(id)).withSelfRel(), + linkTo(methodOn(TeacherController.class).getAllTeacher()).withRel("all")); + } + @GetMapping(value = "/getusername/{username}") + public @ResponseBody EntityModel getTeachByUsername(@PathVariable("username") String username) { + Teacher tt = iTeacherServ.getTeacherByUsername(username); + if (tt == null) { + throw new TeacherException("No teacher found for this username"); + } + return EntityModel.of(tt, + linkTo(methodOn(TeacherController.class).getTeachByUsername(username)).withSelfRel(), + linkTo(methodOn(TeacherController.class).getAllTeacher()).withRel("all")); + } + @GetMapping( value = "/getmail/{mail}" ) + public @ResponseBody EntityModel getTeachByMail(@PathVariable("mail") String mail) { + Teacher tt = iTeacherServ.getTeacherByMail(mail); + if( tt == null ) { + throw new TeacherException("No teacher found for this mail"); + } + return EntityModel.of(tt, + linkTo(methodOn(TeacherController.class).getTeachByMail(mail)).withSelfRel(), + linkTo(methodOn(TeacherController.class).getAllTeacher()).withRel("all")); + } + @GetMapping( value = "/getdate/{date}" ) + public @ResponseBody Teacher getTeachByDate(@PathVariable("date") String date) { + Teacher tt = iTeacherServ.getTeacherByMail(date); + if( tt == null ) { + throw new TeacherException("No teacher found for this mail"); + } + return tt; + } + @PutMapping( value = "/modify/{username}" ) + public @ResponseBody EntityModel modifyTeachUsername(@PathVariable("username") String username, Teacher tt){ + if( username == "" ){ + throw new TeacherException("Username provided for modification is empty"); + } + iTeacherServ.modifyUsername(tt,username); + return EntityModel.of(tt, + linkTo(methodOn(TeacherController.class).modifyTeachUsername(username,tt)).withSelfRel(), + linkTo(methodOn(TeacherController.class).getAllTeacher()).withRel("all")); + } + @DeleteMapping( value = "delete") + public @ResponseBody EntityModel> deleteTeacher(Integer id){ + return EntityModel.of(iTeacherServ.deleteTeacher(id), + linkTo(methodOn(TeacherController.class).deleteTeacher(id)).withSelfRel(), + linkTo(methodOn(TeacherController.class).getAllTeacher()).withRel("all")); + } +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/exception/TeacherAdvice.java b/WebService/src/main/java/SAE/ApiREST/WebService/exception/TeacherAdvice.java new file mode 100644 index 0000000..e781d8f --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/exception/TeacherAdvice.java @@ -0,0 +1,17 @@ +package SAE.ApiREST.WebService.exception; + +import org.springframework.http.HttpStatus; +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; + +@ControllerAdvice +public class TeacherAdvice { + @ResponseBody + @ExceptionHandler(TeacherException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public String teacherNFHandler( TeacherException e) { + return e.getMessage(); + } +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/exception/TeacherException.java b/WebService/src/main/java/SAE/ApiREST/WebService/exception/TeacherException.java new file mode 100644 index 0000000..ee61655 --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/exception/TeacherException.java @@ -0,0 +1,7 @@ +package SAE.ApiREST.WebService.exception; + +public class TeacherException extends RuntimeException { + public TeacherException(String exception) { + super(exception); + } +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/model/Collect.java b/WebService/src/main/java/SAE/ApiREST/WebService/model/Collect.java new file mode 100644 index 0000000..2c8e85e --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/model/Collect.java @@ -0,0 +1,70 @@ +package SAE.ApiREST.WebService.model; +import jakarta.persistence.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Collect { + @Id + @GeneratedValue(strategy= GenerationType.AUTO) + private final long isbn = 0; + @Column(name = "articles") + private ArrayList
articles; + @Column(name = "name") + private String name; + @Column(name = "teacher") + private Teacher teacher; + + public Collect(String name, Teacher teacher){ + this.name = name; + this.teacher = teacher; + this.articles = new ArrayList
(); + } + + public Collect() { + } + + // region Article + public long getId(){ + return isbn; + } + // endregion + + // region Article + public List
getAllArticles(){ + return articles; + } + + // region addArticle + public void addArticle(Article article){ + if(!this.articles.contains(article)){ + this.articles.add(article); + } + } + public void addArticles(List
articles){ + for(Article article : articles){ + addArticle(article); + } + } + // endregion + + // region removeArticle + public void removeArticle(Article article){ + this.articles.remove(article); + } + public void removeArticles(List
articles){ + this.articles.removeAll(articles); + } + // endregion + // endregion + + // region name + public String getName(){ + return name; + } + public void setName(String name){ + this.name = name; + } + // endregion +} \ No newline at end of file diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/model/Teacher.java b/WebService/src/main/java/SAE/ApiREST/WebService/model/Teacher.java new file mode 100644 index 0000000..dfe9bfb --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/model/Teacher.java @@ -0,0 +1,59 @@ +package SAE.ApiREST.WebService.model; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@Entity + +public class Teacher { + @Id + private Integer id; + private LocalDate date; + private String mail; + private String username; + + public Teacher() { + + } + + public Teacher(Integer id, String date, String mail, String username) { + this.id = id; + this.date = LocalDate.parse(date, DateTimeFormatter.ofPattern("dd-MM-yyyy")); + this.mail = mail; + this.username = username; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(String date) { + this.date = LocalDate.parse(date, DateTimeFormatter.ofPattern("dd-MM-yyyy")); + } + + public String getMail() { + return mail; + } + + public void setMail(String mail) { + this.mail = mail; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/service/ICollectionService.java b/WebService/src/main/java/SAE/ApiREST/WebService/service/ICollectionService.java new file mode 100644 index 0000000..8e3cec6 --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/service/ICollectionService.java @@ -0,0 +1,21 @@ +package SAE.ApiREST.WebService.service; +import SAE.ApiREST.WebService.model.Collect; +import SAE.ApiREST.WebService.model.Article; + +import java.util.List; + +public interface ICollectionService{ + public List getAllCollections(); + public Collect getCollectionById(long isbn); + public List getAllCollectionsByName(String name); + public void deleteColletionById(long isbn); + public void deleteColletionByName(String name); + public void deleteAllColletionByName(String name); + public void addCollection(Collect collection); + public void addCollections(List collection); + public void modifyCollectionName(Collect collection, String name); + public void modifyCollectionNameById(long isbn, String name); + public List
getAllArticles(Collect collection); + public void addArticle(Collect collection, Article article); + public void deleteArticle(Collect collection, Article article); +} \ No newline at end of file diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/service/ITeacherService.java b/WebService/src/main/java/SAE/ApiREST/WebService/service/ITeacherService.java new file mode 100644 index 0000000..ed7b4b6 --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/service/ITeacherService.java @@ -0,0 +1,17 @@ +package SAE.ApiREST.WebService.service; + +import SAE.ApiREST.WebService.Response; +import SAE.ApiREST.WebService.model.Teacher; + +import java.util.List; + +public interface ITeacherService { + public List getAllTeacher(); + public Teacher getTeacherById(Integer id); + public Teacher getTeacherByUsername(String username); + public Teacher getTeacherByMail(String mail); + public Teacher getTeacherByDate(String date); + public List addTeacher(Teacher t); + public List deleteTeacher(Integer id); + public Response modifyUsername(Teacher t, String newUsername); +} diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/service/StubCollectionService.java b/WebService/src/main/java/SAE/ApiREST/WebService/service/StubCollectionService.java new file mode 100644 index 0000000..60e8e1e --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/service/StubCollectionService.java @@ -0,0 +1,89 @@ +package SAE.ApiREST.WebService.service; +import SAE.ApiREST.WebService.model.Collect; + +import java.util.ArrayList; +import java.util.List; + +import SAE.ApiREST.WebService.model.Article; +import org.springframework.stereotype.Service; + +@Service +public class StubCollectionService implements ICollectionService { + private ArrayList collections; + public List getAllCollections() { + return this.collections; + } + + // region Collection + + // region GET + public Collect getCollectionById(long isbn){ + for(Collect collection : this.collections){ + if(collection.getId() == isbn) { + return collection; + } + } + return null; + } + public List getAllCollectionsByName(String name){ + ArrayList repCollections = new ArrayList(); + for(Collect collection : this.collections){ + if(collection.getName() == name) { + repCollections.add(collection); + } + } + return repCollections; + } + // endregion + + // region DELETE + public void deleteColletionById(long isbn){ + Collect collection = getCollectionById(isbn); + this.collections.remove(collection); + } + + public void deleteColletionByName(String name){ + List collectionsByName = getAllCollectionsByName(name); + this.collections.remove(collectionsByName.get(0)); + } + public void deleteAllColletionByName(String name){ + List collectionsByName = getAllCollectionsByName(name); + this.collections.removeAll(collectionsByName); + } + + @Override + public void addCollection(Collect collection) { + this.collections.add(collection); + } + // endregion + + // region PUT + public void addCollections(List collections){ + this.collections.addAll(collections); + } + // endregion + + // region POST + public void modifyCollectionName(Collect collection, String name){ + collection.setName(name); + } + public void modifyCollectionNameById(long isbn, String name){ + Collect collection = getCollectionById(isbn); + modifyCollectionName(collection,name); + } + + // endregion + // endregion + + // region Article + public List
getAllArticles(Collect collect){ + return collect.getAllArticles(); + } + public void addArticle(Collect collect, Article article){ + collect.addArticle(article); + } + public void deleteArticle(Collect collect, Article article){ + collect.removeArticle(article); + } + // endregion +} \ No newline at end of file diff --git a/WebService/src/main/java/SAE/ApiREST/WebService/service/TeacherServiceStub.java b/WebService/src/main/java/SAE/ApiREST/WebService/service/TeacherServiceStub.java new file mode 100644 index 0000000..cd9dc01 --- /dev/null +++ b/WebService/src/main/java/SAE/ApiREST/WebService/service/TeacherServiceStub.java @@ -0,0 +1,69 @@ +package SAE.ApiREST.WebService.service; + +import SAE.ApiREST.WebService.Response; +import SAE.ApiREST.WebService.exception.TeacherException; +import SAE.ApiREST.WebService.model.Teacher; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class TeacherServiceStub implements ITeacherService { + + @Override + public List getAllTeacher() { + List allTeacher = new ArrayList(); + + allTeacher.add(new Teacher(1, "12-01-2023", "aline.alipres@gmail.com", "MsGarconManque")); + allTeacher.add(new Teacher(2, "20-08-2023", "Viviane.Delvecchio@gmail.com", "MmeMath")); + + return allTeacher; + } + + + + @Override + public Teacher getTeacherById(Integer id) { + return new Teacher(id, "10-01-2021", "exemple.gmail.com", "testest"); + } + + @Override + public Teacher getTeacherByUsername(String username) { return new Teacher(12, "30-08-2020", "dadadou@gmail.com", username); } + + @Override + public Teacher getTeacherByMail(String mail) { + return new Teacher(20, "24-12-2021", mail, "tructruc"); + } + + @Override + public Teacher getTeacherByDate(String date) { + return new Teacher(5, date, "doudouda@gmail.com", "username"); + } + + @Override + public List addTeacher(Teacher t) { + List lteach = new ArrayList(); + lteach.add(t); + return lteach; + } + + @Override + public List deleteTeacher(Integer id) { + List allTeacher = new ArrayList(); + + allTeacher.add(new Teacher(1,"12-01-2023", "aline.alipres@gmail.com", "MsGarconManque")); + allTeacher.add(new Teacher(2, "20-08-2023", "Viviane.Delvecchio@gmail.com", "MmeMath")); + + if(allTeacher.remove(getTeacherById(id))){ + return allTeacher; + } else { + throw new TeacherException(String.format("Teacher {id} isn't removed", id)); + } + } + + public Response modifyUsername(Teacher t, String newUsername){ + t.setUsername(newUsername); + return new Response(t.getId(),String.format("This user %s has changed username", t.getMail())); + } +}