diff --git a/README.md b/README.md index 73a47bc8ec1312b5707ead01eeca33f2df53dbc9..eeb94f742cbddd8f42de96dabfbac145af1d404b 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,40 @@ ## Authors * **Hilmi Al Biruni** - *2006463843* - *APAP-B* +## 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. +#### @NoArgsConstructor digunakan untuk menghasilkan no-args constructor yang akan menghasilkan pesan error jika constructor terseebut tidak dapat ditulis karena adanya final fields +#### @Setter dan @Getter digunakan untuk mempermudah generate setter dan getter sehingga tidak perlu membuat manual, hanya memanggil get dan set saja. +#### @Entity digunakan untuk mewakili data yang akan disimpan didalam database +#### @Table digunakan untuk menentukan nama table database yang nantinya digunakan sebagai pemetaan +#### 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 + +### 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. + +#### Sedangkan @JoinColumn menyimpan id dari entity lain di column baru di tabel yang sama. Penggunaan @JoinColumn ketika entity memiliki direct relationship seperti foreign key antara dua entity. + +### Pertanyaan 4: Pada class Pengajar, digunakan anotasi @JoinColumn pada atribut Course, apa kegunaan dari name, referencedColumnName, dan nullable dalam anotasi tersebut? dan apa perbedaan nullable dan penggunaan anotasi @NotNull +Pada @JoinColumn di atribut Course, name berguna untuk menyatakan nama dari foreign key column. Lalu, referencedColumnName berguna untuk mencari nama dari column yang direferensi oleh foreign key column. Kemudian, nullable untuk menyatakan apakah foreign key kolomnya null atau tidak. Perbedaan dari nullable dengan anotasi @NotNull adalah nullable hanya menambahkan batasan null yang true / false ke definisi tabel, sedangkan anotasi @NotNull memeriksa apakah atributnya bukan null. + + +### Pertanyaan 5: Jelaskan kegunaan FetchType.LAZY, CascadeType.ALL, dan FetchType.EAGER +#### FetchType.LAZY berisi seluruh data java object yang telah di-fetch saat dibutuhkan atau saat memanggil datanya (LAZY). FetchType biasanya digunakan di relasi many-to-many atau one-to-many. + +#### CascadeType.All berguna supaya segala perubahan yang ada pada suatu entity akan terjadi juga pada entity seluruh anaknya/child. Perubahan terjadi saat ada delete, update, dan lainnya. + +#### FetchType.EAGER berisi seluruh data java objects yang telah di-fetch langsung. fetchtype ini akan melakukan fetch-nya diawal. Berbeda dengan tipe LAZY, tipe ini digunakan untuk relasi many-to-one atau one-to-one. + + + + + + + ## Tutorial 2 ### Pertanyaan 1: Cobalah untuk menambahkan sebuah Course dengan mengakses link berikut: http://localhost:8080/course/add?code=APAP&nameCourse=APAP%20Tutorial2&description=2020%20Fasilkom&jumlahSks=3 Apa yang terjadi? Jelaskan mengapa hal tersebut dapat terjadi? Jika link tersebut diakses akan memunculkan Whitelabel Error Page Service Error 500. Hal ini dikarenakan sudah ada perintah return "add-course" pada controller. Controller merupakan file yang berfungsi untuk melakukan mapping dari request yang diinput, kemudian akan diminta untuk memanggil template html yang akan direturn. Sedangkan html "add-course" belum dibuat, sehingga hal ini akan menyebabkan error. diff --git a/belajarbelajar/build.gradle b/belajarbelajar/build.gradle index 605ad9476d5415141ec1ff36e8a1ec93788f240e..ae74c874310b82917b2cfe6f630e9c43ec2534a5 100644 --- a/belajarbelajar/build.gradle +++ b/belajarbelajar/build.gradle @@ -17,6 +17,11 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'mysql:mysql-connector-java:5.1.6' + 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' } tasks.named('test') { diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/BaseController.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/BaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..35d4540a28f2f3e8d962afb23790fcab0d1dc926 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/BaseController.java @@ -0,0 +1,12 @@ +package apap.tutorial.belajarbelajar.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class BaseController { + @GetMapping("/") + private String Home() { + return "home"; + } +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/CourseController.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/CourseController.java index 81aca5a9d08f99a22da5833831fe8ed772a88cb2..1ec411e2b07df0a2154794e8ea7b46bba0eed180 100644 --- a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/CourseController.java +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/CourseController.java @@ -1,96 +1,79 @@ package apap.tutorial.belajarbelajar.controller; +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.model.PengajarModel; +import apap.tutorial.belajarbelajar.service.CourseService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; - -import apap.tutorial.belajarbelajar.model.CourseModel; -import apap.tutorial.belajarbelajar.service.CourseService; +import org.springframework.web.bind.annotation.*; import java.util.List; @Controller public class CourseController { + @Qualifier("courseServiceImpl") @Autowired private CourseService courseService; - @RequestMapping("course/add") - public String addCourse( - @RequestParam(value = "code", required = true) String code, - @RequestParam(value = "nameCourse", required = true) String nameCourse, - @RequestParam(value = "description", required = true) String description, - @RequestParam(value = "jumlahSks", required = true) String jumlahSks, - Model model) { - for (CourseModel object : courseService.getListCourse()){ - if (code.equalsIgnoreCase(object.getCode())){ - return "notifikasi-gagal-add"; - } - } - CourseModel course = new CourseModel(code, nameCourse, description, Integer.parseInt(jumlahSks)); + @GetMapping("/course/add") + public String addCourseFormPage(Model model) { + model.addAttribute("course", new CourseModel()); + return "form-add-course"; + } + @PostMapping("/course/add") + public String addCourseSubmitPage(@ModelAttribute CourseModel course, Model model) { courseService.addCourse(course); - model.addAttribute("code", code); - model.addAttribute("nameCourse", nameCourse); - + model.addAttribute("code", course.getCode()); return "add-course"; } - @RequestMapping("course/viewAll") + + @GetMapping("/course/viewall") public String listCourse(Model model) { List<CourseModel> listCourse = courseService.getListCourse(); model.addAttribute("listCourse", listCourse); return "viewall-course"; } - @RequestMapping("course/view") - public String detailCourse(@RequestParam(value = "code") String code, Model model) { - // Mendapatkan CourseModel sesuai dengan code + + @GetMapping("/course/viewall-sort") + public String listCourseSort(Model model) { + List<CourseModel> listCourse = courseService.getCourseSort(); + model.addAttribute("listCourse", listCourse); + return "viewall-course"; + } + + @GetMapping("/course/view") + public String viewDetailCoursePage(@RequestParam(value = "code") String code, Model model) { CourseModel course = courseService.getCourseByCodeCourse(code); - // Add variabel semua courseModel ke "course" untuk dirender pada thymeleaf + List<PengajarModel> listPengajar = course.getListPengajar(); + model.addAttribute("listPengajar", listPengajar); model.addAttribute("course", course); return "view-course"; } - @GetMapping("course/view/code-course/{code}") - public String detailCoursePathVariable(@PathVariable(value = "code") String code, Model model) { - // Mendapatkan CourseModel sesuai dengan code + @GetMapping("course/view-query") + public String viewDetailCoursePageQuery(@RequestParam(value = "code") String code, Model model) { CourseModel course = courseService.getCourseByCodeCourse(code); - // Add variabel semua courseModel ke "course" untuk dirender pada thymeleaf + List<PengajarModel> listPengajar = course.getListPengajar(); + model.addAttribute("listPengajar", listPengajar); model.addAttribute("course", course); return "view-course"; } - @GetMapping("course/update/code-course/{code}/jumlah-sks/{sks}") - public String updateBanyakSks( @PathVariable(value = "code") String code, @PathVariable(value = "sks") int sks, Model model) { - // Mendapatkan CourseModel sesuai dengan code + @GetMapping("course/update/{code}") + public String updateCourseFormPage(@PathVariable(value = "code") String code, Model model) { CourseModel course = courseService.getCourseByCodeCourse(code); - // Update variabel jumlahSks - course.setJumlahSks(sks); model.addAttribute("course", course); - return "berhasil-ditambahkan"; + return "form-update-course"; } - -// } -@GetMapping("course/delete/code-course/{code}") -public String deleteCourse(@PathVariable(value = "code") String code, Model model) { - CourseModel course = courseService.getCourseByCodeCourse(code); - List<CourseModel> listCourse = courseService.getListCourse(); -// listCourse.remove(course); - model.addAttribute("course", course); - if (courseService.getListCourse().contains(code) == false) { - return "notifikasi-delete"; + @PostMapping("course/update") + public String updateCourseSubmitPage(@ModelAttribute CourseModel course, Model model) { + CourseModel updatedCourse = courseService.updateCourse(course); + model.addAttribute("code", updatedCourse.getCode()); + return "update-course"; } - else { - listCourse.remove(course); - model.addAttribute("course", course); - return "delete-course"; - } -} - - - } \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/PengajarController.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/PengajarController.java new file mode 100644 index 0000000000000000000000000000000000000000..c5148ec017c8b69c7dda31e492483eb5171d5537 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/controller/PengajarController.java @@ -0,0 +1,61 @@ +package apap.tutorial.belajarbelajar.controller; + +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.model.PengajarModel; +import apap.tutorial.belajarbelajar.service.CourseService; +import apap.tutorial.belajarbelajar.service.PengajarService; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.ArrayList; +import java.util.List; + +@Controller +public class PengajarController { + @Qualifier("pengajarServiceImpl") + @Autowired + private PengajarService pengajarService; + + @Qualifier("courseServiceImpl") + @Autowired + private CourseService courseService; + + @GetMapping("/pengajar/add/{code}") + public String addPengajarFormPage(@PathVariable String code, Model model) { + PengajarModel pengajar = new PengajarModel(); + CourseModel course = courseService.getCourseByCodeCourse(code); + pengajar.setCourse(course); + model.addAttribute("pengajar", pengajar); + return "form-add-pengajar"; + } + + @PostMapping("/pengajar/add") + public String addPengajarSubmitPage(@ModelAttribute PengajarModel pengajar, Model model) { + pengajarService.addPengajar(pengajar); + model.addAttribute("noPengajar", pengajar.getNoPengajar()); + return "add-pengajar"; + } + + @PostMapping("/pengajar/update") + public String updatePengajarSubmit(@ModelAttribute PengajarModel pengajar, Model model){ + PengajarModel updatedPengajar = pengajarService.updatePengajar(pengajar); + model.addAttribute("noPengajar",updatedPengajar.getNoPengajar()); + return "update-pengajar"; + } + + @GetMapping("/pengajar/update/{noPengajar}") + public String updatePengajar(@PathVariable Long noPengajar, Model model){ + PengajarModel pengajar = pengajarService.getPengajarByNoPengajar(noPengajar); + String validate = pengajarService.validateUpdate(pengajar); + model.addAttribute("pengajar",noPengajar); + return validate; + } + +} \ No newline at end of file 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 491e79a379744afb89bf989fd44496712bf2d871..2472fa3006752091124530b302fcd8063110e9d7 100644 --- a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/CourseModel.java +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/CourseModel.java @@ -1,47 +1,56 @@ package apap.tutorial.belajarbelajar.model; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.time.LocalDateTime; +import java.util.List; + +@Setter +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "course") public class CourseModel { - private String code; - private String nameCourse; - private String description; - private int jumlahSks; - - public CourseModel(String code, String nameCourse, String description, int jumlahSks) { - this.code = code; - this.nameCourse = nameCourse; - this.description = description; - this.jumlahSks = jumlahSks; - } - - public void setCode(String code) { - this.code = code; - } - - public void setNameCourse(String nameCourse) { - this.nameCourse = nameCourse; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setJumlahSks(int jumlahSks) { - this.jumlahSks = jumlahSks; - } - - public String getCode() { - return code; - } - - public String getNameCourse() { - return nameCourse; - } - - public String getDescription() { - return description; - } - - public int getJumlahSks() { - return jumlahSks; - } -} + @Id + @Size(max = 30) + private String code; + + @NotNull + @Size(max = 30) + @Column(name = "name_course", nullable = false) + private String nameCourse; + + @NotNull + @Size(max = 200) + @Column(name = "description", nullable = false) + private String description; + + @NotNull + @Column(name = "jumlah_sks", nullable = false) + private Integer jumlahSks; + + @NotNull + @Column(nullable = false) + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") + private LocalDateTime tanggalDimulai; + + @NotNull + @Column(nullable = false) + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") + private LocalDateTime tanggalBerakhir; + + @OneToMany(mappedBy = "course", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + private List<PengajarModel> listPengajar; + + @ManyToMany + @JoinTable(name = "penyelenggara_course", joinColumns = @JoinColumn(name = "code"), inverseJoinColumns = @JoinColumn(name = "no_penyelenggara")) + List<PenyelenggaraModel> listPenyelenggara; +} \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PengajarModel.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PengajarModel.java new file mode 100644 index 0000000000000000000000000000000000000000..0564f2b3d413db06deaaa0f5a00c81f22e2080b9 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PengajarModel.java @@ -0,0 +1,40 @@ +package apap.tutorial.belajarbelajar.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.List; + +@Setter +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "pengajar") +public class PengajarModel implements Serializable{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long noPengajar; + + @NotNull + @Size(max = 30) + @Column(name = "nama_pengajar", nullable = false) + private String namaPengajar; + + @NotNull + @Column(name = "is_pengajar_universitas", nullable = false) + private Boolean isPengajarUniversitas; + + @ManyToOne(fetch = FetchType.EAGER, optional = false) + @JoinColumn(name = "code", referencedColumnName = "code", nullable = false) + @OnDelete(action = OnDeleteAction.CASCADE) + private CourseModel course; +} \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PenyelenggaraModel.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PenyelenggaraModel.java new file mode 100644 index 0000000000000000000000000000000000000000..653cb4e69d2cc8469d774fcc41bfd2b361025c36 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/model/PenyelenggaraModel.java @@ -0,0 +1,36 @@ +package apap.tutorial.belajarbelajar.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.List; + +@Setter +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "penyelenggara") +public class PenyelenggaraModel implements Serializable{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long noPenyelenggara; + + @NotNull + @Size(max = 30) + @Column(name = "nama_penyelenggara", nullable = false) + private String namaPenyelenggara; + + @NotNull + @Column(name = "jenis_lembaga", nullable = false) + private Integer jenisLembaga; + + @ManyToMany(mappedBy = "listPenyelenggara") + List<CourseModel> listCourse; +} \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/CourseDb.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/CourseDb.java new file mode 100644 index 0000000000000000000000000000000000000000..4c47749487acb56e5c9f388443e18f4f7b5fe966 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/CourseDb.java @@ -0,0 +1,22 @@ +package apap.tutorial.belajarbelajar.repository; + +import apap.tutorial.belajarbelajar.model.CourseModel; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.*; + +import java.util.Optional; + +@Repository +public interface CourseDb extends JpaRepository<CourseModel, String>{ + Optional<CourseModel> findByCode(String code); + + @Query("SELECT c FROM CourseModel c WHERE c.code = :code") + Optional<CourseModel> findByCodeUsingQuery(@Param("code") String code); + +// @Query("SELECT c FROM CourseModel c WHERE c.code = :code ORDER BY c.nameCourse ASC") +// List<CourseModel> findByOrderName(); +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/PengajarDb.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/PengajarDb.java new file mode 100644 index 0000000000000000000000000000000000000000..7a0be51ecc49c9c0af302511b8f847e361a0d6f6 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/PengajarDb.java @@ -0,0 +1,15 @@ +package apap.tutorial.belajarbelajar.repository; + +import apap.tutorial.belajarbelajar.model.PengajarModel; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface PengajarDb extends JpaRepository<PengajarModel, Long>{ + @Query("SELECT c FROM PengajarModel c WHERE c.noPengajar = :noPengajar") + Optional<PengajarModel> findByNoPengajarQuery(@Param("noPengajar") Long noPengajar); +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/PenyelenggaraDb.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/PenyelenggaraDb.java new file mode 100644 index 0000000000000000000000000000000000000000..969ac8ae0f7e6545795d6b7b6a10c8c3ff6bedfc --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/repository/PenyelenggaraDb.java @@ -0,0 +1,9 @@ +package apap.tutorial.belajarbelajar.repository; + +import apap.tutorial.belajarbelajar.model.PenyelenggaraModel; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PenyelenggaraDb extends JpaRepository<PenyelenggaraModel, Long>{ +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseService.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseService.java index 421b62a3e271801dc8f650ef5a65555145f84112..61804fca56f03f4f02a502fd4d6f295b5bd8c021 100644 --- a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseService.java +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseService.java @@ -1,15 +1,15 @@ package apap.tutorial.belajarbelajar.service; + import apap.tutorial.belajarbelajar.model.CourseModel; -import java.util.List; -public interface CourseService { +import java.util.List; +public interface CourseService{ void addCourse(CourseModel course); - List<CourseModel> getListCourse(); - + List<CourseModel> getCourseSort(); CourseModel getCourseByCodeCourse(String code); + CourseModel getCourseByCodeCourseQuery(String code); + CourseModel updateCourse(CourseModel course); -// CourseModel deleteCourse(CourseModel course); -} - +} \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseServiceImpl.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseServiceImpl.java index 9589810d30216d6cb3149ff9d9031990d7c35665..edfe44f2a96b14a43914bb997d20cbf8808b9d92 100644 --- a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseServiceImpl.java +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/CourseServiceImpl.java @@ -1,38 +1,55 @@ package apap.tutorial.belajarbelajar.service; -import java.util.ArrayList; -import java.util.List; - +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.repository.CourseDb; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; -import apap.tutorial.belajarbelajar.model.CourseModel; +import javax.transaction.Transactional; +import java.util.List; +import java.util.Optional; @Service +@Transactional public class CourseServiceImpl implements CourseService{ - private List<CourseModel> listCourse; - - public CourseServiceImpl(){ - listCourse = new ArrayList<>(); - } + @Autowired + CourseDb courseDb; @Override public void addCourse(CourseModel course) { - listCourse.add(course); + courseDb.save(course); } @Override public List<CourseModel> getListCourse() { - return listCourse; + return courseDb.findAll(); } @Override - public CourseModel getCourseByCodeCourse(String code){ - for (CourseModel course: listCourse) { - if (course.getCode().equals(code)) { - return course; - } - } - return null; + public CourseModel getCourseByCodeCourse(String code) { + Optional<CourseModel> course = courseDb.findByCode(code); + if (course.isPresent()) { + return course.get(); + } else return null; } -} + @Override + public CourseModel getCourseByCodeCourseQuery(String code) { + Optional<CourseModel> course = courseDb.findByCodeUsingQuery(code); + if (course.isPresent()) { + return course.get(); + } else return null; + } + + @Override + public List<CourseModel> getCourseSort() { + return courseDb.findAll(Sort.by(Sort.Direction.ASC, "nameCourse")); + } + + @Override + public CourseModel updateCourse(CourseModel course) { + courseDb.save(course); + return course; + } +} \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarService.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarService.java new file mode 100644 index 0000000000000000000000000000000000000000..e62243517e641a0a479d00469990874a7a09eeb3 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarService.java @@ -0,0 +1,12 @@ +package apap.tutorial.belajarbelajar.service; + +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.model.PengajarModel; + + +public interface PengajarService { + void addPengajar(PengajarModel pengajar); + PengajarModel updatePengajar(PengajarModel pengajar); + PengajarModel getPengajarByNoPengajar(Long noPengajar); + String validateUpdate(PengajarModel pengajarModel); +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarServiceImpl.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..341bfebe218e0c6eeb2ff93c720d511c2d029e36 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PengajarServiceImpl.java @@ -0,0 +1,47 @@ +package apap.tutorial.belajarbelajar.service; + +import apap.tutorial.belajarbelajar.model.CourseModel; +import apap.tutorial.belajarbelajar.model.PengajarModel; +import apap.tutorial.belajarbelajar.repository.PengajarDb; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.time.LocalDateTime; +import java.util.Optional; + +@Service +@Transactional +public class PengajarServiceImpl implements PengajarService{ + @Autowired + PengajarDb pengajarDb; + + @Override + public void addPengajar(PengajarModel pengajar) { + pengajarDb.save(pengajar); + } + + @Override + public PengajarModel updatePengajar(PengajarModel pengajar) { + pengajarDb.save(pengajar); + return pengajar; + } + @Override + public PengajarModel getPengajarByNoPengajar(Long noPengajar) { + Optional<PengajarModel> pengajar = pengajarDb.findByNoPengajarQuery(noPengajar); + if (pengajar.isPresent()) { + return pengajar.get(); + } else return null; + } + + @Override + public String validateUpdate(PengajarModel pengajar) { + if (pengajar != null) { + if (pengajar.getCourse().getTanggalBerakhir().isBefore(LocalDateTime.now())) { +// pengajarDb.delete(pengajar); + return "form-update-pengajar"; + } + } + return "error-update-pengajar"; + } +} \ No newline at end of file diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PenyelenggaraService.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PenyelenggaraService.java new file mode 100644 index 0000000000000000000000000000000000000000..c3f2137bb9dc8451a42bab701998ac9255efaa80 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PenyelenggaraService.java @@ -0,0 +1,7 @@ +package apap.tutorial.belajarbelajar.service; + +import apap.tutorial.belajarbelajar.model.PenyelenggaraModel; + +public interface PenyelenggaraService { + void addPenyelenggara(PenyelenggaraModel penyelenggara); +} diff --git a/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PenyelenggaraServiceImpl.java b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PenyelenggaraServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..342e748ebb99b9ac2660a1bcd5249a3e62fa6a78 --- /dev/null +++ b/belajarbelajar/src/main/java/apap/tutorial/belajarbelajar/service/PenyelenggaraServiceImpl.java @@ -0,0 +1,20 @@ +package apap.tutorial.belajarbelajar.service; + +import apap.tutorial.belajarbelajar.model.PenyelenggaraModel; +import apap.tutorial.belajarbelajar.repository.PenyelenggaraDb; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Service +@Transactional +public class PenyelenggaraServiceImpl implements PenyelenggaraService{ + @Autowired + PenyelenggaraDb penyelenggaraDb; + + @Override + public void addPenyelenggara(PenyelenggaraModel penyelenggara) { + penyelenggaraDb.save(penyelenggara); + } +} \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/application.properties b/belajarbelajar/src/main/resources/application.properties index 8b137891791fe96927ad78e64b0aad7bded08bdc..9be6051e081b0d6bde7187c1cb54fe1470398e90 100644 --- a/belajarbelajar/src/main/resources/application.properties +++ b/belajarbelajar/src/main/resources/application.properties @@ -1 +1,16 @@ +#konfigurasi untuk koneksi MySQL +spring.sql.init.platform=mysql +spring.datasource.driver-class-name=com.mysql.jdbc.Driver +#sesuaikan NAMA_DATABASE dengan nama database anda +spring.datasource.url=jdbc:mysql://localhost:3306/belajarbelajar?useSSL=false&serverTimezone=Asia/Jakarta + +#sesuaikan dengan NAMA dan PASSWORD mysql anda +spring.datasource.username=root +spring.datasource.password= + +#optimize query untuk db MySQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect + +#pembuatan database (create || create drop || validate || update) +spring.jpa.hibernate.ddl-auto=update diff --git a/belajarbelajar/src/main/resources/templates/add-course.html b/belajarbelajar/src/main/resources/templates/add-course.html index e52f27e83b8ea9776f3f10f46c3c4338bfa3da04..a890d8030feb145e4b71ce226c926a73ac56e2e7 100644 --- a/belajarbelajar/src/main/resources/templates/add-course.html +++ b/belajarbelajar/src/main/resources/templates/add-course.html @@ -1,16 +1,20 @@ <!DOCTYPE html> <html lang="en" xmlns:th="http://thymeleaf.org"> <head> - <meta charset="UTF-8" /> - <meta http-equiv="X-UA-Compatible" content="IE=edge" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Add Course</title> -</head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> <body> -<h2 - th:text="'Course dengan code Course ' + ${code} + ' berhasil ditambahkan.'"> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2 th:text="'Course dengan code ' + ${code} + ' berhasil ditambahkan.'"></h2> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> -</h2> -<a href="/course/viewAll">Kembali</a> </body> </html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/add-pengajar.html b/belajarbelajar/src/main/resources/templates/add-pengajar.html new file mode 100644 index 0000000000000000000000000000000000000000..ffc7fa102833f71c1dac9a270548109c7574055d --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/add-pengajar.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2 th:text="'Pengajar dengan no pengajar ' + ${noPengajar} + ' berhasil ditambahkan.'"></h2> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/berhasil-ditambahkan.html b/belajarbelajar/src/main/resources/templates/berhasil-ditambahkan.html deleted file mode 100644 index e9abc5ba5d5fe60643796f573bce59dae276b725..0000000000000000000000000000000000000000 --- a/belajarbelajar/src/main/resources/templates/berhasil-ditambahkan.html +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html> -<html lang="en" xmlns:th="http://thymeleaf.org"> -<head> - <meta charset="UTF-8" /> - <meta http-equiv="X-UA-Compatible" content="ie=edge"/> - <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/> - <title>Notifikasi</title> -</head> -<body> -<h2>Berhasil Ditambahkan</h2> - -<a href="/course/viewAll">Kembali</a> -</body> -</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/delete-course.html b/belajarbelajar/src/main/resources/templates/delete-course.html index 43d036829073100b4808b229a273f5d2ce2dd487..901b3a797653f2aac0ff5013c5bbb1d2452fd187 100644 --- a/belajarbelajar/src/main/resources/templates/delete-course.html +++ b/belajarbelajar/src/main/resources/templates/delete-course.html @@ -1,14 +1,15 @@ <!DOCTYPE html> <html lang="en" xmlns:th="http://thymeleaf.org"> <head> - <meta charset="UTF-8" /> - <meta http-equiv="X-UA-Compatible" content="ie=edge"/> - <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/> - <title>Deleted</title> + <meta charset="UTF-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Delete Course</title> </head> <body> -<h2>Sudah berhasil di delete</h2> - +<h2 + th:text="'Course dengan code Course ' + ${code} +' berhasil dihapus.'" +></h2> <a href="/course/viewAll">Kembali</a> </body> -</html> \ No newline at end of file +</html> diff --git a/belajarbelajar/src/main/resources/templates/error-update.html b/belajarbelajar/src/main/resources/templates/error-update.html new file mode 100644 index 0000000000000000000000000000000000000000..95758558ae254550251b6315652399a2dd08801c --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/error-update.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2 th:text="'Error terjadi saat mengupdate!'"></h2> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/form-add-course.html b/belajarbelajar/src/main/resources/templates/form-add-course.html new file mode 100644 index 0000000000000000000000000000000000000000..3c0cebf0798a3679fb161c6213696c1c59ab3d17 --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/form-add-course.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2>Tambah Course</h2> + <br> + <form th:action="@{/course/add}" th:object="${course}" method="POST"> + Code Course: <br> + <input class="form-control" type="text" name="code"/> + <br><br> + + Nama Course: <br> + <input class="form-control" type="text" name="nameCourse"/> + <br><br> + + Description: <br> + <input class="form-control" type="text" name="description"/> + <br><br> + + Jumlah SKS: <br> + <input required class="form-control" type="number" name="jumlahSks" /> + <br><br> + + Tanggal Dibuka: <br> + <input required class="form-control" type="datetime-local" name="tanggalDimulai" /> + <br><br> + + Tanggal Ditutup: <br> + <input required class="form-control" type="datetime-local" name="tanggalBerakhir" /> + <br><br> + + <button class="btn btn-primary" type="submit">Submit</button> + <a class="btn btn-primary" href="/">Home</a> + </form> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/form-add-pengajar.html b/belajarbelajar/src/main/resources/templates/form-add-pengajar.html new file mode 100644 index 0000000000000000000000000000000000000000..e873e2734388688d336fcae550e2ab1fd06131b8 --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/form-add-pengajar.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2>Tambah Pengajar</h2> + <br> + <form th:action="@{/pengajar/add}" th:object="${pengajar}" method="POST"> + <input type="hidden" th:field="*{course}" /> + + Nama Pengajar : <br> + <input class="form-control" type="text" name="namaPengajar"/> + <br> + + Tipe Pengajar : <br> + <select name="isPengajarUniversitas"> + <option value="0">Bukan Pengajar Universitas</option> + <option value="1">Pengajar Universitas</option> + </select> + <br><br> + + <button class="btn btn-primary" type="submit">Submit</button> + <a class="btn btn-primary" href="/">Home</a> + </form> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/form-update-course.html b/belajarbelajar/src/main/resources/templates/form-update-course.html new file mode 100644 index 0000000000000000000000000000000000000000..d30486045232251478c8613be1d1ef7c8d7b8caa --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/form-update-course.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2>Update Course</h2> + <br> + <form th:action="@{/course/update}" th:object="${course}" method="POST"> + + <input type="hidden" th:field="*{code}" /> + + + Nama Course: <br> + <input class="form-control" type="text" name="nameCourse" th:value="*{nameCourse}"/> + <br><br> + + Description: <br> + <input class="form-control" type="text" name="description" th:value="*{description}"/> + <br><br> + + Jumlah SKS: <br> + <input required class="form-control" type="number" name="jumlahSks" th:value="*{jumlahSks}" /> + <br><br> + + Tanggal Dibuka: <br> + <input required class="form-control" type="datetime-local" name="tanggalDimulai" th:value="*{tanggalDimulai}"/> + <br><br> + + Tanggal Ditutup: <br> + <input required class="form-control" type="datetime-local" name="tanggalBerakhir" th:value="*{tanggalBerakhir}"/> + <br><br> + + + + <button class="btn btn-primary" type="submit">Submit</button> + <a class="btn btn-primary" href="/course/viewall">Kembali</a> + </form> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/form-update-pengajar.html b/belajarbelajar/src/main/resources/templates/form-update-pengajar.html new file mode 100644 index 0000000000000000000000000000000000000000..205d403bfcf3cda06a211602a220a48973e3d87d --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/form-update-pengajar.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2>Update Pengajar</h2> + <br> + <form th:action="@{/pengajar/update}" th:object="${pengajar}" method="POST"> + + <input type="hidden" th:field="*{course}" /> + + + Kode: <br> + <input type="text" th:value="*{noPengajar}" readonly th:field="*{noPengajar}" /> + + + Nama Pengajar: <br> + <input class="form-control" type="text" name="namaPengajar" th:value="*{namaPengajar}"/> + <br><br> + + + Tipe Pengajar : <br> + <select th:field="*{isPengajarUniversitas}"> + <option th:value="true" th:text="'Pengajar Universitas'"></option> + <option th:value="false" th:text="'Bukan Pengajar Universitas'"></option> + </select> + + + + <button class="btn btn-primary" type="submit">Submit</button> + <a class="btn btn-primary" href="/course/viewall">Kembali</a> + </form> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/home.html b/belajarbelajar/src/main/resources/templates/home.html new file mode 100644 index 0000000000000000000000000000000000000000..2bd61450963295c1352092dd788c10c41c88aabe --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/home.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2>Welcome to BelajarBelajar!</h2> + <br> + <a class="btn btn-primary" href="/course/add">Add Course</a> + <a class="btn btn-primary" href="/course/viewall">View All Course</a> + <a class="btn btn-primary" href="/course/viewall-sort">View All Course Order By Name</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/notifikasi-delete.html b/belajarbelajar/src/main/resources/templates/notifikasi-delete.html deleted file mode 100644 index 0cfc1c47905a5b41c96a8e2a31edff4d8b544562..0000000000000000000000000000000000000000 --- a/belajarbelajar/src/main/resources/templates/notifikasi-delete.html +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html> -<html lang="en" xmlns:th="http://thymeleaf.org"> -<head> - <meta charset="UTF-8" /> - <meta http-equiv="X-UA-Compatible" content="ie=edge"/> - <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/> - <title>Failed</title> -</head> -<body> -<h2>Tidak ditemukan, jadi tidak bisa di eksekusi</h2> - -<a href="/course/viewAll">Kembali</a> -</body> -</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/notifikasi-gagal-add.html b/belajarbelajar/src/main/resources/templates/notifikasi-gagal-add.html deleted file mode 100644 index 4b6d040ffc03856f651cf7713a3c9f1f9e0a7d4a..0000000000000000000000000000000000000000 --- a/belajarbelajar/src/main/resources/templates/notifikasi-gagal-add.html +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html> -<html lang="en" xmlns:th="http://thymeleaf.org"> -<head> - <meta charset="UTF-8" /> - <meta http-equiv="X-UA-Compatible" content="ie=edge"/> - <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/> - <title>Notifikasi</title> -</head> -<body> -<h2>Gagal Ditambah</h2> - -<a href="/course/viewAll">Kembali</a> -</body> -</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/update-course.html b/belajarbelajar/src/main/resources/templates/update-course.html new file mode 100644 index 0000000000000000000000000000000000000000..2e58b042b4e64e6cbf3363f37d437916002d37cb --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/update-course.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2 th:text="'Course dengan code ' + ${code} + ' berhasil diupdate.'"></h2> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/update-pengajar.html b/belajarbelajar/src/main/resources/templates/update-pengajar.html new file mode 100644 index 0000000000000000000000000000000000000000..abf380cac767573ddcfb74d220ec0e67671bb52a --- /dev/null +++ b/belajarbelajar/src/main/resources/templates/update-pengajar.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2 th:text="'Pengajar dengan nama ' + ${namaPengajar} + ' berhasil diupdate.'"></h2> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/view-course.html b/belajarbelajar/src/main/resources/templates/view-course.html index 8eefe626eea39d4408c9607f687c520f132e770c..b36d779abeca5bd8928c0524930ff151d792f79f 100644 --- a/belajarbelajar/src/main/resources/templates/view-course.html +++ b/belajarbelajar/src/main/resources/templates/view-course.html @@ -1,17 +1,41 @@ <!DOCTYPE html> <html lang="en" xmlns:th="http://thymeleaf.org"> - <head> - <meta charset="UTF-8"/> - <meta http-equiv="X-UA-Compatible" content="ie=edge" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>View Course</title> - </head> - <body> - <h2>Informasi Course</h2> - <h3 th:text="'Code Course : ' + ${course.code}"></h3> - <h3 th:text="'Nama Course : ' + ${course.nameCourse}"></h3> - <h3 th:text="'Deskripsi Course : ' + ${course.description}"></h3> - <h3 th:text="'jumlah sks Course : ' + ${course.jumlahSks}"></h3> - <a href="/course/viewAll">Kembali</a> - </body> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2>Detail Course</h2> + <br> + <p th:text="'Code Course: ' + ${course.code}"></p> + <p th:text="'Nama Course: ' + ${course.nameCourse}"></p> + <p th:text="'Description: ' + ${course.description}"></p> + <p th:text="'Jumlah SKS: ' + ${course.jumlahSks}"></p> + <p th:text="'Tanggal Dimulai: ' + ${#temporals.format(course.tanggalDimulai, 'dd MMMM yyyy HH:mm')}"></p> + <p th:text="'Tanggal Berakhir: ' + ${#temporals.format(course.tanggalBerakhir, 'dd MMMM yyyy HH:mm')}"></p> + + <div class="col"> + <br> + <h4>Pengajar </h4> + <hr> + <div th:each="pengajar : ${listPengajar}"> + <p th:text="'Nama: ' + ${pengajar.namaPengajar}"></p> + <p th:if="${pengajar.isPengajarUniversitas == false}">Pekerjaan: Non-Dosen Universitas</p> + <p th:if="${pengajar.isPengajarUniversitas == true}">Pekerjaan: Dosen Universitas</p> + <hr> + </div> + </div> + <br> + <a class="btn btn-primary" href="/course/viewall">Kembali</a> + <a class="btn btn-primary" th:href="@{/pengajar/add/} + ${course.code}">Tambah Pengajar</a> + <a class="btn btn-primary" th:href="@{/pengajar/update/}">Update Pengajar</a> + </div> + </div> + </div> +</div> + +</body> </html> \ No newline at end of file diff --git a/belajarbelajar/src/main/resources/templates/viewall-course.html b/belajarbelajar/src/main/resources/templates/viewall-course.html index 1ae68ea07b414801b936f066a698c6bb183da277..0f1b6911f1f2f734f327a00b8b327f080780bc54 100644 --- a/belajarbelajar/src/main/resources/templates/viewall-course.html +++ b/belajarbelajar/src/main/resources/templates/viewall-course.html @@ -1,19 +1,37 @@ <!DOCTYPE html> <html lang="en" xmlns:th="http://thymeleaf.org"> - <head> - <meta charset="UTF-8" /> - <meta http-equiv="X-UA-Compatible" content="ie=edge"/> - <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/> - <title>View All Course</title> - </head> - <body> - <h2>Daftar Seluruh Course</h2> - <div th:each="course: ${listCourse}"> - <h3 th:text=" 'Code Course : ' + ${course.code}"></h3> - <h3 th:text=" 'Nama Course : ' + ${course.nameCourse}"></h3> - <h3 th:text=" 'Deskripsi Course : ' + ${course.description}"></h3> - <h3 th:text=" 'jumlah sks Course : ' + ${course.jumlahSks}"></h3> +<head> + <title>BelajarBelajar</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"></head> +<body> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2>List Course</h2> + <br> + <div th:each="course : ${listCourse}"> + <p th:text="'Code Course: ' + ${course.code}"></p> + <p th:text="'Nama Course: ' + ${course.nameCourse}"></p> + <p th:text="'Description: ' + ${course.description}"></p> + <p th:text="'Jumlah SKS: ' + ${course.jumlahSks}"></p> + <p th:text="'Tanggal Dimulai: ' + ${#temporals.format(course.tanggalDimulai, 'dd MMMM yyyy HH:mm')}"></p> + <p th:text="'Tanggal Berakhir: ' + ${#temporals.format(course.tanggalBerakhir, 'dd MMMM yyyy HH:mm')}"></p> + <div class="col"> + <a class="btn btn-primary" th:href="@{/course/view(code=${course.code})}">Detail + Course</a> + <a class="btn btn-primary" th:href="@{/course/view-query(code=${course.code})}">Detail + Course By Query</a> + <a class="btn btn-primary" th:href="@{/course/update/} + ${course.code}">Update Course</a> + </div> + <hr> + </div> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> </div> - <a href="/course/viewAll">Kembali</a> - </body> + </div> +</div> + +</body> </html> \ No newline at end of file