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