No Description

MovieController.java 4.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package fr.natan.akkastreamfileprocessingapi.controller;
  2. import fr.natan.akkastreamfileprocessingapi.futurecompleteness.CompletableFutureResult;
  3. import fr.natan.akkastreamfileprocessingapi.models.Models;
  4. import fr.natan.akkastreamfileprocessingapi.service.AkkaStreamFileProcessing;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.http.HttpStatus;
  8. import org.springframework.http.ResponseEntity;
  9. import org.springframework.web.bind.annotation.PathVariable;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RequestMethod;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import play.api.libs.json.Json;
  14. import scala.collection.IndexedSeq;
  15. import scala.concurrent.Future;
  16. import java.util.concurrent.CompletableFuture;
  17. import java.util.concurrent.ExecutionException;
  18. @SuppressWarnings("SpellCheckingInspection")
  19. @RestController
  20. public class MovieController {
  21. private final AkkaStreamFileProcessing akkaStreamFilesProcessing;
  22. private final CompletableFutureResult completableFutureResult = new CompletableFutureResult();
  23. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  24. public MovieController(AkkaStreamFileProcessing akkaStreamFilesProcessing) {
  25. this.akkaStreamFilesProcessing = akkaStreamFilesProcessing;
  26. }
  27. @RequestMapping(value = "/persons/id/{personID}", method = RequestMethod.GET)
  28. private ResponseEntity<String> getPersonByID(@PathVariable(name = "personID") String personID) throws ExecutionException, InterruptedException {
  29. Future<Models.Person> futurePerson = akkaStreamFilesProcessing.getPersonById(personID);
  30. CompletableFuture<Models.Person> completableFuture = completableFutureResult.buildcompletableFuture(futurePerson);
  31. while (!completableFuture.isDone()){
  32. logger.info("IS PROCESSING...");
  33. Thread.sleep(5000);
  34. }
  35. Models.Person person = completableFuture.get();
  36. return new ResponseEntity<>(Json.toJson(person, person.personFormat()).toString(), HttpStatus.OK);
  37. }
  38. @RequestMapping(value = "/persons/name/{primaryName}", method = RequestMethod.GET)
  39. private ResponseEntity<String> getPersonByName(@PathVariable(name = "primaryName") String primaryName)
  40. throws ExecutionException, InterruptedException {
  41. Future<Models.Person> personFuture = akkaStreamFilesProcessing.getPersonByName(primaryName);
  42. CompletableFuture<Models.Person> personCompletableFuture = completableFutureResult.buildcompletableFuture(personFuture);
  43. while (!personCompletableFuture.isDone()){
  44. logger.info("IS PROCESSING...");
  45. Thread.sleep(5000);
  46. }
  47. Models.Person person = personCompletableFuture.get();
  48. return new ResponseEntity<>(Json.toJson(person, person.personFormat()).toString(), HttpStatus.OK);
  49. }
  50. @RequestMapping(value = "/tvseries/id/{tvSerieId}", method = RequestMethod.GET)
  51. private ResponseEntity<String> getTvSerieByID(@PathVariable(name = "tvSerieId") String tvSerieID) throws ExecutionException, InterruptedException {
  52. Future<Models.TvSerie> tvSerieFuture = akkaStreamFilesProcessing.getTvSerieById(tvSerieID);
  53. CompletableFuture<Models.TvSerie> tvSerieCompletableFuture = completableFutureResult.buildcompletableFuture(tvSerieFuture);
  54. while (!tvSerieCompletableFuture.isDone()){
  55. logger.info("IS PROCESSING...");
  56. Thread.sleep(5000);
  57. }
  58. Models.TvSerie tvSerie = tvSerieCompletableFuture.get();
  59. return new ResponseEntity<>(Json.toJson(tvSerie, tvSerie.tvSerieFormat()).toString(), HttpStatus.OK);
  60. }
  61. @RequestMapping(value = "/tvseries/title/{tvseriePrimaryTitle}", method = RequestMethod.GET)
  62. private ResponseEntity<IndexedSeq<Models.TvSerie>> getTvserieByPrimaryTitle(
  63. @PathVariable(name = "tvseriePrimaryTitle") String tvseriePrimaryTitle) {
  64. Future<IndexedSeq<Models.TvSerie>> listFuture = akkaStreamFilesProcessing.getTvSerieByPrimaryTitle(tvseriePrimaryTitle);
  65. IndexedSeq<Models.TvSerie> indexedSeq = listFuture.value().get().get();
  66. return new ResponseEntity<>(indexedSeq, HttpStatus.OK);
  67. }
  68. @RequestMapping(value = "/persons/tvseries/title/{tvSerieTitle}", method = RequestMethod.GET)
  69. private Future<IndexedSeq<Models.Person>> getPersonsForTvSerie(@PathVariable(name = "tvSerieTitle") String tvSerieTitle) {
  70. return akkaStreamFilesProcessing.getTeamOfPersonsForTvSerie(tvSerieTitle);
  71. }
  72. @RequestMapping(value = "/persons", method = RequestMethod.GET)
  73. private ResponseEntity<String> getAllPersons() {
  74. akkaStreamFilesProcessing.getAllPersons();
  75. return new ResponseEntity<>("is running", HttpStatus.OK);
  76. }
  77. @RequestMapping(value = "/tvseries", method = RequestMethod.GET)
  78. private ResponseEntity<String> getAllvSeries() {
  79. akkaStreamFilesProcessing.getAllTvSeries();
  80. return new ResponseEntity<>("is running", HttpStatus.OK);
  81. }
  82. }

Powered by TurnKey Linux.