diff --git a/README.md b/README.md index 7c0fc2f0bdbd54ee5b8da39d0f0b424fbe344144..230e7be3e7f5a54f224505ebe5d1d6b678a836cc 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ ##### final Integer rowId = Integer.valueOf(row); ##### course.getListPengajar().remove(rowId.intValue()); #### Nanti params tersebut akan mendefinisikan semacam "function" agar dapat diimplementasikan di dalam <button> dalam variable "name". ---- + ## Tutorial 3 ### Pertanyaan 1: Tolong jelaskan secara singkat apa kegunaan dari anotasi-anotasi yang ada pada model (@AllArgsConstructor, @NoArgsConstructor, @Setter, @Getter, @Entity, @Table) #### @AllArgsConstructor digunakan untuk menghasilkan constructor pada semua field pada class dengan suatu parameter. @@ -73,7 +73,8 @@ #### Referensi : https://javabydeveloper.com/lombok-allargsconstructor-examples/ https://projectlombok.org/api/lombok/NoArgsConstructor.html ### Pertanyaan 2: Pada class CourseDb, terdapat method findByCodeUsingQuery dan findByCode, apakah perbedaan kedua method tersebut? Jelaskan juga kegunaan @Query pada method findByCodeUsingQuery! -Pada findByCode tidak menggunakan @Query sedangkan pada findByCodeUsingQuery menggunakan @Query. @Query digunakan untuk mengimplementasikan command MySQL pada interface dan menghubungkannya ke database sehingga akan menjadi @Query("SELECT.....") lalu diikuti dengan findByCodeUsingQuery + +#### Pada findByCode tidak menggunakan @Query sedangkan pada findByCodeUsingQuery menggunakan @Query. @Query digunakan untuk mengimplementasikan command MySQL pada interface dan menghubungkannya ke database sehingga akan menjadi @Query("SELECT.....") lalu diikuti dengan findByCodeUsingQuery ### Pertanyaan 3: Jelaskan perbedaan kegunaan dari anotasi @JoinTable dan @JoinColumn #### @JoinTable menyimpan id dari kedua entity ke tabel yang terpisah. Penggunaan @JoinTable ketika kita ingin mengatur hubungan antara entity dengan table lain. diff --git a/belajarbelajar/build.gradle b/belajarbelajar/build.gradle index ae74c874310b82917b2cfe6f630e9c43ec2534a5..6dfb47f86c38fc80a267719f6cb08b56d6550ca1 100644 --- a/belajarbelajar/build.gradle +++ b/belajarbelajar/build.gradle @@ -22,6 +22,8 @@ dependencies { compileOnly("org.projectlombok:lombok:1.18.24") annotationProcessor('org.projectlombok:lombok:1.18.24') implementation 'org.springframework.boot:spring-boot-starter-validation:2.7.3' + implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation 'org.springframework.boot:spring-boot-starter-webflux' } tasks.named('test') { diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/CourseModel.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/CourseModel.java index 2472fa3006752091124530b302fcd8063110e9d7..c9cd34b01808765c3132f52828191c3d62cf3f9d 100644 --- a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/CourseModel.java +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/CourseModel.java @@ -1,5 +1,6 @@ package apap.tutorial.belajarbelajar.model; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -17,6 +18,7 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor @Entity +@JsonIgnoreProperties(value={"listPenyelenggara"}, allowSetters = true) @Table(name = "course") public class CourseModel { @Id diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PengajarModel.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PengajarModel.java index 0564f2b3d413db06deaaa0f5a00c81f22e2080b9..a1049acdac3c1c4f85ff4302b6d73bc0b7494547 100644 --- a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PengajarModel.java +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PengajarModel.java @@ -1,5 +1,6 @@ package apap.tutorial.belajarbelajar.model; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -18,6 +19,7 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor @Entity +@JsonIgnoreProperties(value={"course"}, allowSetters = true) @Table(name = "pengajar") public class PengajarModel implements Serializable{ @Id @@ -33,6 +35,10 @@ public class PengajarModel implements Serializable{ @Column(name = "is_pengajar_universitas", nullable = false) private Boolean isPengajarUniversitas; +// @NotNull + @Column(name = "gender_pengajar") + private Boolean genderPengajar; + @ManyToOne(fetch = FetchType.EAGER, optional = false) @JoinColumn(name = "code", referencedColumnName = "code", nullable = false) @OnDelete(action = OnDeleteAction.CASCADE) diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/CourseDetail.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/CourseDetail.java new file mode 100644 index 0000000000000000000000000000000000000000..e1f20f8dc2a692eb2edd69e81de543981e1f7946 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/CourseDetail.java @@ -0,0 +1,20 @@ +package apap.tutorial.belajarbelajar.rest; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class CourseDetail { + private String status; + + @JsonProperty("course-license") + private Integer courseLicense; + + @JsonProperty("valid-until") + private Date validUntil; +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/GenderizeDetail.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/GenderizeDetail.java new file mode 100644 index 0000000000000000000000000000000000000000..de0079208716f17bae33a940902dde36d3215394 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/GenderizeDetail.java @@ -0,0 +1,23 @@ +package apap.tutorial.belajarbelajar.rest; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class GenderizeDetail { + private String status; + + @JsonProperty("gender") + private String gender; + + @JsonProperty("probability") + private Double probability; + + @JsonProperty("count") + private Integer count; +} \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/Setting.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/Setting.java new file mode 100644 index 0000000000000000000000000000000000000000..18c23c65b64b5835fcf9661a5c195f4800966ae9 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/rest/Setting.java @@ -0,0 +1,6 @@ +package apap.tutorial.belajarbelajar.rest; + +public class Setting { + final public static String courseUrl = "https://77431479-0b90-454a-9394-bbc8c1cc4110.mock.pstmn.io"; + final public static String genderizeUrl = "https://api.genderize.io"; +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/restcontroller/CourseRestController.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/restcontroller/CourseRestController.java new file mode 100644 index 0000000000000000000000000000000000000000..870c29de560c6bd0c1471b9f4da4be1266c10b4b --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/restcontroller/CourseRestController.java @@ -0,0 +1,95 @@ +package apap.tutorial.belajarbelajar.restcontroller; + +import java.util.List; +import java.util.NoSuchElementException; +import javax.validation.Valid; + +import apap.tutorial.belajarbelajar.rest.CourseDetail; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ResponseStatusException; +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.service.CourseRestService; +import reactor.core.publisher.Mono; + +@RestController +@RequestMapping("/api/v1") +public class CourseRestController { + @Autowired + private CourseRestService courseRestService; + + @PostMapping(value = "/course/add") + private CourseModel createCourse(@Valid @RequestBody CourseModel course, BindingResult bindingResult){ + if(bindingResult.hasFieldErrors()){ + throw new ResponseStatusException( + HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field." + ); + } else { + return courseRestService.createCourse(course); + } + } + + //Retrieve + @GetMapping(value = "/course/{code}") + private CourseModel retrieveCourse(@PathVariable("code") String code){ + try { + return courseRestService.getCourseByCode(code); + } catch (NoSuchElementException e){ + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "Code course " + code + " not found" + ); + } + } + + //Delete + @DeleteMapping(value = "/course/{code}") + private ResponseEntity deleteCourse(@PathVariable("code") String code){ + try { + courseRestService.deleteCourse(code); + return ResponseEntity.ok("Course with code " + code + " has been deleted succesfully"); + } catch (NoSuchElementException e){ + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "Code course " + code + " not found" + ); + } catch (UnsupportedOperationException e){ + throw new ResponseStatusException( + HttpStatus.BAD_REQUEST, "Course is still open or has pengajar" + ); + } + } + //Update + @PutMapping(value = "/course/{code}") + private CourseModel updateCourse(@PathVariable("code") String code, @RequestBody CourseModel course) { + try { + return courseRestService.updateCourse(code, course); + } catch (NoSuchElementException e){ + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "Code Course " + code + " not found" + ); + } + } + //Retrieve List All + @GetMapping(value = "/list-course") + private List<CourseModel> retrieveListCourse(){ + return courseRestService.retrieveListCourse(); + } + + @GetMapping(value = "/course/{code}/status") + private Mono<String> getStatus(@PathVariable("code") String code) { + return courseRestService.getStatus(code); + } + @GetMapping(value = "/full") + private Mono<CourseDetail> postStatus() { + return courseRestService.postStatus(); + } +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/restcontroller/PengajarRestController.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/restcontroller/PengajarRestController.java new file mode 100644 index 0000000000000000000000000000000000000000..ce4a8e4b308481bc009e14fbc39d673e068b28c3 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/restcontroller/PengajarRestController.java @@ -0,0 +1,111 @@ +package apap.tutorial.belajarbelajar.restcontroller; + +import apap.tutorial.belajarbelajar.model.PengajarModel; +import apap.tutorial.belajarbelajar.rest.CourseDetail; +import apap.tutorial.belajarbelajar.service.CourseRestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ResponseStatusException; +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.service.PengajarRestService; +import reactor.core.publisher.Mono; + +import javax.validation.Valid; +import java.util.List; +import java.util.NoSuchElementException; + +@RestController +@RequestMapping("/api/v1") +public class PengajarRestController { + @Autowired + private PengajarRestService pengajarRestService; + + @PostMapping(value = "/pengajar") + private PengajarModel createPengajar(@Valid @RequestBody PengajarModel pengajar, BindingResult bindingResult){ + if(bindingResult.hasFieldErrors()){ + throw new ResponseStatusException( + HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field." + ); + } + return pengajarRestService.createPengajar(pengajar); + } + + //Retrieve + @GetMapping(value = "/pengajar/{noPengajar}") + private PengajarModel retrievePengajar(@PathVariable("noPengajar") Long noPengajar){ + try { + return pengajarRestService.getPengajarByNoPengajar(noPengajar); + } catch (NoSuchElementException e){ + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "No Pengajar " + noPengajar.toString() + " not found" + ); + } + } + + //Delete + @DeleteMapping(value = "/pengajar/{noPengajar}") + private ResponseEntity deletePengajar(@PathVariable("noPengajar") Long noPengajar){ + try { + pengajarRestService.deletePengajar(noPengajar); + return ResponseEntity.ok("Pengajar sudah terhapus"); + } catch (NoSuchElementException e){ + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "No Pengajar " + noPengajar.toString() + " not found" + ); + } catch (UnsupportedOperationException e){ + throw new ResponseStatusException( + HttpStatus.BAD_REQUEST, "Course is still open" + ); + } + } + //Update + @PutMapping(value = "/pengajar/{noPengajar}") + private PengajarModel updatePengajar(@PathVariable("noPengajar") Long noPengajar, @Valid @RequestBody PengajarModel pengajar) { + try { + return pengajarRestService.updatePengajar(noPengajar, pengajar); + } catch (NoSuchElementException e){ + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "No Pengajar " + noPengajar.toString() + " not found" + ); + } + } + //Retrieve List All + @GetMapping(value = "/list-pengajar") + private List<PengajarModel> retrieveListPengajar(){ + return pengajarRestService.retrieveListPengajar(); + } + + //Set Gender + @GetMapping("/pengajar/jenis-kelamin/{noPengajar}") + private PengajarModel setGenderPengajar(@PathVariable("noPengajar") Long noPengajar) { + try { + return pengajarRestService.setGenderPengajar(noPengajar); + } catch (NoSuchElementException e) { + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "No pengajar" + noPengajar.toString() + " not found" + ); + } catch (UnsupportedOperationException e) { + throw new ResponseStatusException( + HttpStatus.BAD_REQUEST, "Course is still open" + ); + } + } +// @GetMapping(value = "/pengajar/{code}/status") +// private Mono<String> getStatus(@PathVariable("code") String code) { +// return courseRestService.getStatus(code); +// } +// @GetMapping(value = "/full") +// private Mono<CourseDetail> postStatus() { +// return courseRestService.postStatus(); +// } +} \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseRestService.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseRestService.java new file mode 100644 index 0000000000000000000000000000000000000000..600ccd25d50f4f42f9bf7c96a24afb489cc4c6a2 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseRestService.java @@ -0,0 +1,16 @@ +package apap.tutorial.belajarbelajar.service; +import java.util.List; +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.rest.CourseDetail; +import reactor.core.publisher.Mono; + +public interface CourseRestService { + CourseModel createCourse(CourseModel course); + List<CourseModel> retrieveListCourse(); + CourseModel getCourseByCode(String code); + CourseModel updateCourse(String code, CourseModel courseUpdate); + void deleteCourse(String code); + Mono<String> getStatus(String code); + Mono<CourseDetail> postStatus(); +} + diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseRestServiceImpl.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseRestServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..f35e5099bb084638ca668744b768f3916b4f3b25 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseRestServiceImpl.java @@ -0,0 +1,100 @@ +package apap.tutorial.belajarbelajar.service; + +import java.time.LocalDateTime; +import java.util.NoSuchElementException; +import java.util.List; +import java.util.Optional; + +import javax.transaction.Transactional; + +import apap.tutorial.belajarbelajar.rest.CourseDetail; +import apap.tutorial.belajarbelajar.rest.Setting; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import apap.tutorial.belajarbelajar.repository.CourseDb; +import apap.tutorial.belajarbelajar.model.CourseModel; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +@Service +@Transactional +public class CourseRestServiceImpl implements CourseRestService{ + + private final WebClient webClient; + + public CourseRestServiceImpl(WebClient.Builder webClientBuilder){ + this.webClient = webClientBuilder.baseUrl(Setting.courseUrl).build(); + } + + @Autowired + private CourseDb courseDb; + + @Override + public CourseModel createCourse(CourseModel course){ + return courseDb.save(course); + } + @Override + public List<CourseModel> retrieveListCourse(){ + return courseDb.findAll(); + } + + @Override + public CourseModel getCourseByCode(String code){ + Optional<CourseModel> course = courseDb.findByCode(code); + if (course.isPresent()){ + return course.get(); + } else { + throw new NoSuchElementException(); + } + } + + @Override + public CourseModel updateCourse(String code, CourseModel courseUpdate){ + CourseModel course = getCourseByCode(code); + course.setNameCourse(courseUpdate.getNameCourse()); + course.setDescription(courseUpdate.getDescription()); + course.setJumlahSks(courseUpdate.getJumlahSks()); + course.setTanggalDimulai(courseUpdate.getTanggalDimulai()); + course.setTanggalBerakhir(courseUpdate.getTanggalBerakhir()); + return courseDb.save(course); + } + @Override + public void deleteCourse(String code){ + CourseModel course = getCourseByCode(code); + if (isClosed(course.getTanggalDimulai(), course.getTanggalBerakhir())){ + courseDb.delete(course); + } else{ + throw new UnsupportedOperationException(); + } + } + + public boolean isClosed(LocalDateTime tanggalDimulai, LocalDateTime tanggalBerakhir){ + LocalDateTime now = LocalDateTime.now(); + if (now.isBefore(tanggalDimulai) || now.isAfter(tanggalBerakhir)){ + return true; + } + return false; + } + + @Override + public Mono<String> getStatus(String code) { + return this.webClient.get().uri("/rest/course/" + code + "/status") + .retrieve() + .bodyToMono(String.class); + } + + @Override + public Mono<CourseDetail> postStatus() { + MultiValueMap<String, String> data = new LinkedMultiValueMap(); + data.add("code", "APAP"); + data.add("nameCourse", "Arsitektur PAP"); + return this.webClient.post().uri("/rest/course/full") + .syncBody(data) + .retrieve() + .bodyToMono(CourseDetail.class); + } +} + diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarRestService.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarRestService.java new file mode 100644 index 0000000000000000000000000000000000000000..f29b59bd97a71f81b27900fa55c4585e7d09a642 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarRestService.java @@ -0,0 +1,18 @@ +package apap.tutorial.belajarbelajar.service; +import java.util.List; +import apap.tutorial.belajarbelajar.model.PengajarModel; +//import apap.tutorial.belajarbelajar.rest.CourseDetail; +//import reactor.core.publisher.Mono; + +public interface PengajarRestService { + PengajarModel createPengajar(PengajarModel pengajar); + List<PengajarModel> retrieveListPengajar(); + PengajarModel getPengajarByNoPengajar(Long noPengajar); + PengajarModel updatePengajar(Long noPengajar, PengajarModel pengajarUpdate); + void deletePengajar(Long noPengajar); + PengajarModel setGenderPengajar(Long noPengajar); + +// Mono<String> getStatus(Long noPengajar); +// Mono<CourseDetail> postStatus(); +} + diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarRestServiceImpl.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarRestServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..a7da8e4414ee354b26e1301aa925bbfbb01dc4ee --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarRestServiceImpl.java @@ -0,0 +1,117 @@ +package apap.tutorial.belajarbelajar.service; + +import java.time.LocalDateTime; +import java.util.NoSuchElementException; +import java.util.List; +import java.util.Optional; + +import javax.transaction.Transactional; + +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.repository.PengajarDb; +//import apap.tutorial.belajarbelajar.rest.pengajarDetail; +import apap.tutorial.belajarbelajar.rest.GenderizeDetail; +import apap.tutorial.belajarbelajar.rest.Setting; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import apap.tutorial.belajarbelajar.repository.PengajarDb; +import apap.tutorial.belajarbelajar.model.PengajarModel; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +@Service +@Transactional +public class PengajarRestServiceImpl implements PengajarRestService{ + + private final WebClient webClient; + + public PengajarRestServiceImpl(WebClient.Builder webClientBuilder){ + this.webClient = webClientBuilder.baseUrl(Setting.genderizeUrl).build(); + } + + @Autowired + private PengajarDb pengajarDb; + + @Override + public PengajarModel createPengajar(PengajarModel pengajar){ + return pengajarDb.save(pengajar); + } + @Override + public List<PengajarModel> retrieveListPengajar(){ + return pengajarDb.findAll(); + } + + @Override + public PengajarModel getPengajarByNoPengajar(Long noPengajar){ + Optional<PengajarModel> pengajar = pengajarDb.findByNoPengajar(noPengajar); + if (pengajar.isPresent()){ + return pengajar.get(); + } else { + throw new NoSuchElementException(); + } + } + + @Override + public PengajarModel updatePengajar(Long noPengajar, PengajarModel pengajarUpdate){ + PengajarModel pengajar = getPengajarByNoPengajar(noPengajar); + pengajar.setNamaPengajar(pengajarUpdate.getNamaPengajar()); + pengajar.setIsPengajarUniversitas(pengajarUpdate.getIsPengajarUniversitas()); + pengajar.setCourse(pengajarUpdate.getCourse()); + return pengajarDb.save(pengajar); + } + @Override + public void deletePengajar(Long noPengajar){ + PengajarModel pengajar = getPengajarByNoPengajar(noPengajar); + CourseModel course = pengajar.getCourse(); + if (isClosed(course.getTanggalDimulai(), course.getTanggalBerakhir())){ + pengajarDb.delete(pengajar); + } else{ + throw new UnsupportedOperationException(); + } + } + + public boolean isClosed(LocalDateTime tanggalDimulai, LocalDateTime tanggalBerakhir){ + LocalDateTime now = LocalDateTime.now(); + if (now.isBefore(tanggalDimulai) || now.isAfter(tanggalBerakhir)){ + return true; + } + return false; + } + + @Override + public PengajarModel setGenderPengajar(Long noPengajar) { + PengajarModel pengajar = getPengajarByNoPengajar(noPengajar); + CourseModel course = pengajar.getCourse(); + if (!isClosed(course.getTanggalDimulai(), course.getTanggalBerakhir())) { throw new UnsupportedOperationException();} + String firstName = pengajar.getNamaPengajar().split(" ")[0]; + Mono<GenderizeDetail> formatAPI = this.webClient.get().uri("/?name=" + firstName).retrieve().bodyToMono(GenderizeDetail.class); + + boolean booleanGender = formatAPI.block().getGender().equals("female"); + pengajar.setGenderPengajar(booleanGender); + updatePengajar(noPengajar, pengajar); + + return getPengajarByNoPengajar(noPengajar); + } + +// @Override +// public Mono<String> getStatus(String code) { +// return this.webClient.get().uri("/rest/pengajar/" + code + "/status") +// .retrieve() +// .bodyToMono(String.class); +// } +// +// @Override +// public Mono<pengajarDetail> postStatus() { +// MultiValueMap<String, String> data = new LinkedMultiValueMap(); +// data.add("code", "APAP"); +// data.add("namepengajar", "Arsitektur PAP"); +// return this.webClient.post().uri("/rest/pengajar/full") +// .syncBody(data) +// .retrieve() +// .bodyToMono(pengajarDetail.class); +// } +} + diff --git a/belajarbelajar/src/main/resources/application.properties b/belajarbelajar/src/main/resources/application.properties index 9be6051e081b0d6bde7187c1cb54fe1470398e90..38030bd44cba42021801cb2e5ad4289f4adfd05a 100644 --- a/belajarbelajar/src/main/resources/application.properties +++ b/belajarbelajar/src/main/resources/application.properties @@ -14,3 +14,5 @@ spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialec #pembuatan database (create || create drop || validate || update) spring.jpa.hibernate.ddl-auto=update + +server.port=2020