From 134b02fbc3a7f9b461321435fae07e5307886dc2 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 21 Nov 2022 10:37:04 +0700
Subject: [PATCH 01/14] chores: managing html package, change ddl-auto to
 'create',

---
 .../src/main/resources/application.properties |  2 +-
 .../form-add-apoteker.html                    |  2 +-
 .../{manage => dokter}/list-dokter.html       |  0
 .../templates/fragments/fragment.html         | 15 +++++---
 .../main/resources/templates/home/home.html   | 38 +++++++++++++++----
 5 files changed, 42 insertions(+), 15 deletions(-)
 rename SpringTkApap/src/main/resources/templates/{manage => apoteker}/form-add-apoteker.html (95%)
 rename SpringTkApap/src/main/resources/templates/{manage => dokter}/list-dokter.html (100%)

diff --git a/SpringTkApap/src/main/resources/application.properties b/SpringTkApap/src/main/resources/application.properties
index 81719e8..573f30a 100644
--- a/SpringTkApap/src/main/resources/application.properties
+++ b/SpringTkApap/src/main/resources/application.properties
@@ -9,7 +9,7 @@ spring.datasource.password=
 
 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
 
-spring.jpa.hibernate.ddl-auto=create-drop
+spring.jpa.hibernate.ddl-auto=create
 
 spring.main.allow-circular-references=true
 
diff --git a/SpringTkApap/src/main/resources/templates/manage/form-add-apoteker.html b/SpringTkApap/src/main/resources/templates/apoteker/form-add-apoteker.html
similarity index 95%
rename from SpringTkApap/src/main/resources/templates/manage/form-add-apoteker.html
rename to SpringTkApap/src/main/resources/templates/apoteker/form-add-apoteker.html
index 84c95d2..862a8eb 100644
--- a/SpringTkApap/src/main/resources/templates/manage/form-add-apoteker.html
+++ b/SpringTkApap/src/main/resources/templates/apoteker/form-add-apoteker.html
@@ -30,7 +30,7 @@
           </select>
           <br>
           <button type="submit" class="btn btn-primary">Submit</button>
-          <a class="btn btn-link" href="/">Home</a>
+          <a class="btn btn-link" href="/static">Home</a>
         </form>
       </div>
     </div>
diff --git a/SpringTkApap/src/main/resources/templates/manage/list-dokter.html b/SpringTkApap/src/main/resources/templates/dokter/list-dokter.html
similarity index 100%
rename from SpringTkApap/src/main/resources/templates/manage/list-dokter.html
rename to SpringTkApap/src/main/resources/templates/dokter/list-dokter.html
diff --git a/SpringTkApap/src/main/resources/templates/fragments/fragment.html b/SpringTkApap/src/main/resources/templates/fragments/fragment.html
index 5ad3f54..82de4b8 100644
--- a/SpringTkApap/src/main/resources/templates/fragments/fragment.html
+++ b/SpringTkApap/src/main/resources/templates/fragments/fragment.html
@@ -37,14 +37,17 @@
       <li th:classappend="${page == 'Beranda'} ? active : ''" class="nav-item">
         <a class="nav-link" th:href="@{/}">Beranda</a>
       </li>
-      <li th:classappend="${page == 'Course'} ? active : ''"class="nav-item">
-        <a class="nav-link" th:href="@{/course/viewall/}">Resep</a>
+      <li th:classappend="${page == 'Dokter'} ? active : ''" class="nav-item">
+        <a class="nav-link" th:href="@{/}">Dokter</a>
       </li>
-      <li th:classappend="${page == 'Penyelenggara'} ? active : ''"class="nav-item">
-        <a class="nav-link" th:href="@{/penyelenggara/viewall/}">Obat</a>
+      <li th:classappend="${page == 'Resep'} ? active : ''"class="nav-item">
+        <a class="nav-link" th:href="@{/}">Resep</a>
       </li>
-      <li sec:authorize="hasAnyAuthority('Admin')" th:classappend="${page == 'User'} ? active : ''"class="nav-item">
-        <a class="nav-link" th:href="@{/user/viewall/}">Appointment</a>
+      <li th:classappend="${page == 'Obat'} ? active : ''"class="nav-item">
+        <a class="nav-link" th:href="@{/obat/add}">Obat</a>
+      </li>
+      <li sec:authorize="hasAnyAuthority('Appointment')" th:classappend="${page == 'User'} ? active : ''"class="nav-item">
+        <a class="nav-link" th:href="@{/}">Appointment</a>
       </li>
     </ul>
     <form class="form-inline my-2 my-lg-0" th:action="@{/course/view}" method="GET">
diff --git a/SpringTkApap/src/main/resources/templates/home/home.html b/SpringTkApap/src/main/resources/templates/home/home.html
index 79c6a0e..9e1ab8a 100644
--- a/SpringTkApap/src/main/resources/templates/home/home.html
+++ b/SpringTkApap/src/main/resources/templates/home/home.html
@@ -1,20 +1,44 @@
 <!DOCTYPE html>
 <html lang="en" xmlns:th="http://thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
 <head>
-  <meta charset="UTF-8">
-  <title>Beranda</title>
-  <object th:include="fragments/fragment :: css" th:remove="tag"></object>
-  <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+    <meta charset="UTF-8">
+    <title>Beranda</title>
+    <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+    <object th:include="fragments/fragment :: js" th:remove="tag"></object>
 </head>
 <body>
 <object th:replace="fragments/fragment :: navbar('Beranda')"></object>
 <div class="alert" th:if="${message}">
-  <div th:text="${message}" class="alert alert-success text-center" onclick="this.parentElement.style.display='none';"></div>
+    <div th:text="${message}" class="alert alert-success text-center"
+         onclick="this.parentElement.style.display='none';"></div>
 </div>
 
 <div class="d-flex justify-content-center">
-  <h2 th:text="'Hello '+${#httpServletRequest.remoteUser}+'!'">Login as</h2>
-  <a class="nav-item nav-link text-text-secondary" th:href="@{/logout-sso}">Logout</a>
+    <div class="m-4 d-flex flex-column justify-content-center" style="gap: 12px">
+        <div>
+            <h2 th:text="'Hello '+${#httpServletRequest.remoteUser}+'!'">Login as</h2>
+        </div>
+        <div>
+            <div>
+                <h5>Dokter Section</h5>
+            </div>
+            <a th:href="@{/}" class="mx-2 btn btn-primary">Sebuah Tombol</a>
+        </div>
+        <div>
+            <div>
+                <h5>Resep Section</h5>
+            </div>
+            <a th:href="@{/}" class="mx-2 btn btn-primary">Sebuah Tombol</a>
+        </div>
+        <div>
+            <div>
+                <h5>Obat Section</h5>
+            </div>
+            <a th:href="@{/obat/add}" class="mx-2 btn btn-primary">Add Obat</a>
+            <a th:href="@{/}" class="mx-2 btn btn-primary">Lihat Semua Obat</a>
+        </div>
+        <a class="my-2 mx-2 btn btn-danger pt-2" th:href="@{/logout-sso}">Logout</a>
+    </div>
 </div>
 
 </body>
-- 
GitLab


From 0399af1dc2d7baf7b44c2e84d8c51aab5c868190 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 21 Nov 2022 10:39:04 +0700
Subject: [PATCH 02/14] feat/obat: implemented add obat feature

---
 .../TK/SpringTkApap/jumlah/JumlahModel.java   |  2 +-
 .../obat/controller/ObatController.java       | 38 +++++++++++++++++++
 .../obat/{ => model}/ObatModel.java           |  8 ++--
 .../SpringTkApap/obat/repository/ObatDb.java  | 10 +++++
 .../obat/service/ObatService.java             |  7 ++++
 .../obat/service/ObatServiceImpl.java         | 21 ++++++++++
 .../resources/templates/obat/add-obat.html    | 26 +++++++++++++
 .../templates/obat/form-add-obat.html         | 31 +++++++++++++++
 8 files changed, 138 insertions(+), 5 deletions(-)
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
 rename SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/{ => model}/ObatModel.java (86%)
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
 create mode 100644 SpringTkApap/src/main/resources/templates/obat/add-obat.html
 create mode 100644 SpringTkApap/src/main/resources/templates/obat/form-add-obat.html

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java
index eeb05fb..c12bf8f 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java
@@ -5,7 +5,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.hibernate.annotations.OnDelete;
 import org.hibernate.annotations.OnDeleteAction;
-import spring.TK.SpringTkApap.obat.ObatModel;
+import spring.TK.SpringTkApap.obat.model.ObatModel;
 import spring.TK.SpringTkApap.resep.ResepModel;
 
 import javax.persistence.*;
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
new file mode 100644
index 0000000..5e07643
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
@@ -0,0 +1,38 @@
+package spring.TK.SpringTkApap.obat.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+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.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import spring.TK.SpringTkApap.jumlah.JumlahModel;
+import spring.TK.SpringTkApap.obat.model.ObatModel;
+import spring.TK.SpringTkApap.obat.service.ObatService;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Controller
+@RequestMapping("/obat")
+public class ObatController {
+
+    @Autowired
+    private ObatService obatService;
+
+    @GetMapping("/add")
+    public String addObatForm(Model model){
+        ObatModel obat = new ObatModel();
+        model.addAttribute("obat", obat);
+        return "obat/form-add-obat";
+    }
+
+    @PostMapping("/add")
+    public String addObatSubmit(@ModelAttribute ObatModel obat, Model model){
+        obatService.addObat(obat);
+        model.addAttribute("obat", obat);
+        return "obat/add-obat";
+    }
+
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/ObatModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
similarity index 86%
rename from SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/ObatModel.java
rename to SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
index 8a315c4..e170917 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/ObatModel.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
@@ -1,9 +1,7 @@
-package spring.TK.SpringTkApap.obat;
+package spring.TK.SpringTkApap.obat.model;
 
 import com.sun.istack.NotNull;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.*;
 import org.hibernate.annotations.GenericGenerator;
 import spring.TK.SpringTkApap.jumlah.JumlahModel;
 
@@ -12,6 +10,8 @@ import java.io.Serializable;
 import java.util.List;
 
 @Data @Entity
+@Setter
+@Getter
 @Table(name = "obat")
 @NoArgsConstructor
 @AllArgsConstructor
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java
new file mode 100644
index 0000000..d8e98f4
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java
@@ -0,0 +1,10 @@
+package spring.TK.SpringTkApap.obat.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import spring.TK.SpringTkApap.obat.model.ObatModel;
+
+@Repository
+public interface ObatDb extends JpaRepository<ObatModel, String> {
+
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
new file mode 100644
index 0000000..8ce968f
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
@@ -0,0 +1,7 @@
+package spring.TK.SpringTkApap.obat.service;
+
+import spring.TK.SpringTkApap.obat.model.ObatModel;
+
+public interface ObatService {
+    void addObat(ObatModel obat);
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
new file mode 100644
index 0000000..1c90cf4
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
@@ -0,0 +1,21 @@
+package spring.TK.SpringTkApap.obat.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import spring.TK.SpringTkApap.obat.model.ObatModel;
+import spring.TK.SpringTkApap.obat.repository.ObatDb;
+
+import javax.transaction.Transactional;
+
+@Service
+@Transactional
+public class ObatServiceImpl implements ObatService{
+
+    @Autowired
+    private ObatDb obatDb;
+
+    @Override
+    public void addObat(ObatModel obat) {
+        obatDb.save(obat);
+    }
+}
diff --git a/SpringTkApap/src/main/resources/templates/obat/add-obat.html b/SpringTkApap/src/main/resources/templates/obat/add-obat.html
new file mode 100644
index 0000000..7cbf49c
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/obat/add-obat.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <title>RumahSehat</title>
+    <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+    <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+
+<nav th:replace="fragments/fragment :: navbar('Obat')"></nav>
+
+<div class="container">
+    <div class="card m-4 p-4">
+        <div class="card-body">
+            <div class="justify-content-center">
+                <h2 th:text="'Obat dengan nama ' + ${obat.namaObat} + ' 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/SpringTkApap/src/main/resources/templates/obat/form-add-obat.html b/SpringTkApap/src/main/resources/templates/obat/form-add-obat.html
new file mode 100644
index 0000000..2eded3e
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/obat/form-add-obat.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <title>Tambah Obat</title>
+    <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+    <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+<object th:replace="fragments/fragment :: navbar('Obat')"></object>
+<div class = "container">
+    <div class="card m-4 p-4">
+        <div class="card-body">
+            <div class="justify-content-center"> <h2>Tambah Obat Baru</h2>
+                <br>
+                <form th:action="@{/obat/add}" th:object="${obat}" method="POST">
+                    <label>Harga</label>
+                    <input th:field="*{harga}" type="number" name="harga" class="form-control"/>
+                    <label>Nama</label>
+                    <input th:field="*{namaObat}" type="text" name="nama" class="form-control"/>
+                    <label>Stok</label>
+                    <input th:field="*{stok}" type="number" name="stok" class="form-control"/>
+                    <br/>
+                    <button type="submit" class="btn btn-primary">Submit</button>
+                    <a class="btn btn-link" href="/static">Home</a>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>
\ No newline at end of file
-- 
GitLab


From 251a405f13ea67ffb55e70780740b762347793e6 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 21 Nov 2022 10:39:44 +0700
Subject: [PATCH 03/14] chores: managing html package on add dokter feature

---
 .../templates/{manage => dokter}/form-add-dokter.html          | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
 rename SpringTkApap/src/main/resources/templates/{manage => dokter}/form-add-dokter.html (92%)

diff --git a/SpringTkApap/src/main/resources/templates/manage/form-add-dokter.html b/SpringTkApap/src/main/resources/templates/dokter/form-add-dokter.html
similarity index 92%
rename from SpringTkApap/src/main/resources/templates/manage/form-add-dokter.html
rename to SpringTkApap/src/main/resources/templates/dokter/form-add-dokter.html
index 0e312ae..3628006 100644
--- a/SpringTkApap/src/main/resources/templates/manage/form-add-dokter.html
+++ b/SpringTkApap/src/main/resources/templates/dokter/form-add-dokter.html
@@ -6,6 +6,7 @@
   <object th:include="fragments/fragment :: js" th:remove="tag"></object>
 </head>
 <body>
+<object th:replace="fragments/fragment :: navbar('Dokter')"></object>
 <div class = "container">
   <div class="card m-4 p-4">
     <div class="card-body">
@@ -33,7 +34,7 @@
           <input type="text" name="tarif" class="form-control"/>
           <br>
           <button type="submit" class="btn btn-primary">Submit</button>
-          <a class="btn btn-link" href="/">Home</a>
+          <a class="btn btn-link" href="/static">Home</a>
         </form>
       </div>
     </div>
-- 
GitLab


From 2cd647c9de852a06c3bd349e22d2508416ed671c Mon Sep 17 00:00:00 2001
From: Muhammad Tsaqib Ibadillah Wahid <muhammad.tsaqib@ui.ac.id>
Date: Mon, 21 Nov 2022 11:15:19 +0700
Subject: [PATCH 04/14] Feat/obat: finished viewall feature for model Obat.

---
 .../obat/controller/ObatController.java       |  8 +++
 .../obat/service/ObatService.java             |  4 ++
 .../obat/service/ObatServiceImpl.java         |  6 ++
 .../main/resources/templates/home/home.html   |  2 +-
 .../templates/obat/viewall-obat.html          | 57 +++++++++++++++++++
 5 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 SpringTkApap/src/main/resources/templates/obat/viewall-obat.html

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
index 5e07643..88450e4 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
@@ -35,4 +35,12 @@ public class ObatController {
         return "obat/add-obat";
     }
 
+    @GetMapping("/viewall")
+    public String listObat(Model model) {
+        List<ObatModel> listObat = obatService.getListObat();
+
+        model.addAttribute("listObat", listObat);
+        return "obat/viewall-obat";
+    }
+
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
index 8ce968f..d752f2f 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
@@ -2,6 +2,10 @@ package spring.TK.SpringTkApap.obat.service;
 
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 
+import java.util.List;
+
 public interface ObatService {
     void addObat(ObatModel obat);
+
+    List<ObatModel> getListObat();
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
index 1c90cf4..a632d13 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
@@ -6,6 +6,7 @@ import spring.TK.SpringTkApap.obat.model.ObatModel;
 import spring.TK.SpringTkApap.obat.repository.ObatDb;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 @Service
 @Transactional
@@ -18,4 +19,9 @@ public class ObatServiceImpl implements ObatService{
     public void addObat(ObatModel obat) {
         obatDb.save(obat);
     }
+
+    @Override
+    public List<ObatModel> getListObat() {
+        return obatDb.findAll();
+    }
 }
diff --git a/SpringTkApap/src/main/resources/templates/home/home.html b/SpringTkApap/src/main/resources/templates/home/home.html
index 9e1ab8a..5277f90 100644
--- a/SpringTkApap/src/main/resources/templates/home/home.html
+++ b/SpringTkApap/src/main/resources/templates/home/home.html
@@ -35,7 +35,7 @@
                 <h5>Obat Section</h5>
             </div>
             <a th:href="@{/obat/add}" class="mx-2 btn btn-primary">Add Obat</a>
-            <a th:href="@{/}" class="mx-2 btn btn-primary">Lihat Semua Obat</a>
+            <a th:href="@{/obat/viewall}" class="mx-2 btn btn-primary">Lihat Semua Obat</a>
         </div>
         <a class="my-2 mx-2 btn btn-danger pt-2" th:href="@{/logout-sso}">Logout</a>
     </div>
diff --git a/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html b/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html
new file mode 100644
index 0000000..070c7e1
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
+<head>
+  <meta charset="UTF-8">
+  <title>RumahSehat - Daftar Obat</title>
+  <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+  <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+<object th:replace="fragments/fragment :: navbar('Beranda')"></object>
+<div class="container">
+  <div class="card m-4 p-4">
+    <div class="card-body">
+      <div class="justify-content-center">
+        <h2>Daftar Obat</h2>
+        <br>
+        <div th:if="*{listObat.size() != 0}">
+          <br>
+          <table class="table">
+            <thead>
+            <tr>
+              <th>No</th>
+              <th>Id</th>
+              <th>Nama</th>
+              <th>Stok</th>
+              <th>Harga</th>
+              <th>Aksi</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr th:each="obat, iterationStatus : ${listObat}"
+                th:style="${iterationStatus.even} ? 'font-weight:bold;'">
+              <td th:text="${iterationStatus.count}"></td>
+              <td th:text="${obat.idObat}"></td>
+              <td th:text="${obat.namaObat}"></td>
+              <td th:text="${obat.stok}"></td>
+              <td th:text="${obat.harga}"></td>
+              <td>
+                <a class="btn btn-sm btn-warning" th:href="@{/obat/update/} + ${obat.idObat}">Update Stok</a>
+              </td>
+            </tr>
+            </tbody>
+          </table>
+        </div>
+        <div th:unless="*{listObat.size() != 0}">
+          <br>
+          <h4 th:text="'Belum ada obat yang terdaftar'"></h4>
+        </div>
+        <br>
+        <a class="btn btn-primary" href="/">Home</a>
+      </div>
+    </div>
+  </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
-- 
GitLab


From 2ef447cbab98a0675ce4dd110690d52de112ed42 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 21 Nov 2022 14:45:17 +0700
Subject: [PATCH 05/14] chores: update fragment, added 403 error page, and
 authorization for obat

---
 .../auth/security/WebSecurityConfig.java      |  2 ++
 .../obat/controller/ObatController.java       | 19 +++++++++++++----
 .../TK/SpringTkApap/obat/model/ObatModel.java |  2 +-
 .../SpringTkApap/obat/repository/ObatDb.java  |  4 +++-
 .../obat/service/ObatService.java             |  2 +-
 .../obat/service/ObatServiceImpl.java         | 11 ++++++++++
 .../main/resources/templates/error/403.html   | 21 +++++++++++++++++++
 .../templates/fragments/fragment.html         |  2 +-
 .../templates/obat/viewall-obat.html          |  9 ++++++--
 9 files changed, 62 insertions(+), 10 deletions(-)
 create mode 100644 SpringTkApap/src/main/resources/templates/error/403.html

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
index 93321e7..46bfbe5 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
@@ -35,6 +35,8 @@ public class WebSecurityConfig {
                     .antMatchers("/login-sso", "/validate-ticket", "/validate-ticket/**").permitAll()
                     .antMatchers("/home-not-access", "/logout-not-access").permitAll()
                     .antMatchers("/logout-sso").permitAll()
+                    .antMatchers("/obat/viewall").hasAnyAuthority("APOTEKER", "ADMIN")
+                    .antMatchers("/obat/update/**").hasAuthority("APOTEKER")
                     .anyRequest().authenticated()
                     .and( )
                     .formLogin()
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
index 88450e4..1bfa29f 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
@@ -3,10 +3,7 @@ package spring.TK.SpringTkApap.obat.controller;
 import org.springframework.beans.factory.annotation.Autowired;
 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.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 import spring.TK.SpringTkApap.jumlah.JumlahModel;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 import spring.TK.SpringTkApap.obat.service.ObatService;
@@ -43,4 +40,18 @@ public class ObatController {
         return "obat/viewall-obat";
     }
 
+    @GetMapping("/update/{idObat}")
+    public String updateObatForm(@PathVariable String idObat, Model model){
+        ObatModel obat = obatService.getObat(idObat);
+        model.addAttribute("obat", obat);
+        return "obat/form-update-obat";
+    }
+
+    @PostMapping("/update")
+    public String updateObatSubmit(@ModelAttribute ObatModel obat, Model model){
+        obatService.addObat(obat);
+        model.addAttribute("obat", obat);
+        return "obat/update-obat";
+    }
+
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
index e170917..325d61d 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
@@ -24,7 +24,7 @@ public class ObatModel implements Serializable {
     private String namaObat;
 
     @NotNull @Column(nullable = false)
-    private Integer stok;
+    private Integer stok = 100;
 
     @NotNull @Column(nullable = false)
     private Integer harga;
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java
index d8e98f4..bab2d8a 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java
@@ -4,7 +4,9 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 
+import java.util.Optional;
+
 @Repository
 public interface ObatDb extends JpaRepository<ObatModel, String> {
-
+    Optional<ObatModel> findByIdObat(String idObat);
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
index d752f2f..43e7c5d 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java
@@ -6,6 +6,6 @@ import java.util.List;
 
 public interface ObatService {
     void addObat(ObatModel obat);
-
     List<ObatModel> getListObat();
+    ObatModel getObat(String idObat);
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
index a632d13..192d056 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java
@@ -7,6 +7,7 @@ import spring.TK.SpringTkApap.obat.repository.ObatDb;
 
 import javax.transaction.Transactional;
 import java.util.List;
+import java.util.Optional;
 
 @Service
 @Transactional
@@ -24,4 +25,14 @@ public class ObatServiceImpl implements ObatService{
     public List<ObatModel> getListObat() {
         return obatDb.findAll();
     }
+
+    @Override
+    public ObatModel getObat(String idObat) {
+        Optional<ObatModel> obat = obatDb.findByIdObat(idObat);
+        if(obat.isPresent()){
+            return obat.get();
+        } else{
+            return null;
+        }
+    }
 }
diff --git a/SpringTkApap/src/main/resources/templates/error/403.html b/SpringTkApap/src/main/resources/templates/error/403.html
new file mode 100644
index 0000000..c57eb5d
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/error/403.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://thymeleaf.org">
+<head>
+  <meta charset="UTF-8">
+  <title>403 NOT FOUND</title>
+  <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+  <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+<nav th:replace="fragments/fragment :: navbar('Beranda')"></nav>
+
+<div class="d-flex justify-content-center">
+  <div class="m-4 d-flex flex-column justify-content-center">
+    <h2 class="text-center" th:text="${message}"></h2>
+    <h4 class="text-center"> You don't have the authority to access this page.</h4>
+    <a class="text-center" th:href="@{/}">Home</a>
+  </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/SpringTkApap/src/main/resources/templates/fragments/fragment.html b/SpringTkApap/src/main/resources/templates/fragments/fragment.html
index 82de4b8..2b2e977 100644
--- a/SpringTkApap/src/main/resources/templates/fragments/fragment.html
+++ b/SpringTkApap/src/main/resources/templates/fragments/fragment.html
@@ -44,7 +44,7 @@
         <a class="nav-link" th:href="@{/}">Resep</a>
       </li>
       <li th:classappend="${page == 'Obat'} ? active : ''"class="nav-item">
-        <a class="nav-link" th:href="@{/obat/add}">Obat</a>
+        <a class="nav-link" th:href="@{/obat/viewall}">Obat</a>
       </li>
       <li sec:authorize="hasAnyAuthority('Appointment')" th:classappend="${page == 'User'} ? active : ''"class="nav-item">
         <a class="nav-link" th:href="@{/}">Appointment</a>
diff --git a/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html b/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html
index 070c7e1..5f3cdf0 100644
--- a/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html
+++ b/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html
@@ -7,12 +7,17 @@
   <object th:include="fragments/fragment :: js" th:remove="tag"></object>
 </head>
 <body>
-<object th:replace="fragments/fragment :: navbar('Beranda')"></object>
+<object th:replace="fragments/fragment :: navbar('Obat')"></object>
 <div class="container">
   <div class="card m-4 p-4">
     <div class="card-body">
       <div class="justify-content-center">
-        <h2>Daftar Obat</h2>
+        <div class="d-flex justify-content-between">
+          <h2>Daftar Obat</h2>
+          <div>
+            <a class="btn btn-primary" th:href="@{/obat/add/}">Add Obat</a>
+          </div>
+        </div>
         <br>
         <div th:if="*{listObat.size() != 0}">
           <br>
-- 
GitLab


From ef906a17d4eba11da938729eec85f80551e1d370 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 21 Nov 2022 14:46:46 +0700
Subject: [PATCH 06/14] feat/obat: implemented update obat

---
 .../templates/obat/form-update-obat.html      | 32 +++++++++++++++++++
 .../resources/templates/obat/update-obat.html | 26 +++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 SpringTkApap/src/main/resources/templates/obat/form-update-obat.html
 create mode 100644 SpringTkApap/src/main/resources/templates/obat/update-obat.html

diff --git a/SpringTkApap/src/main/resources/templates/obat/form-update-obat.html b/SpringTkApap/src/main/resources/templates/obat/form-update-obat.html
new file mode 100644
index 0000000..8bb5719
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/obat/form-update-obat.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+  <title>Update Obat</title>
+  <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+  <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+<object th:replace="fragments/fragment :: navbar('Obat')"></object>
+<div class = "container">
+  <div class="card m-4 p-4">
+    <div class="card-body">
+      <div class="justify-content-center"> <h2>Update Obat</h2>
+        <br>
+        <form th:action="@{/obat/update}" th:object="${obat}" method="POST">
+          <input hidden th:field="*{idObat}" type="text" name="harga" class="form-control"/>
+          <label>Harga</label>
+          <input readonly th:field="*{harga}" type="number" name="harga" class="form-control"/>
+          <label>Nama</label>
+          <input readonly th:field="*{namaObat}" type="text" name="nama" class="form-control"/>
+          <label>Stok</label>
+          <input th:field="*{stok}" type="number" name="stok" class="form-control"/>
+          <br/>
+          <button type="submit" class="btn btn-primary">Submit</button>
+          <a class="btn btn-link" href="/">Home</a>
+        </form>
+      </div>
+    </div>
+  </div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/SpringTkApap/src/main/resources/templates/obat/update-obat.html b/SpringTkApap/src/main/resources/templates/obat/update-obat.html
new file mode 100644
index 0000000..d76c288
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/obat/update-obat.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <title>RumahSehat</title>
+    <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+    <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+
+<nav th:replace="fragments/fragment :: navbar('Obat')"></nav>
+
+<div class="container">
+    <div class="card m-4 p-4">
+        <div class="card-body">
+            <div class="justify-content-center">
+                <h2 th:text="'Stok obat ' + ${obat.namaObat} + ' berhasil diupdate menjadi ' + ${obat.stok} + '.'"></h2>
+                <br>
+                <a class="btn btn-primary" href="/">Home</a>
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
-- 
GitLab


From d8e886bf2260c4e2deb025a0e4757df2c756e52a Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Tue, 22 Nov 2022 16:31:13 +0700
Subject: [PATCH 07/14] feat/obat: implemented rest api

---
 .../obat/rest/ObatRestController.java         | 56 +++++++++++++++++++
 .../obat/rest/ObatRestService.java            | 12 ++++
 .../obat/rest/ObatRestServiceImpl.java        | 45 +++++++++++++++
 3 files changed, 113 insertions(+)
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java
new file mode 100644
index 0000000..6988170
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java
@@ -0,0 +1,56 @@
+package spring.TK.SpringTkApap.obat.rest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ResponseStatusException;
+import spring.TK.SpringTkApap.obat.model.ObatModel;
+
+import java.util.List;
+import java.util.NoSuchElementException;
+
+@RestController
+@RequestMapping("/api/obat")
+public class ObatRestController {
+    @Autowired
+    ObatRestService obatRestService;
+
+    @PostMapping("/create")
+    private ObatModel createObat(@RequestBody ObatModel obat, BindingResult bindingResult){
+        if (bindingResult.hasFieldErrors()) {
+            throw new ResponseStatusException(
+                    HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field."
+            );
+        } else {
+            return obatRestService.createObat(obat);
+        }
+    }
+
+    @GetMapping("/{idObat}")
+    private ObatModel getObat(@PathVariable(name = "idObat") String idObat){
+        try {
+            return obatRestService.getObat(idObat);
+        } catch (NoSuchElementException e) {
+            throw new ResponseStatusException(
+                    HttpStatus.NOT_FOUND, "Obat " + idObat + " tidak ditemukan."
+            );
+        }
+    }
+
+    @GetMapping("/all")
+    private List<ObatModel> getAllObat(){
+        return obatRestService.retrieveObat();
+    }
+
+    @PutMapping(value = "/update-stok/{idObat}")
+    private ObatModel updateStokObat(@PathVariable("idObat") String idObat, @RequestBody ObatModel obat){
+        try{
+            return obatRestService.updateObat(idObat, obat);
+        } catch (NoSuchElementException e) {
+            throw new ResponseStatusException(
+                    HttpStatus.NOT_FOUND, "Obat " + idObat + " not found"
+            );
+        }
+    }
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java
new file mode 100644
index 0000000..48c09cd
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java
@@ -0,0 +1,12 @@
+package spring.TK.SpringTkApap.obat.rest;
+
+import spring.TK.SpringTkApap.obat.model.ObatModel;
+
+import java.util.List;
+
+public interface ObatRestService {
+    ObatModel createObat(ObatModel obat);
+    List<ObatModel> retrieveObat();
+    ObatModel getObat(String idObat);
+    ObatModel updateObat(String idObat, ObatModel obat);
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java
new file mode 100644
index 0000000..06a3938
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java
@@ -0,0 +1,45 @@
+package spring.TK.SpringTkApap.obat.rest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import spring.TK.SpringTkApap.obat.model.ObatModel;
+import spring.TK.SpringTkApap.obat.repository.ObatDb;
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+
+@Service
+@Transactional
+public class ObatRestServiceImpl implements ObatRestService {
+
+    @Autowired
+    ObatDb obatDb;
+
+    @Override
+    public ObatModel createObat(ObatModel obat) {
+        return obatDb.save(obat);
+    }
+
+    @Override
+    public List<ObatModel> retrieveObat() {
+        return obatDb.findAll();
+    }
+
+    @Override
+    public ObatModel getObat(String idObat) {
+        Optional<ObatModel> obat = obatDb.findByIdObat(idObat);
+        if(obat.isPresent()){
+            return obat.get();
+        }
+        throw new NoSuchElementException();
+    }
+
+    @Override
+    public ObatModel updateObat(String idObat, ObatModel obatUpdate) {
+        ObatModel obat = getObat(idObat);
+        obat.setStok(obatUpdate.getStok());
+        return obatDb.save(obat);
+    }
+
+}
-- 
GitLab


From 1b40a85e2a379e718760c8767777c40eb1f8a5d3 Mon Sep 17 00:00:00 2001
From: Hasna Shafira <hasna.shafira@ui.ac.id>
Date: Fri, 25 Nov 2022 18:27:52 +0700
Subject: [PATCH 08/14] feat/resep

---
 .../auth/security/WebSecurityConfig.java      |   1 +
 .../jumlah/{ => model}/JumlahModel.java       |  13 +-
 .../jumlah/repository/JumlahDb.java           |   8 ++
 .../jumlah/service/JumlahService.java         |   9 ++
 .../jumlah/service/JumlahServiceImpl.java     |  27 ++++
 .../obat/controller/ObatController.java       |   2 +-
 .../TK/SpringTkApap/obat/model/ObatModel.java |   2 +-
 .../resep/controller/ResepController.java     | 119 ++++++++++++++++++
 .../resep/{ => model}/ResepModel.java         |   8 +-
 .../resep/repository/ResepDb.java             |  12 ++
 .../resep/service/ResepService.java           |  11 ++
 .../resep/service/ResepServiceImpl.java       |  30 +++++
 .../resources/templates/resep/add-resep.html  |  26 ++++
 .../templates/resep/form-add-resep.html       |  57 +++++++++
 .../templates/resep/viewall-resep.html        |  59 +++++++++
 15 files changed, 375 insertions(+), 9 deletions(-)
 rename SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/{ => model}/JumlahModel.java (68%)
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/repository/JumlahDb.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahService.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahServiceImpl.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
 rename SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/{ => model}/ResepModel.java (78%)
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepService.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepServiceImpl.java
 create mode 100644 SpringTkApap/src/main/resources/templates/resep/add-resep.html
 create mode 100644 SpringTkApap/src/main/resources/templates/resep/form-add-resep.html
 create mode 100644 SpringTkApap/src/main/resources/templates/resep/viewall-resep.html

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
index 46bfbe5..5426fd4 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
@@ -37,6 +37,7 @@ public class WebSecurityConfig {
                     .antMatchers("/logout-sso").permitAll()
                     .antMatchers("/obat/viewall").hasAnyAuthority("APOTEKER", "ADMIN")
                     .antMatchers("/obat/update/**").hasAuthority("APOTEKER")
+                    .antMatchers("/resep/viewall").hasAnyAuthority("APOTEKER", "ADMIN")
                     .anyRequest().authenticated()
                     .and( )
                     .formLogin()
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/model/JumlahModel.java
similarity index 68%
rename from SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java
rename to SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/model/JumlahModel.java
index c12bf8f..132c9a0 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/model/JumlahModel.java
@@ -1,4 +1,4 @@
-package spring.TK.SpringTkApap.jumlah;
+package spring.TK.SpringTkApap.jumlah.model;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -6,9 +6,11 @@ import lombok.NoArgsConstructor;
 import org.hibernate.annotations.OnDelete;
 import org.hibernate.annotations.OnDeleteAction;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
-import spring.TK.SpringTkApap.resep.ResepModel;
+import spring.TK.SpringTkApap.resep.model.ResepModel;
 
 import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
 import java.io.Serializable;
 
 @Data @Entity
@@ -19,8 +21,11 @@ public class JumlahModel implements Serializable {
     @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long idJumlah;
 
-    @ManyToOne(fetch = FetchType.EAGER)
-    @JoinColumn(name = "id", referencedColumnName = "id")
+    @NotNull @Column(nullable = false)
+    private Integer kuantitas;
+
+    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+    @JoinColumn(name = "id_resep", referencedColumnName = "id")
     @OnDelete(action = OnDeleteAction.CASCADE)
     private ResepModel resep;
 
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/repository/JumlahDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/repository/JumlahDb.java
new file mode 100644
index 0000000..a928e13
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/repository/JumlahDb.java
@@ -0,0 +1,8 @@
+package spring.TK.SpringTkApap.jumlah.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import spring.TK.SpringTkApap.jumlah.model.JumlahModel;
+
+public interface JumlahDb extends JpaRepository<JumlahModel, String>{
+    
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahService.java
new file mode 100644
index 0000000..b1676dd
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahService.java
@@ -0,0 +1,9 @@
+package spring.TK.SpringTkApap.jumlah.service;
+
+import java.util.List;
+import spring.TK.SpringTkApap.jumlah.model.JumlahModel;
+
+public interface JumlahService {
+    void addJumlah(JumlahModel jumlah);
+    List<JumlahModel> getListJumlah();
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahServiceImpl.java
new file mode 100644
index 0000000..4372a20
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahServiceImpl.java
@@ -0,0 +1,27 @@
+package spring.TK.SpringTkApap.jumlah.service;
+
+import java.util.List;
+
+import javax.transaction.Transactional;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import spring.TK.SpringTkApap.jumlah.model.JumlahModel;
+import spring.TK.SpringTkApap.jumlah.repository.JumlahDb;
+
+@Service
+@Transactional
+public class JumlahServiceImpl implements JumlahService {
+    @Autowired
+    private JumlahDb jumlahDb;
+
+    @Override
+    public void addJumlah(JumlahModel jumlah) {
+        jumlahDb.save(jumlah);
+    }
+
+    @Override
+    public List<JumlahModel> getListJumlah() {
+        return jumlahDb.findAll();
+    }
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
index c25a329..3c5bfaf 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
@@ -4,7 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
-import spring.TK.SpringTkApap.jumlah.JumlahModel;
+import spring.TK.SpringTkApap.jumlah.model.JumlahModel;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 import spring.TK.SpringTkApap.obat.service.ObatService;
 
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
index 325d61d..05d8e88 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java
@@ -3,7 +3,7 @@ package spring.TK.SpringTkApap.obat.model;
 import com.sun.istack.NotNull;
 import lombok.*;
 import org.hibernate.annotations.GenericGenerator;
-import spring.TK.SpringTkApap.jumlah.JumlahModel;
+import spring.TK.SpringTkApap.jumlah.model.JumlahModel;
 
 import javax.persistence.*;
 import java.io.Serializable;
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
new file mode 100644
index 0000000..c11d6f6
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
@@ -0,0 +1,119 @@
+package spring.TK.SpringTkApap.resep.controller;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+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.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import spring.TK.SpringTkApap.jumlah.model.JumlahModel;
+import spring.TK.SpringTkApap.jumlah.service.JumlahService;
+import spring.TK.SpringTkApap.obat.model.ObatModel;
+import spring.TK.SpringTkApap.obat.service.ObatService;
+import spring.TK.SpringTkApap.resep.model.ResepModel;
+import spring.TK.SpringTkApap.resep.service.ResepService;
+
+@Controller
+@RequestMapping("/resep")
+public class ResepController {
+    @Autowired(required = true)
+    private ResepService resepService;
+
+    // @Qualifier("ObatServiceImpl")
+    @Autowired
+    private ObatService obatService;
+
+    // @Qualifier("JumlahServiceImpl")
+    @Autowired
+    private JumlahService jumlahService;
+
+    @GetMapping("/add")
+    public String addResepForm(Model model){
+        ResepModel resep = new ResepModel();
+        List<ObatModel> listObat = obatService.getListObat();
+
+        // resep.setIsDone(false);
+
+        resep.setListJumlah(new ArrayList<>());
+        resep.getListJumlah().add(new JumlahModel());
+
+        model.addAttribute("resep", resep);
+        model.addAttribute("listObat", listObat);
+        return "resep/form-add-resep";
+    }
+
+    @PostMapping("/add")
+    public String addResepSubmit(@ModelAttribute ResepModel resep, Model model){
+        resep.setIsDone(false);
+
+        resep.setCreatedAt(LocalDateTime.now());
+
+        if (resep.getListJumlah() != null){
+            for (JumlahModel jumlah : resep.getListJumlah()){
+                jumlah.setResep(resep);
+                jumlahService.addJumlah(jumlah);
+            }
+        }
+        resepService.addResep(resep);
+        model.addAttribute("resep", resep);
+        return "resep/add-resep";
+    }
+
+    @GetMapping("/viewall")
+    public String listResep(Model model) {
+        List<ResepModel> listResep = resepService.getListResep();
+        model.addAttribute("listResep", listResep);
+        return "resep/viewall-resep";
+    }
+
+    @PostMapping(value = "/add", params = {"addRowResep"})
+    private String addRowObatMultiple(
+            @ModelAttribute ResepModel resep,
+            Model model
+    ) {
+        List<ObatModel> listObat = obatService.getListObat();
+
+        if (resep.getListJumlah() == null || resep.getListJumlah().size() == 0) {
+            resep.setListJumlah(new ArrayList<>());
+        }
+        JumlahModel newJumlah = new JumlahModel();
+        newJumlah.setResep(resep);
+        resep.getListJumlah().add(newJumlah);
+        List<JumlahModel> listJumlah = jumlahService.getListJumlah();
+
+        model.addAttribute("resep", resep);
+        model.addAttribute("listJumlah", listJumlah);
+        model.addAttribute("listObat", listObat);
+
+        return "resep/form-add-resep";
+    }
+
+    @PostMapping(value = "/add", params = {"deleteRowResep"})
+    private String deleteRowObatMultiple(
+            @ModelAttribute ResepModel resep,
+            @RequestParam("deleteRowResep") Integer row,
+            Model model
+    ) {
+        List<ObatModel> listObat = obatService.getListObat();
+
+        final Integer rowId = Integer.valueOf(row);
+        resep.getListJumlah().remove(rowId.intValue());
+
+        List<JumlahModel> listJumlah = jumlahService.getListJumlah();
+
+        model.addAttribute("resep", resep);
+        model.addAttribute("listJumlah", listJumlah);
+        model.addAttribute("listObat", listObat);
+
+        return "resep/form-add-resep";
+    }
+
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/ResepModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/model/ResepModel.java
similarity index 78%
rename from SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/ResepModel.java
rename to SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/model/ResepModel.java
index cedde8b..3849d63 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/ResepModel.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/model/ResepModel.java
@@ -1,13 +1,14 @@
-package spring.TK.SpringTkApap.resep;
+package spring.TK.SpringTkApap.resep.model;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.sun.istack.NotNull;
 import lombok.*;
 import org.hibernate.annotations.OnDelete;
 import org.hibernate.annotations.OnDeleteAction;
 import org.springframework.format.annotation.DateTimeFormat;
 import spring.TK.SpringTkApap.appointment.model.AppointmentModel;
-import spring.TK.SpringTkApap.jumlah.JumlahModel;
+import spring.TK.SpringTkApap.jumlah.model.JumlahModel;
 import spring.TK.SpringTkApap.user.model.ApotekerModel;
 
 import javax.persistence.*;
@@ -20,6 +21,7 @@ import java.util.List;
 @Entity
 @Table(name = "resep")
 @NoArgsConstructor
+@JsonIgnoreProperties(value={"listResep"}, allowSetters = true)
 @AllArgsConstructor
 public class ResepModel implements Serializable {
     @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -37,7 +39,7 @@ public class ResepModel implements Serializable {
     @OnDelete(action = OnDeleteAction.CASCADE)
     private ApotekerModel apoteker;
 
-    @OneToMany(mappedBy = "resep", fetch = FetchType.EAGER)
+    @OneToMany(mappedBy = "resep", fetch = FetchType.EAGER, orphanRemoval = true, cascade = {CascadeType.ALL})
     private List<JumlahModel> listJumlah;
 
     @OneToOne(mappedBy = "resep", fetch = FetchType.EAGER)
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java
new file mode 100644
index 0000000..6e83313
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java
@@ -0,0 +1,12 @@
+package spring.TK.SpringTkApap.resep.repository;
+
+import java.util.Optional;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import spring.TK.SpringTkApap.resep.model.ResepModel;
+
+@Repository
+public interface ResepDb extends JpaRepository<ResepModel, String>{
+    ResepModel getById(Long id);
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepService.java
new file mode 100644
index 0000000..58bfb08
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepService.java
@@ -0,0 +1,11 @@
+package spring.TK.SpringTkApap.resep.service;
+
+import java.util.List;
+
+import spring.TK.SpringTkApap.resep.model.ResepModel;
+
+public interface ResepService {
+    void addResep(ResepModel resep);
+    List<ResepModel> getListResep();
+    ResepModel getResep(Long id);
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepServiceImpl.java
new file mode 100644
index 0000000..62694e7
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepServiceImpl.java
@@ -0,0 +1,30 @@
+package spring.TK.SpringTkApap.resep.service;
+
+import java.util.List;
+import javax.transaction.Transactional;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import spring.TK.SpringTkApap.resep.model.ResepModel;
+import spring.TK.SpringTkApap.resep.repository.ResepDb;
+
+@Service
+@Transactional
+public class ResepServiceImpl implements ResepService{
+    @Autowired
+    private ResepDb resepDb;
+
+    @Override
+    public void addResep(ResepModel resep) {
+        resepDb.save(resep);
+    }
+
+    @Override
+    public List<ResepModel> getListResep() {
+        return resepDb.findAll();
+    }
+
+    @Override
+    public ResepModel getResep(Long id) {
+        return resepDb.getById(id);
+    }
+}
diff --git a/SpringTkApap/src/main/resources/templates/resep/add-resep.html b/SpringTkApap/src/main/resources/templates/resep/add-resep.html
new file mode 100644
index 0000000..359f0c3
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/resep/add-resep.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <title>RumahSehat</title>
+    <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+    <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+
+<nav th:replace="fragments/fragment :: navbar('Resep')"></nav>
+
+<div class="container">
+    <div class="card m-4 p-4">
+        <div class="card-body">
+            <div class="justify-content-center">
+                <h2 th:text="'Resep dengan id ' + ${resep.id} + ' 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/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html b/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html
new file mode 100644
index 0000000..16cb8cc
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <title>Tambah Resep</title>
+    <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+    <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+<object th:replace="fragments/fragment :: navbar('Resep')"></object>
+<div class = "container">
+    <div class="card m-4 p-4">
+        <div class="card-body">
+            <div class="justify-content-center"> <h2>Tambah Resep Baru</h2>
+                <br>
+                <form th:action="@{/resep/add}" th:object="${resep}" method="POST">
+                    <table class="table">
+                        <thead>
+                        <th>Resep</th>
+                        <th></th>
+                        <th>
+                            <button class="btn btn-primary" type="submit" name="addRowResep">Tambah Row</button>
+                        </th>
+                        </thead>
+                        <tbody>
+                        <tr th:each="jumlah, iterationStatus : *{listJumlah}">
+                            <td>
+                                <select name="obat" th:field="*{listJumlah[__${iterationStatus.index}__].obat}"
+                                        class="form-control">
+                                    <div th:each="obatNew, iterationStatus2 : ${listObat}">
+                                        <option th:value="${obatNew.idObat}" th:text="${obatNew.namaObat}"></option>
+                                    </div>
+                                </select>
+                            </td>
+                            <td>
+                                <input class="form-control" type="number" th:field="*{listJumlah[__${iterationStatus.index}__].kuantitas}">
+                            </td>
+                            <td>
+                                <button th:value="${iterationStatus.index}" class="btn btn-danger" type="submit"
+                                        name="deleteRowResep">Hapus</button>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                    <!-- Created At : <br>
+                    <input required class="form-control" type="datetime-local" th:field="*{createdAt}" />
+                    <br><br> -->
+
+                    <br/>
+                    <button type="submit" class="btn btn-primary">Submit</button>
+                    <a class="btn btn-link" href="/static">Home</a>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html
new file mode 100644
index 0000000..84c7166
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
+<head>
+  <meta charset="UTF-8">
+  <title>RumahSehat - Daftar Resep</title>
+  <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+  <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+<object th:replace="fragments/fragment :: navbar('Resep')"></object>
+
+<div class="container">
+  <div class="card m-4 p-4">
+    <div class="card-body">
+      <div class="justify-content-center">
+        <div class="d-flex justify-content-between">
+          <h2>Daftar Resep</h2>
+          <div>
+            <a class="btn btn-primary" th:href="@{/resep/add/}">Add Resep</a>
+          </div>
+        </div>
+        <br>
+        <div th:if="*{listResep.size() != 0}">
+          <br>
+          <table class="table">
+            <thead>
+            <tr>
+              <th>Id</th>
+              <th>Tanggal & Waktu Resep Dibuat</th>
+              <th>Status</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr th:each="resep, iterationStatus : ${listResep}"
+                th:style="${iterationStatus.even} ? 'font-weight:bold;'">
+              <td th:text="${iterationStatus.count}"></td>
+              <td th:text="${resep.id}"></td>
+              <td th:text="${resep.createdAt}"></td>
+              <td th:text="${resep.isDone}"></td>
+              <td>
+                <a class="btn btn-primary" th:href="@{/resep/view(id=${resep.id})}">Detail Resep</a>
+              </td>
+            </tr>
+            </tbody>
+          </table>
+        </div>
+        <div th:unless="*{listResep.size() != 0}">
+          <br>
+          <h4 th:text="'Belum ada resep yang terdaftar'"></h4>
+        </div>
+        <br>
+        <a class="btn btn-primary" href="/">Home</a>
+      </div>
+    </div>
+  </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
-- 
GitLab


From 56ed74bad08d6f4976de538fb8055cd3f9426d2d Mon Sep 17 00:00:00 2001
From: Hasna Shafira <hasna.shafira@ui.ac.id>
Date: Fri, 25 Nov 2022 19:15:07 +0700
Subject: [PATCH 09/14] feat/resep

---
 .../TK/SpringTkApap/appointment/model/AppointmentModel.java     | 2 +-
 .../java/spring/TK/SpringTkApap/user/model/ApotekerModel.java   | 2 +-
 SpringTkApap/src/main/resources/templates/home/home.html        | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/appointment/model/AppointmentModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/appointment/model/AppointmentModel.java
index 55004a0..245f4c3 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/appointment/model/AppointmentModel.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/appointment/model/AppointmentModel.java
@@ -6,7 +6,7 @@ import lombok.*;
 import org.hibernate.annotations.OnDelete;
 import org.hibernate.annotations.OnDeleteAction;
 import org.springframework.format.annotation.DateTimeFormat;
-import spring.TK.SpringTkApap.resep.ResepModel;
+import spring.TK.SpringTkApap.resep.model.ResepModel;
 import spring.TK.SpringTkApap.tagihan.TagihanModel;
 import spring.TK.SpringTkApap.user.model.DokterModel;
 import spring.TK.SpringTkApap.user.model.PasienModel;
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/ApotekerModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/ApotekerModel.java
index f662daa..769ab8c 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/ApotekerModel.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/ApotekerModel.java
@@ -2,7 +2,7 @@ package spring.TK.SpringTkApap.user.model;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.*;
-import spring.TK.SpringTkApap.resep.ResepModel;
+import spring.TK.SpringTkApap.resep.model.ResepModel;
 import spring.TK.SpringTkApap.auth.model.UserModel;
 
 import javax.persistence.*;
diff --git a/SpringTkApap/src/main/resources/templates/home/home.html b/SpringTkApap/src/main/resources/templates/home/home.html
index 6d4e2f9..487ed68 100644
--- a/SpringTkApap/src/main/resources/templates/home/home.html
+++ b/SpringTkApap/src/main/resources/templates/home/home.html
@@ -55,7 +55,7 @@
                     <div class="text-center mt-1">
                         <img src="../img/resep.png" width="60" height="60">
                         <p class="card-text my-3">Buat resep, serta lihat daftar dan detail resep yang tersedia.</p>
-                        <a th:href="@{/}" class="btn btn-sm btn-primary">Resep</a>
+                        <a th:href="@{/resep/viewall}" class="btn btn-sm btn-primary">Resep</a>
                     </div>
                 </div>
             </div>
-- 
GitLab


From c12a96f86f53e4ca2c418ab4ff34bbfb616c9bbc Mon Sep 17 00:00:00 2001
From: Hasna Shafira <hasna.shafira@ui.ac.id>
Date: Fri, 25 Nov 2022 19:18:10 +0700
Subject: [PATCH 10/14] feat/resep

---
 .../spring/TK/SpringTkApap/resep/controller/ResepController.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
index c11d6f6..348e6cc 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
@@ -117,3 +117,4 @@ public class ResepController {
     }
 
 }
+
-- 
GitLab


From 6cec72cc675a50a29af77c34aefbce3e2c100520 Mon Sep 17 00:00:00 2001
From: Hasna Shafira <hasna.shafira@ui.ac.id>
Date: Thu, 8 Dec 2022 16:56:18 +0700
Subject: [PATCH 11/14] feat/resep view detail

---
 .../resep/controller/ResepController.java     | 15 +++-
 .../resep/repository/ResepDb.java             |  3 +-
 .../resep/rest/ResepRestController.java       | 53 +++++++++++++++
 .../resep/rest/ResepRestService.java          | 12 ++++
 .../resep/rest/ResepRestServiceImpl.java      | 34 ++++++++++
 .../resources/templates/resep/view-resep.html | 68 +++++++++++++++++++
 .../templates/resep/viewall-resep.html        |  2 +-
 7 files changed, 183 insertions(+), 4 deletions(-)
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java
 create mode 100644 SpringTkApap/src/main/resources/templates/resep/view-resep.html

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
index 348e6cc..5ef27c7 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
@@ -5,7 +5,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 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;
@@ -70,10 +69,24 @@ public class ResepController {
     @GetMapping("/viewall")
     public String listResep(Model model) {
         List<ResepModel> listResep = resepService.getListResep();
+
         model.addAttribute("listResep", listResep);
         return "resep/viewall-resep";
     }
 
+    @GetMapping("/view-detail")
+    public String viewDetailResepById(@RequestParam(value = "id") Long id, Model model) {
+        ResepModel resep = resepService.getResep(id);
+        List<JumlahModel> listJumlah = resep.getListJumlah();
+        model.addAttribute("listJumlah", listJumlah);
+        model.addAttribute("resep", resep);
+        model.addAttribute("dokter", resep.getAppointment().getDokter());
+        model.addAttribute("pasien", resep.getAppointment().getPasien());
+        model.addAttribute("apoteker", resep.getApoteker());
+
+        return "resep/view-resep";
+    }
+
     @PostMapping(value = "/add", params = {"addRowResep"})
     private String addRowObatMultiple(
             @ModelAttribute ResepModel resep,
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java
index 6e83313..5325e03 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java
@@ -1,12 +1,11 @@
 package spring.TK.SpringTkApap.resep.repository;
 
-import java.util.Optional;
 
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 import spring.TK.SpringTkApap.resep.model.ResepModel;
 
 @Repository
-public interface ResepDb extends JpaRepository<ResepModel, String>{
+public interface ResepDb extends JpaRepository<ResepModel, Long>{
     ResepModel getById(Long id);
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
new file mode 100644
index 0000000..ad691e3
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
@@ -0,0 +1,53 @@
+package spring.TK.SpringTkApap.resep.rest;
+
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.BindingResult;
+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 spring.TK.SpringTkApap.resep.model.ResepModel;
+import spring.TK.SpringTkApap.resep.service.ResepService;
+
+@RestController
+@RequestMapping("/api/resep")
+public class ResepRestController {
+    @Autowired
+    ResepRestService resepRestService;
+
+    @PostMapping("/create")
+    private ResepModel createObat(@RequestBody ResepModel resep, BindingResult bindingResult){
+        if (bindingResult.hasFieldErrors()) {
+            throw new ResponseStatusException(
+                    HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field."
+            );
+        } else {
+            return resepRestService.createResep(resep);
+        }
+    }
+
+    @GetMapping("/{idResep}")
+    private ResepModel getResep(@PathVariable(name = "id") Long id){
+        try {
+            return resepRestService.getResep(id);
+        } catch (NoSuchElementException e) {
+            throw new ResponseStatusException(
+                    HttpStatus.NOT_FOUND, "Resep dengan id " + id + " tidak ditemukan."
+            );
+        }
+    }
+
+    @GetMapping("/all")
+    private List<ResepModel> getAllResep(){
+        return resepRestService.getListResep();
+    }
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
new file mode 100644
index 0000000..1746b37
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
@@ -0,0 +1,12 @@
+package spring.TK.SpringTkApap.resep.rest;
+
+import java.util.List;
+
+import spring.TK.SpringTkApap.resep.model.ResepModel;
+
+public interface ResepRestService {
+    ResepModel createResep(ResepModel resep);
+    List<ResepModel> getListResep();
+    ResepModel getResep(Long id);
+}
+
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java
new file mode 100644
index 0000000..dd963e4
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java
@@ -0,0 +1,34 @@
+package spring.TK.SpringTkApap.resep.rest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import javax.transaction.Transactional;
+
+import spring.TK.SpringTkApap.resep.model.ResepModel;
+import spring.TK.SpringTkApap.resep.repository.ResepDb;
+
+@Service
+@Transactional
+public class ResepRestServiceImpl implements ResepRestService{
+    @Autowired
+    ResepDb resepDb;
+
+    @Override
+    public ResepModel createResep(ResepModel resep) {
+        return resepDb.save(resep);
+    }
+
+    @Override
+    public List<ResepModel> getListResep() {
+        return resepDb.findAll();
+    }
+
+    @Override
+    public ResepModel getResep(Long id) {
+        return resepDb.getById(id);
+    }
+
+}
diff --git a/SpringTkApap/src/main/resources/templates/resep/view-resep.html b/SpringTkApap/src/main/resources/templates/resep/view-resep.html
new file mode 100644
index 0000000..4b3b8f5
--- /dev/null
+++ b/SpringTkApap/src/main/resources/templates/resep/view-resep.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
+<head>
+  <meta charset="UTF-8">
+  <title>RumahSehat - Detail Resep</title>
+  <object th:include="fragments/fragment :: css" th:remove="tag"></object>
+  <object th:include="fragments/fragment :: js" th:remove="tag"></object>
+</head>
+<body>
+<object th:replace="fragments/fragment :: navbar('Resep')"></object>
+
+<div class="container">
+  <div class="card m-4 p-4">
+    <div class="card-body">
+      <div class="justify-content-center">
+        <div class="d-flex justify-content-between">
+          <h2>Detail Resep</h2>
+        </div>
+        <br>
+
+        <p class="font-weight-bold" style="line-height: 1.5vh">ID :</p>
+        <p th:text="${resep.id}"></p>
+        <br>
+        <div class="row">
+          <div class="col-md-7">
+            <p class="font-weight-bold" style="line-height: 1.5vh">Nama Dokter :</p>
+            <p th:text="${dokter.nama}"></p>
+          </div>
+          <div class="col-md-5">
+            <p class="font-weight-bold" style="line-height: 1.5vh">Nama Pasien :</p>
+            <p th:text="${pasien.nama}"></p>
+          </div>
+        </div>
+        <br>
+        <p class="font-weight-bold" style="line-height: 1.5vh">Status :</p>
+        <p th:text="${resep.isDone}"></p>
+        <br>
+        <p class="font-weight-bold" style="line-height: 1.5vh">Apoteker :</p>
+        <p th:text="${apoteker.nama}"></p>
+        <br>
+      </div>
+
+        <div>
+          <br>
+          <table class="table">
+            <thead>
+            <tr>
+              <th>Nama Obat</th>
+              <th>Jumlah</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr th:each="jumlah, iterationStatus : ${listJumlah}">
+              <td th:text="${jumlah.obat.namaObat}"></td>
+              <td th:text="${jumlah.kuantitas}"></td>
+            </tr>
+            </tbody>
+          </table>
+        </div>
+        <br>
+        <a class="btn btn-primary" href="/">Home</a>
+      </div>
+    </div>
+  </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html
index 84c7166..1e5c94a 100644
--- a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html
+++ b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html
@@ -38,7 +38,7 @@
               <td th:text="${resep.createdAt}"></td>
               <td th:text="${resep.isDone}"></td>
               <td>
-                <a class="btn btn-primary" th:href="@{/resep/view(id=${resep.id})}">Detail Resep</a>
+                <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${resep.id})}">Detail Resep</a>
               </td>
             </tr>
             </tbody>
-- 
GitLab


From 28ace68f1fb6b2668f924012376676ea4a274a20 Mon Sep 17 00:00:00 2001
From: Hasna Shafira <hasna.shafira@ui.ac.id>
Date: Thu, 8 Dec 2022 17:06:21 +0700
Subject: [PATCH 12/14] feat/resep view detail

---
 .../spring/TK/SpringTkApap/resep/rest/ResepRestService.java    | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
index 1746b37..759fe2e 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
@@ -8,5 +8,4 @@ public interface ResepRestService {
     ResepModel createResep(ResepModel resep);
     List<ResepModel> getListResep();
     ResepModel getResep(Long id);
-}
-
+}
\ No newline at end of file
-- 
GitLab


From 1d99df0e3f1b8f539ea958de358d0dde27371200 Mon Sep 17 00:00:00 2001
From: Hasna Shafira <hasna.shafira@ui.ac.id>
Date: Mon, 12 Dec 2022 16:49:23 +0700
Subject: [PATCH 13/14] feat/resep changes on rest

---
 .../auth/controller/PageController.java       |  2 ++
 .../auth/security/WebSecurityConfig.java      |  3 +++
 .../resep/controller/ResepController.java     |  3 +++
 .../resep/rest/ResepRestController.java       | 21 +++++++++----------
 .../resep/rest/ResepRestService.java          |  2 +-
 .../resep/rest/ResepRestServiceImpl.java      |  9 ++++++--
 .../appointment/view-appointment.html         |  6 +++---
 .../templates/resep/form-add-resep.html       |  1 +
 8 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/controller/PageController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/controller/PageController.java
index 861d45d..c570b7c 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/controller/PageController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/controller/PageController.java
@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.reactive.function.client.WebClient;
 import org.springframework.web.servlet.ModelAndView;
 import spring.TK.SpringTkApap.auth.model.UserModel;
+import spring.TK.SpringTkApap.auth.security.JwtTokenUtil;
 import spring.TK.SpringTkApap.auth.security.xml.Attributes;
 import spring.TK.SpringTkApap.auth.security.xml.ServiceResponse;
 import spring.TK.SpringTkApap.auth.service.AuthService;
@@ -30,6 +31,7 @@ public class PageController {
 
     @Autowired
     AuthService userService;
+    JwtTokenUtil jwtTokenUtil;
 
     private static final String REDIRECT  = "redirect:";
 
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
index 12591f5..2859091 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java
@@ -54,6 +54,9 @@ public class WebSecurityConfig {
                     .antMatchers("/appointment/viewall").hasAnyAuthority(ADMIN, DOKTER, PASIEN)
                     .antMatchers("/appointment/detail").hasAnyAuthority(ADMIN, DOKTER, PASIEN)
                     .antMatchers("/user/viewall/**").hasAuthority(ADMIN)
+                    .antMatchers("/api/resep/add/**").hasAnyAuthority(DOKTER)
+                    .antMatchers("/api/resep/all").permitAll()
+                    .antMatchers("/api/resep/detail/**").hasAnyAuthority(ADMIN, APOTEKER, DOKTER, PASIEN)
                     .anyRequest().authenticated()
                     .and( )
                     .formLogin()
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
index 1b7f32c..6514c02 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
@@ -80,6 +80,9 @@ public class ResepController {
             }
         }
         resepService.addResep(resep);
+        appointment.setListResep(resep);
+        appointmentService.updateAppointment(appointment);
+        System.out.println(appointment.getListResep().getId());
         model.addAttribute("resep", resep);
         return "resep/add-resep";
     }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
index ad691e3..0de32c6 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
@@ -5,18 +5,16 @@ import java.util.NoSuchElementException;
 
 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.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 spring.TK.SpringTkApap.resep.model.ResepModel;
-import spring.TK.SpringTkApap.resep.service.ResepService;
 
 @RestController
 @RequestMapping("/api/resep")
@@ -24,21 +22,22 @@ public class ResepRestController {
     @Autowired
     ResepRestService resepRestService;
 
-    @PostMapping("/create")
-    private ResepModel createObat(@RequestBody ResepModel resep, BindingResult bindingResult){
+    @PostMapping("/add/{kodeAppointment}")
+    private ResponseEntity createResep(@RequestBody ResepModel resep, BindingResult bindingResult, @PathVariable String kodeAppointment){
         if (bindingResult.hasFieldErrors()) {
             throw new ResponseStatusException(
                     HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field."
             );
         } else {
-            return resepRestService.createResep(resep);
+            resepRestService.createResep(resep, kodeAppointment);
+            return ResponseEntity.ok("Resep berhasil dibuat");
         }
     }
 
-    @GetMapping("/{idResep}")
-    private ResepModel getResep(@PathVariable(name = "id") Long id){
+    @GetMapping("/detail/{idResep}")
+    private ResponseEntity<ResepModel> getResep(@PathVariable(name = "id") Long id){
         try {
-            return resepRestService.getResep(id);
+            return ResponseEntity.status(HttpStatus.OK).body(resepRestService.getResep(id));
         } catch (NoSuchElementException e) {
             throw new ResponseStatusException(
                     HttpStatus.NOT_FOUND, "Resep dengan id " + id + " tidak ditemukan."
@@ -47,7 +46,7 @@ public class ResepRestController {
     }
 
     @GetMapping("/all")
-    private List<ResepModel> getAllResep(){
-        return resepRestService.getListResep();
+    private ResponseEntity<List<ResepModel>> getAllResep(){
+        return ResponseEntity.status(HttpStatus.OK).body(resepRestService.getListResep());
     }
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
index 759fe2e..b2b725e 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java
@@ -5,7 +5,7 @@ import java.util.List;
 import spring.TK.SpringTkApap.resep.model.ResepModel;
 
 public interface ResepRestService {
-    ResepModel createResep(ResepModel resep);
+    void createResep(ResepModel resep, String kodeAppointment);
     List<ResepModel> getListResep();
     ResepModel getResep(Long id);
 }
\ No newline at end of file
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java
index dd963e4..fec99d5 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java
@@ -7,6 +7,8 @@ import java.util.List;
 
 import javax.transaction.Transactional;
 
+import spring.TK.SpringTkApap.appointment.AppointmentService;
+import spring.TK.SpringTkApap.appointment.model.AppointmentModel;
 import spring.TK.SpringTkApap.resep.model.ResepModel;
 import spring.TK.SpringTkApap.resep.repository.ResepDb;
 
@@ -15,10 +17,13 @@ import spring.TK.SpringTkApap.resep.repository.ResepDb;
 public class ResepRestServiceImpl implements ResepRestService{
     @Autowired
     ResepDb resepDb;
+    AppointmentService appointmentService;
 
     @Override
-    public ResepModel createResep(ResepModel resep) {
-        return resepDb.save(resep);
+    public void createResep(ResepModel resep, String kodeAppointment) {
+        AppointmentModel appointment = appointmentService.getAppointment(kodeAppointment);
+        resep.setAppointment(appointment);
+        resepDb.save(resep);
     }
 
     @Override
diff --git a/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html b/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html
index 262466c..0955c67 100644
--- a/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html
+++ b/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html
@@ -33,13 +33,13 @@
                 <br>
 
                 <div>
-                    <div th:if="${apt.resep != null}">
-                        <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${id})}">Detail Resep</a>
+                    <div th:if="${apt.listResep != null}">
+                        <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${apt.listResep.id})}">Detail Resep</a>
                     </div>
                 </div>
                 <br>
                 <div th:unless="${apt.isDone}">
-                    <div th:if="${apt.resep == null}">
+                    <div th:if="${apt.listResep == null}">
                         <a class="btn btn-primary" th:href="@{/resep/add/} + ${apt.kode}">Create Resep</a>
                         <br>
                     </div>
diff --git a/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html b/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html
index 26f754e..024d717 100644
--- a/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html
+++ b/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html
@@ -14,6 +14,7 @@
                 <br>
                 <form th:action="@{/resep/add/} + ${kode}" th:object="${resep}" method="POST">
                     <span>
+                        <h5>Apoteker</h5>
                         <select class="custom-select" th:field="*{apoteker.uuid}" id="apoteker" required="required">
                           <option th:each="apoteker : ${listApoteker}" th:value="${apoteker.uuid}" th:text="${apoteker.nama}"></option>
                         </select>
-- 
GitLab


From 8c1454197b681dd3615be1b611d8826d44ae1566 Mon Sep 17 00:00:00 2001
From: Hasna Shafira <hasna.shafira@ui.ac.id>
Date: Mon, 12 Dec 2022 20:08:40 +0700
Subject: [PATCH 14/14] feat/ resep path in navbar and user authority

---
 .../SpringTkApap/resep/controller/ResepController.java   | 4 ++--
 .../TK/SpringTkApap/resep/rest/ResepRestController.java  | 2 +-
 .../tk/springtkapap/auth/security/WebSecurityConfig.java | 9 ++++++---
 .../templates/appointment/view-appointment.html          | 2 +-
 .../src/main/resources/templates/fragments/fragment.html | 2 +-
 .../main/resources/templates/resep/viewall-resep.html    | 2 +-
 6 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
index 90ab7b7..87c787b 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java
@@ -95,8 +95,8 @@ public class ResepController {
         return "resep/viewall-resep";
     }
 
-    @GetMapping("/view-detail")
-    public String viewDetailResepById(@RequestParam(value = "id") Long id, Model model) {
+    @GetMapping("/view-detail/{id}")
+    public String viewDetailResepById(@PathVariable("id") Long id, Model model) {
         ResepModel resep = resepService.getResep(id);
         List<JumlahModel> listJumlah = resep.getListJumlah();
         model.addAttribute("listJumlah", listJumlah);
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
index 77917b1..c7490f3 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java
@@ -35,7 +35,7 @@ public class ResepRestController {
     }
 
     @GetMapping("/detail/{idResep}")
-    private ResponseEntity<ResepModel> getResep(@PathVariable(name = "id") Long id){
+    private ResponseEntity<ResepModel> getResep(@PathVariable(name = "idResep") Long id){
         try {
             return ResponseEntity.status(HttpStatus.OK).body(resepRestService.getResep(id));
         } catch (NoSuchElementException e) {
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/auth/security/WebSecurityConfig.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/auth/security/WebSecurityConfig.java
index 93d55bd..63cacad 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/auth/security/WebSecurityConfig.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/auth/security/WebSecurityConfig.java
@@ -59,9 +59,12 @@ public class WebSecurityConfig {
                     .antMatchers("/appointment/detail").hasAnyAuthority(ADMIN, DOKTER, PASIEN)
                     .antMatchers("/user/viewall/**").hasAuthority(ADMIN)
                     .antMatchers("/dokter/**").hasAuthority(ADMIN)
-                    .antMatchers("/api/resep/add/**").permitAll()
-                    .antMatchers("/api/resep/all").permitAll()
-                    .antMatchers("/api/resep/detail/**").permitAll()
+                    .antMatchers("/api/resep/add/**").hasAuthority(DOKTER)
+                    .antMatchers("/api/resep/all").hasAnyAuthority(APOTEKER, ADMIN)
+                    .antMatchers("/api/resep/detail/**").hasAnyAuthority(APOTEKER, ADMIN, DOKTER, PASIEN)
+                    .antMatchers("/resep/add/**").hasAuthority(DOKTER)
+                    .antMatchers("/resep/viewall").hasAnyAuthority(APOTEKER, ADMIN)
+                    .antMatchers("/resep/view-detail/**").hasAnyAuthority(APOTEKER, ADMIN, DOKTER, PASIEN)
                     .anyRequest().authenticated()
                     .and( )
                     .formLogin()
diff --git a/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html b/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html
index 0955c67..2f6b971 100644
--- a/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html
+++ b/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html
@@ -34,7 +34,7 @@
 
                 <div>
                     <div th:if="${apt.listResep != null}">
-                        <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${apt.listResep.id})}">Detail Resep</a>
+                        <a class="btn btn-primary" th:href="@{/resep/view-detail/} + ${apt.listResep.id}">Detail Resep</a>
                     </div>
                 </div>
                 <br>
diff --git a/SpringTkApap/src/main/resources/templates/fragments/fragment.html b/SpringTkApap/src/main/resources/templates/fragments/fragment.html
index dfe343b..e7c5322 100644
--- a/SpringTkApap/src/main/resources/templates/fragments/fragment.html
+++ b/SpringTkApap/src/main/resources/templates/fragments/fragment.html
@@ -30,7 +30,7 @@
         <a class="nav-link" th:href="@{/}">Beranda</a>
       </li>
       <li sec:authorize="hasAnyAuthority('ADMIN', 'APOTEKER')" th:classappend="${page == 'Resep'} ? active : ''"class="nav-item">
-        <a class="nav-link" th:href="@{/}">Resep</a>
+        <a class="nav-link" th:href="@{/resep/viewall}">Resep</a>
       </li>
       <li sec:authorize="hasAnyAuthority('ADMIN', 'APOTEKER')" th:classappend="${page == 'Obat'} ? active : ''"class="nav-item">
         <a class="nav-link" th:href="@{/obat/viewall}">Obat</a>
diff --git a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html
index 5119cfa..3b0dff3 100644
--- a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html
+++ b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html
@@ -35,7 +35,7 @@
               <td th:text="${resep.createdAt}"></td>
               <td th:text="${resep.isDone}"></td>
               <td>
-                <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${resep.id})}">Detail Resep</a>
+                <a class="btn btn-primary" th:href="@{/resep/view-detail/} + ${resep.id}">Detail Resep</a>
               </td>
             </tr>
             </tbody>
-- 
GitLab