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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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 12d7443f0fd86a7a19b67d8ec383f08e3e0e0c26 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Wed, 7 Dec 2022 15:31:38 +0700
Subject: [PATCH 08/19] test

---
 tk_apap_flutter/pubspec.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/tk_apap_flutter/pubspec.lock b/tk_apap_flutter/pubspec.lock
index 082b75e..322a397 100644
--- a/tk_apap_flutter/pubspec.lock
+++ b/tk_apap_flutter/pubspec.lock
@@ -162,7 +162,7 @@ packages:
       name: material_color_utilities
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.2.0"
+    version: "0.1.5"
   meta:
     dependency: transitive
     description:
@@ -335,7 +335,7 @@ packages:
       name: source_span
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.9.1"
+    version: "1.9.0"
   stack_trace:
     dependency: transitive
     description:
@@ -370,7 +370,7 @@ packages:
       name: test_api
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.4.13"
+    version: "0.4.12"
   typed_data:
     dependency: transitive
     description:
@@ -384,7 +384,7 @@ packages:
       name: vector_math
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.3"
+    version: "2.1.2"
   win32:
     dependency: transitive
     description:
@@ -400,5 +400,5 @@ packages:
     source: hosted
     version: "0.2.0+2"
 sdks:
-  dart: ">=2.18.0-146.0.dev <3.0.0"
+  dart: ">=2.17.0 <3.0.0"
   flutter: ">=3.0.0"
-- 
GitLab


From 87a4401bb7ef44ea86ab86b5f0c6b84af274994a Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Wed, 7 Dec 2022 22:25:40 +0700
Subject: [PATCH 09/19] feat/mobile: lihat profil

---
 tk_apap_flutter/lib/DTO/PasienDTO.dart        |   9 +
 tk_apap_flutter/lib/main.dart                 |   4 +-
 .../lib/pages/DaftarAppointment.dart          |   3 -
 tk_apap_flutter/lib/pages/HomeScreen.dart     |   4 +-
 tk_apap_flutter/lib/pages/LihatProfil.dart    | 139 +++++++++++++
 tk_apap_flutter/lib/pages/edit_profile.dart   | 194 ------------------
 tk_apap_flutter/lib/pages/resep.dart          |   4 +-
 tk_apap_flutter/lib/widgets/drawerWidget.dart |   2 +-
 8 files changed, 155 insertions(+), 204 deletions(-)
 create mode 100644 tk_apap_flutter/lib/DTO/PasienDTO.dart
 create mode 100644 tk_apap_flutter/lib/pages/LihatProfil.dart
 delete mode 100644 tk_apap_flutter/lib/pages/edit_profile.dart

diff --git a/tk_apap_flutter/lib/DTO/PasienDTO.dart b/tk_apap_flutter/lib/DTO/PasienDTO.dart
new file mode 100644
index 0000000..152253d
--- /dev/null
+++ b/tk_apap_flutter/lib/DTO/PasienDTO.dart
@@ -0,0 +1,9 @@
+class PasienDTO {
+  String nama = '';
+  String username = '';
+  String email = '';
+  String saldo = '';
+  PasienDTO();
+
+  PasienDTO.createPasien(this.nama, this.username, this.email, this.saldo);
+}
\ No newline at end of file
diff --git a/tk_apap_flutter/lib/main.dart b/tk_apap_flutter/lib/main.dart
index f94a2ef..9272697 100644
--- a/tk_apap_flutter/lib/main.dart
+++ b/tk_apap_flutter/lib/main.dart
@@ -2,7 +2,7 @@ import 'package:provider/provider.dart';
 import 'package:tk_apap_flutter/pages/Login.dart';
 import 'package:tk_apap_flutter/pages/HomeScreen.dart';
 import 'package:tk_apap_flutter/pages/DaftarAppointment.dart';
-import 'package:tk_apap_flutter/pages/edit_profile.dart';
+import 'package:tk_apap_flutter/pages/LihatProfil.dart';
 import 'package:tk_apap_flutter/pages/resep.dart';
 import 'package:flutter/material.dart';
 import 'package:tk_apap_flutter/constants/color_constants.dart';
@@ -29,7 +29,7 @@ class MyApp extends StatelessWidget {
       routes: {
         HomeScreen.routeName: (ctx) => HomeScreen(),
         Login.routeName: (ctx) => Login(),
-        EditProfile.routeName: (ctx) => EditProfile(),
+        LihatProfil.routeName: (ctx) => LihatProfil(),
         Resep.routeName: (ctx) => Resep(),
         CreateAppointment.routeName: (ctx) => const CreateAppointment(),
         DetailAppointment.routeName: (ctx) => const DetailAppointment()
diff --git a/tk_apap_flutter/lib/pages/DaftarAppointment.dart b/tk_apap_flutter/lib/pages/DaftarAppointment.dart
index 9e71bc1..44af54d 100644
--- a/tk_apap_flutter/lib/pages/DaftarAppointment.dart
+++ b/tk_apap_flutter/lib/pages/DaftarAppointment.dart
@@ -1,11 +1,8 @@
 import 'dart:convert';
-import 'dart:ffi';
 
-import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_session_manager/flutter_session_manager.dart';
 import 'package:http/http.dart' as http;
-
 import '../DTO/AptDTO.dart';
 
 class DetailAppointment extends StatefulWidget {
diff --git a/tk_apap_flutter/lib/pages/HomeScreen.dart b/tk_apap_flutter/lib/pages/HomeScreen.dart
index 24fd641..6ed3278 100644
--- a/tk_apap_flutter/lib/pages/HomeScreen.dart
+++ b/tk_apap_flutter/lib/pages/HomeScreen.dart
@@ -4,7 +4,7 @@ import 'package:tk_apap_flutter/animation/FadeAnimation.dart';
 import 'package:tk_apap_flutter/constants/color_constants.dart';
 import 'package:tk_apap_flutter/constants/text_style_constants.dart';
 import 'package:tk_apap_flutter/pages/CreateAppointment.dart';
-import 'package:tk_apap_flutter/pages/edit_profile.dart';
+import 'package:tk_apap_flutter/pages/LihatProfil.dart';
 import 'package:tk_apap_flutter/widgets/drawerWidget.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
@@ -313,7 +313,7 @@ class _HomeScreenState extends State<HomeScreen> {
   final List<Widget> _children = [ //TODO:ubah pages
     HomeScreen(),
     CreateAppointment(),
-    EditProfile(),
+    LihatProfil(),
   ];
 
   Widget _bottomNavBar(){
diff --git a/tk_apap_flutter/lib/pages/LihatProfil.dart b/tk_apap_flutter/lib/pages/LihatProfil.dart
new file mode 100644
index 0000000..6febbfd
--- /dev/null
+++ b/tk_apap_flutter/lib/pages/LihatProfil.dart
@@ -0,0 +1,139 @@
+import 'dart:convert';
+import 'dart:developer';
+
+import 'package:flutter_session_manager/flutter_session_manager.dart';
+import 'package:tk_apap_flutter/animation/FadeAnimation.dart';
+import 'package:tk_apap_flutter/constants/color_constants.dart';
+import 'package:tk_apap_flutter/widgets/drawerWidget.dart';
+import 'package:flutter/material.dart';
+import '../DTO/PasienDTO.dart';
+import 'package:http/http.dart' as http;
+
+class LihatProfil extends StatelessWidget {
+  static const routeName = '/edit';
+
+  Future<PasienDTO> getPasien() async {
+    var uri = Uri.parse('http://10.0.2.2:8080/api/pasien/getself');
+    dynamic token = await SessionManager().get('token');
+    String tknString = ('Bearer $token');
+    http.Response response = await http.get(uri, headers: {
+      'Accept': 'application/json',
+      'Content-Type': 'application/json; charset=UTF-8',
+      'Authorization': tknString
+    });
+    if (response.statusCode == 200) {
+      Map jsonData = jsonDecode(response.body);
+      PasienDTO pasien = PasienDTO.createPasien(
+          jsonData['nama'] as String,
+          jsonData['username'] as String,
+          jsonData['email'] as String,
+          jsonData['saldo'].toString());
+      log("Menembak API get profil pasien.");
+      return pasien;
+    } else {
+      throw response.statusCode;
+    }
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final GlobalKey<ScaffoldState> _scaffoldKey =
+        new GlobalKey<ScaffoldState>();
+
+    return Scaffold(
+      backgroundColor: Colors.white,
+      key: _scaffoldKey,
+      drawer: CustomDrawer(),
+      appBar: AppBar(
+        title: Text(
+          'Profil',
+          style: TextStyle(
+            fontFamily: 'Poppins',
+            fontWeight: FontWeight.bold,
+          ),
+        ),
+        backgroundColor: const Color(0xff0d47a1),
+        centerTitle: true,
+        leading: IconButton(
+          icon: Icon(
+            Icons.short_text,
+            size: 40,
+          ),
+          onPressed: () => _scaffoldKey.currentState.openDrawer(),
+        ),
+      ),
+      body: FutureBuilder<PasienDTO>(
+          future: getPasien(),
+          builder: (context, snapshot) {
+            if (snapshot.hasData) {
+              PasienDTO pasien = snapshot.data;
+              return SingleChildScrollView(
+                child: Padding(
+                  padding: EdgeInsets.only(top: 35, left: 35, right: 35),
+                  child: Column(
+                    children: <Widget>[
+                      Container(
+                          child: Text(
+                        'Nama: ${pasien.nama}',
+                        style: TextStyle(
+                          fontSize: 20,
+                        ),
+                      )),
+                      Container(
+                          child: Text(
+                        'Username: ${pasien.username}',
+                        style: TextStyle(
+                          fontSize: 20,
+                        ),
+                      )),
+                      Container(
+                          child: Text(
+                        'Email: ${pasien.email}',
+                        style: TextStyle(
+                          fontSize: 20,
+                        ),
+                      )),
+                      Container(
+                          child: Text(
+                        'Saldo: ${pasien.saldo.toString()}',
+                        style: TextStyle(
+                          fontSize: 20,
+                        ),
+                      )),
+                      SizedBox(
+                        height: 30,
+                      ),
+                      FadeAnimation(
+                          2,
+                          Container(
+                            height: 50,
+                            decoration: BoxDecoration(
+                              borderRadius: BorderRadius.circular(10),
+                              color: const Color(0xff0d47a1),
+                            ),
+                            child: Center(
+                              child: Text(
+                                "Top up saldo",
+                                style: TextStyle(
+                                  color: Colors.white,
+                                  fontWeight: FontWeight.bold,
+                                  fontSize: 20,
+                                  fontFamily: 'Poppins',
+                                ),
+                              ),
+                            ),
+                          )),
+                      SizedBox(
+                        height: 70,
+                      ),
+                    ],
+                  ),
+                ),
+              );
+            } else {
+              return const CircularProgressIndicator();
+            }
+          }),
+    );
+  }
+}
diff --git a/tk_apap_flutter/lib/pages/edit_profile.dart b/tk_apap_flutter/lib/pages/edit_profile.dart
deleted file mode 100644
index 7486499..0000000
--- a/tk_apap_flutter/lib/pages/edit_profile.dart
+++ /dev/null
@@ -1,194 +0,0 @@
-import 'package:tk_apap_flutter/animation/FadeAnimation.dart';
-import 'package:tk_apap_flutter/constants/color_constants.dart';
-import 'package:tk_apap_flutter/widgets/drawerWidget.dart';
-import 'package:flutter/material.dart';
-import 'package:font_awesome_flutter/font_awesome_flutter.dart';
-
-class EditProfile extends StatelessWidget {
-  static const routeName = '/edit';
-
-  @override
-  Widget build(BuildContext context) {
-    final GlobalKey<ScaffoldState> _scaffoldKey =
-    new GlobalKey<ScaffoldState>();
-
-    return Scaffold(
-      backgroundColor: Colors.white,
-      key: _scaffoldKey,
-      drawer: CustomDrawer(),
-      appBar: AppBar(
-        title: Center(
-          child: Text(
-            'Be a donor',
-            style: TextStyle(
-              fontFamily: 'Poppins',
-              fontWeight: FontWeight.bold,
-            ),
-          ),
-        ),
-        elevation: 0,
-        backgroundColor: kPrimaryColor,
-        leading: IconButton(
-          icon: Icon(
-            Icons.short_text,
-            size: 40,
-            color: kAccentColor,
-          ),
-          onPressed: () => _scaffoldKey.currentState.openDrawer(),
-        ),
-        actions: <Widget>[
-          IconButton(
-            onPressed: () {},
-            icon: Icon(
-              Icons.pan_tool,
-              size: 25,
-              color: Theme.of(context).accentColor,
-            ),
-          ),
-        ],
-      ),
-      body: SingleChildScrollView(
-        child: Container(
-          child: Column(
-            children: <Widget>[
-              FadeAnimation(
-                1.0,
-                Container(
-                  height: 150.0,
-                  child: Image.asset('assets/images/appr.png'),
-                ),
-              ),
-              Padding(
-                padding: EdgeInsets.only(top: .2, left: 35, right: 35),
-                child: Column(
-                  children: <Widget>[
-                    FadeAnimation(
-                      1.8,
-                      Container(
-                        padding: EdgeInsets.all(5),
-                        decoration: BoxDecoration(
-                          color: Colors.white,
-                          borderRadius: BorderRadius.circular(10),
-                          boxShadow: <BoxShadow>[
-                            BoxShadow(
-                              offset: Offset(-4, 4),
-                              blurRadius: 10,
-                              color: Color(0xFFFFBF05).withOpacity(.6),
-                            )
-                          ],
-                        ),
-                        child: Column(
-                          children: <Widget>[
-                            Container(
-                              padding: EdgeInsets.all(8.0),
-                              decoration: BoxDecoration(
-                                border: Border(
-                                  bottom: BorderSide(
-                                    color: Color(0xFFFFBF05).withOpacity(.10),
-                                  ),
-                                ),
-                              ),
-                              child: TextField(
-                                decoration: InputDecoration(
-                                  border: InputBorder.none,
-                                  hintText: "Name",
-                                  hintStyle: TextStyle(
-                                    color: Colors.grey[400],
-                                    fontFamily: 'Poppins',
-                                  ),
-                                ),
-                              ),
-                            ),
-                            Container(
-                              padding: EdgeInsets.all(8.0),
-                              decoration: BoxDecoration(
-                                border: Border(
-                                  bottom: BorderSide(
-                                    color: Color(0xFFFFBF05).withOpacity(.10),
-                                  ),
-                                ),
-                              ),
-                              child: TextField(
-                                decoration: InputDecoration(
-                                  border: InputBorder.none,
-                                  hintText: "Blood Group",
-                                  hintStyle: TextStyle(
-                                    color: Colors.grey[400],
-                                    fontFamily: 'Poppins',
-                                  ),
-                                ),
-                              ),
-                            ),
-                            Container(
-                              padding: EdgeInsets.all(8.0),
-                              decoration: BoxDecoration(
-                                border: Border(
-                                  bottom: BorderSide(
-                                    color: Color(0xFFFFBF05).withOpacity(.10),
-                                  ),
-                                ),
-                              ),
-                              child: TextField(
-                                decoration: InputDecoration(
-                                  border: InputBorder.none,
-                                  hintText: "Phone number",
-                                  hintStyle: TextStyle(
-                                    color: Colors.grey[400],
-                                    fontFamily: 'Poppins',
-                                  ),
-                                ),
-                              ),
-                            ),
-                            Container(
-                              padding: EdgeInsets.all(8.0),
-                              child: TextField(
-                                decoration: InputDecoration(
-                                  border: InputBorder.none,
-                                  hintText: "Location",
-                                  hintStyle: TextStyle(
-                                    color: Colors.grey[400],
-                                    fontFamily: 'Poppins',
-                                  ),
-                                ),
-                              ),
-                            )
-                          ],
-                        ),
-                      ),
-                    ),
-                    SizedBox(
-                      height: 30,
-                    ),
-                    FadeAnimation(
-                        2,
-                        Container(
-                          height: 50,
-                          decoration: BoxDecoration(
-                            borderRadius: BorderRadius.circular(10),
-                            color: Theme.of(context).primaryColor,
-                          ),
-                          child: Center(
-                            child: Text(
-                              "Save",
-                              style: TextStyle(
-                                color: Colors.white,
-                                fontWeight: FontWeight.bold,
-                                fontSize: 20,
-                                fontFamily: 'Poppins',
-                              ),
-                            ),
-                          ),
-                        )),
-                    SizedBox(
-                      height: 70,
-                    ),
-                  ],
-                ),
-              )
-            ],
-          ),
-        ),
-      ),
-    );
-  }
-}
diff --git a/tk_apap_flutter/lib/pages/resep.dart b/tk_apap_flutter/lib/pages/resep.dart
index 64a2a9a..fb85b26 100644
--- a/tk_apap_flutter/lib/pages/resep.dart
+++ b/tk_apap_flutter/lib/pages/resep.dart
@@ -1,6 +1,6 @@
 import 'package:tk_apap_flutter/animation/FadeAnimation.dart';
 import 'package:tk_apap_flutter/constants/color_constants.dart';
-import 'package:tk_apap_flutter/pages/edit_profile.dart';
+import 'package:tk_apap_flutter/pages/LihatProfil.dart';
 import 'package:tk_apap_flutter/widgets/drawerWidget.dart';
 import 'package:flutter/material.dart';
 
@@ -39,7 +39,7 @@ class Resep extends StatelessWidget {
         actions: <Widget>[
           IconButton(
             onPressed: () {
-              Navigator.of(context).pushNamed(EditProfile.routeName);
+              Navigator.of(context).pushNamed(LihatProfil.routeName);
             },
             icon: Icon(
               Icons.pan_tool,
diff --git a/tk_apap_flutter/lib/widgets/drawerWidget.dart b/tk_apap_flutter/lib/widgets/drawerWidget.dart
index 06e650c..d04bd97 100644
--- a/tk_apap_flutter/lib/widgets/drawerWidget.dart
+++ b/tk_apap_flutter/lib/widgets/drawerWidget.dart
@@ -1,6 +1,6 @@
 import 'package:tk_apap_flutter/pages/HomeScreen.dart';
 import 'package:tk_apap_flutter/pages/CreateAppointment.dart';
-import 'package:tk_apap_flutter/pages/edit_profile.dart';
+import 'package:tk_apap_flutter/pages/LihatProfil.dart';
 import 'package:tk_apap_flutter/pages/resep.dart';
 import 'package:tk_apap_flutter/pages/Login.dart';
 import 'package:flutter/material.dart';
-- 
GitLab


From 8918fde84f8106da800a8a61c905d7a519e6ca6a Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Thu, 8 Dec 2022 17:20:22 +0700
Subject: [PATCH 10/19] pasien dto dan rest controllernya

---
 .../user/controller/PasienRestController.java | 31 +++++++++++++++++++
 .../TK/SpringTkApap/user/model/PasienDTO.java | 17 ++++++++++
 2 files changed, 48 insertions(+)
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/PasienRestController.java
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/PasienDTO.java

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/PasienRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/PasienRestController.java
new file mode 100644
index 0000000..23b63e3
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/PasienRestController.java
@@ -0,0 +1,31 @@
+package spring.TK.SpringTkApap.user.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import spring.TK.SpringTkApap.user.model.DokterDTO;
+import spring.TK.SpringTkApap.user.model.PasienDTO;
+import spring.TK.SpringTkApap.user.model.PasienModel;
+import spring.TK.SpringTkApap.user.service.PasienService;
+
+import java.security.Principal;
+import java.util.List;
+
+@RestController
+@CrossOrigin(origins = "*")
+@RequestMapping("/api/pasien")
+public class PasienRestController {
+    @Autowired
+    PasienService pasienService;
+
+    @GetMapping("/getself")
+    public PasienDTO getPasienByUsername(Principal principal) {
+        PasienModel pasien = pasienService.getPasienByUsername(principal.getName());
+        PasienDTO pasienDTO = new PasienDTO();
+        pasienDTO.setUsername(pasien.getUsername());
+        pasienDTO.setNama(pasien.getNama());
+        pasienDTO.setSaldo(pasien.getSaldo());
+        pasienDTO.setEmail(pasien.getEmail());
+        return pasienDTO;
+    }
+
+}
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/PasienDTO.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/PasienDTO.java
new file mode 100644
index 0000000..0c6a244
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/PasienDTO.java
@@ -0,0 +1,17 @@
+package spring.TK.SpringTkApap.user.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class PasienDTO {
+    private String nama;
+    private String username;
+    private String email;
+    private Integer saldo;
+}
-- 
GitLab


From 8e9a776d6404e294cd004b5865956cfe4a67e0e3 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Thu, 8 Dec 2022 20:50:44 +0700
Subject: [PATCH 11/19] feat/lihatprofil: fixing things

---
 .../user/controller/PasienRestController.java      | 14 ++++++++++++++
 .../TK/SpringTkApap/user/model/PasienDTO.java      |  4 ++++
 .../user/service/PasienRestService.java            |  1 +
 .../user/service/PasienRestServiceImpl.java        |  6 ++++++
 tk_apap_flutter/lib/pages/LihatProfil.dart         |  4 ++--
 tk_apap_flutter/lib/pages/login.dart               |  2 +-
 6 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/PasienRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/PasienRestController.java
index b183fc4..ef8079e 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/PasienRestController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/PasienRestController.java
@@ -10,6 +10,7 @@ import spring.TK.SpringTkApap.user.model.PasienDTO;
 import spring.TK.SpringTkApap.user.service.PasienRestService;
 import spring.TK.SpringTkApap.user.model.PasienModel;
 
+import java.security.Principal;
 import java.util.List;
 import java.util.NoSuchElementException;
 
@@ -48,6 +49,19 @@ public class PasienRestController {
         }
     }
 
+    @GetMapping("/getself")
+    public PasienDTO getPasienByUsername(Principal principal) {
+        PasienModel pasien = pasienRestService.getPasienByUsername(principal.getName());
+        PasienDTO pasienDTO = new PasienDTO();
+        pasienDTO.setUsername(pasien.getUsername());
+        pasienDTO.setName(pasien.getNama());
+        pasienDTO.setSaldo(pasien.getSaldo().toString());
+        pasienDTO.setEmail(pasien.getEmail());
+        pasienDTO.setUmur(pasien.getUmur().toString());
+        pasienDTO.setPassword(pasien.getPassword());
+        return pasienDTO;
+    }
+
     @GetMapping("/all")
     private List<PasienModel> getAllPasien(){
         return pasienRestService.retrievePasien();
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/PasienDTO.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/PasienDTO.java
index 3a91b87..15b2dda 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/PasienDTO.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/PasienDTO.java
@@ -27,4 +27,8 @@ public class PasienDTO implements Serializable {
 
     @JsonProperty("umur")
     private String umur;
+
+    @JsonProperty("saldo")
+    private String saldo;
+
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/service/PasienRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/service/PasienRestService.java
index 17167b9..4fed5b7 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/service/PasienRestService.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/service/PasienRestService.java
@@ -9,5 +9,6 @@ public interface PasienRestService {
     PasienModel createPasien(PasienDTO pasienDTO);
     List<PasienModel> retrievePasien();
     PasienModel getPasien(String uuid);
+    PasienModel getPasienByUsername(String username);
     PasienModel topUpSaldo(String uuid, PasienModel pasienUpdate);
 }
diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/service/PasienRestServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/service/PasienRestServiceImpl.java
index d37361c..7d75236 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/service/PasienRestServiceImpl.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/service/PasienRestServiceImpl.java
@@ -59,6 +59,12 @@ public class PasienRestServiceImpl implements PasienRestService {
         throw new NoSuchElementException();
     }
 
+    @Override
+    public PasienModel getPasienByUsername(String username) {
+        Optional<PasienModel> pasien = pasienDb.findByUsername(username);
+        return pasien.orElse(null);
+    }
+
     @Override
     public PasienModel topUpSaldo(String uuid, PasienModel pasienUpdate) {
         PasienModel pasien = getPasien(uuid);
diff --git a/tk_apap_flutter/lib/pages/LihatProfil.dart b/tk_apap_flutter/lib/pages/LihatProfil.dart
index 6febbfd..374db93 100644
--- a/tk_apap_flutter/lib/pages/LihatProfil.dart
+++ b/tk_apap_flutter/lib/pages/LihatProfil.dart
@@ -3,7 +3,6 @@ import 'dart:developer';
 
 import 'package:flutter_session_manager/flutter_session_manager.dart';
 import 'package:tk_apap_flutter/animation/FadeAnimation.dart';
-import 'package:tk_apap_flutter/constants/color_constants.dart';
 import 'package:tk_apap_flutter/widgets/drawerWidget.dart';
 import 'package:flutter/material.dart';
 import '../DTO/PasienDTO.dart';
@@ -21,10 +20,11 @@ class LihatProfil extends StatelessWidget {
       'Content-Type': 'application/json; charset=UTF-8',
       'Authorization': tknString
     });
+    log(response.statusCode.toString());
     if (response.statusCode == 200) {
       Map jsonData = jsonDecode(response.body);
       PasienDTO pasien = PasienDTO.createPasien(
-          jsonData['nama'] as String,
+          jsonData['name'] as String,
           jsonData['username'] as String,
           jsonData['email'] as String,
           jsonData['saldo'].toString());
diff --git a/tk_apap_flutter/lib/pages/login.dart b/tk_apap_flutter/lib/pages/login.dart
index b128f16..75e14a5 100644
--- a/tk_apap_flutter/lib/pages/login.dart
+++ b/tk_apap_flutter/lib/pages/login.dart
@@ -25,7 +25,7 @@ class _LoginState extends State<Login> {
   UserLogin user = UserLogin("", "");
   bool _isHidden = true;
 
-  final url = Uri.parse('http://10.5.90.122:8080/api/authenticate'); //TODO:ubah sesuai IP Address, nanti pakai link web
+  final url = Uri.parse('http://10.0.2.2:8080/api/authenticate'); //TODO:ubah sesuai IP Address, nanti pakai link web
 
   final header = <String, String> {
     'Content-Type':
-- 
GitLab


From 34683704bcf491aa2cbbef4bfa6fbf49093ca657 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 12 Dec 2022 10:03:52 +0700
Subject: [PATCH 12/19] feat/obat: delete rest obat and add dto to update and
 add

---
 .../obat/controller/ObatController.java       |  7 ++-
 .../TK/SpringTkApap/obat/model/ObatDTO.java   | 18 ++++++
 .../TK/SpringTkApap/obat/model/ObatModel.java |  7 ++-
 .../obat/rest/ObatRestController.java         | 56 -------------------
 .../obat/rest/ObatRestService.java            | 12 ----
 .../obat/rest/ObatRestServiceImpl.java        | 45 ---------------
 .../obat/service/ObatService.java             |  3 +-
 .../obat/service/ObatServiceImpl.java         | 10 +++-
 8 files changed, 36 insertions(+), 122 deletions(-)
 create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatDTO.java
 delete mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java
 delete mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java
 delete mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java

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 c5b8a4f..6b66546 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,6 +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.obat.model.ObatDTO;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 import spring.TK.SpringTkApap.obat.service.ObatService;
 
@@ -18,13 +19,13 @@ public class ObatController {
 
     @GetMapping("/add")
     public String addObatForm(Model model){
-        ObatModel obat = new ObatModel();
+        ObatDTO obat = new ObatDTO();
         model.addAttribute("obat", obat);
         return "obat/form-add-obat";
     }
 
     @PostMapping("/add")
-    public String addObatSubmit(@ModelAttribute ObatModel obat, Model model){
+    public String addObatSubmit(@ModelAttribute ObatDTO obat, Model model){
         obatService.addObat(obat);
         model.addAttribute("obat", obat);
         return "obat/add-obat";
@@ -46,7 +47,7 @@ public class ObatController {
     }
 
     @PostMapping("/update")
-    public String updateObatSubmit(@ModelAttribute ObatModel obat, Model model){
+    public String updateObatSubmit(@ModelAttribute ObatDTO 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/ObatDTO.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatDTO.java
new file mode 100644
index 0000000..fdcac47
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatDTO.java
@@ -0,0 +1,18 @@
+package spring.TK.SpringTkApap.obat.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class ObatDTO {
+    private String idObat;
+    private Integer harga;
+    private String namaObat;
+    private Integer stok = 100;
+}
+
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..e2c6680 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
@@ -2,6 +2,7 @@ package spring.TK.SpringTkApap.obat.model;
 
 import com.sun.istack.NotNull;
 import lombok.*;
+import org.hibernate.annotations.ColumnDefault;
 import org.hibernate.annotations.GenericGenerator;
 import spring.TK.SpringTkApap.jumlah.JumlahModel;
 
@@ -23,12 +24,12 @@ public class ObatModel implements Serializable {
     @NotNull @Column(nullable = false)
     private String namaObat;
 
-    @NotNull @Column(nullable = false)
-    private Integer stok = 100;
+    @NotNull @Column(nullable = false) @ColumnDefault("100")
+    private Integer stok;
 
     @NotNull @Column(nullable = false)
     private Integer harga;
 
     @OneToMany(mappedBy = "obat", fetch = FetchType.EAGER)
     private List<JumlahModel> listJumlah;
-}
+}
\ No newline at end of file
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
deleted file mode 100644
index 8441189..0000000
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-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")
-    public 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}")
-    public 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")
-    public List<ObatModel> getAllObat(){
-        return obatRestService.retrieveObat();
-    }
-
-    @PutMapping(value = "/update-stok/{idObat}")
-    public 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
deleted file mode 100644
index 48c09cd..0000000
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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
deleted file mode 100644
index 06a3938..0000000
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-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);
-    }
-
-}
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 43e7c5d..41c1e1f 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
@@ -1,11 +1,12 @@
 package spring.TK.SpringTkApap.obat.service;
 
+import spring.TK.SpringTkApap.obat.model.ObatDTO;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 
 import java.util.List;
 
 public interface ObatService {
-    void addObat(ObatModel obat);
+    void addObat(ObatDTO 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 192d056..488bbdb 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
@@ -2,6 +2,7 @@ package spring.TK.SpringTkApap.obat.service;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import spring.TK.SpringTkApap.obat.model.ObatDTO;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 import spring.TK.SpringTkApap.obat.repository.ObatDb;
 
@@ -17,8 +18,13 @@ public class ObatServiceImpl implements ObatService{
     private ObatDb obatDb;
 
     @Override
-    public void addObat(ObatModel obat) {
-        obatDb.save(obat);
+    public void addObat(ObatDTO obat) {
+        ObatModel newObat = new ObatModel();
+        newObat.setIdObat(obat.getIdObat());
+        newObat.setStok(obat.getStok());
+        newObat.setNamaObat(obat.getNamaObat());
+        newObat.setHarga(obat.getHarga());
+        obatDb.save(newObat);
     }
 
     @Override
-- 
GitLab


From fe97ba08771266b121f720abef3f2fdba8b941af Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 12 Dec 2022 10:16:00 +0700
Subject: [PATCH 13/19] feat/obat: fix

---
 .../obat/controller/ObatController.java       |  7 +--
 .../TK/SpringTkApap/obat/model/ObatDTO.java   | 18 ------
 .../TK/SpringTkApap/obat/model/ObatModel.java |  7 +--
 .../obat/rest/ObatRestController.java         | 56 +++++++++++++++++++
 .../obat/rest/ObatRestService.java            | 12 ++++
 .../obat/rest/ObatRestServiceImpl.java        | 45 +++++++++++++++
 .../obat/service/ObatService.java             |  3 +-
 .../obat/service/ObatServiceImpl.java         | 10 +---
 8 files changed, 122 insertions(+), 36 deletions(-)
 delete mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatDTO.java
 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/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java
index 6b66546..c5b8a4f 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,6 @@ 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.obat.model.ObatDTO;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 import spring.TK.SpringTkApap.obat.service.ObatService;
 
@@ -19,13 +18,13 @@ public class ObatController {
 
     @GetMapping("/add")
     public String addObatForm(Model model){
-        ObatDTO obat = new ObatDTO();
+        ObatModel obat = new ObatModel();
         model.addAttribute("obat", obat);
         return "obat/form-add-obat";
     }
 
     @PostMapping("/add")
-    public String addObatSubmit(@ModelAttribute ObatDTO obat, Model model){
+    public String addObatSubmit(@ModelAttribute ObatModel obat, Model model){
         obatService.addObat(obat);
         model.addAttribute("obat", obat);
         return "obat/add-obat";
@@ -47,7 +46,7 @@ public class ObatController {
     }
 
     @PostMapping("/update")
-    public String updateObatSubmit(@ModelAttribute ObatDTO obat, Model model){
+    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/ObatDTO.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatDTO.java
deleted file mode 100644
index fdcac47..0000000
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatDTO.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package spring.TK.SpringTkApap.obat.model;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Setter
-@Getter
-@NoArgsConstructor
-@AllArgsConstructor
-public class ObatDTO {
-    private String idObat;
-    private Integer harga;
-    private String namaObat;
-    private Integer stok = 100;
-}
-
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 e2c6680..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
@@ -2,7 +2,6 @@ package spring.TK.SpringTkApap.obat.model;
 
 import com.sun.istack.NotNull;
 import lombok.*;
-import org.hibernate.annotations.ColumnDefault;
 import org.hibernate.annotations.GenericGenerator;
 import spring.TK.SpringTkApap.jumlah.JumlahModel;
 
@@ -24,12 +23,12 @@ public class ObatModel implements Serializable {
     @NotNull @Column(nullable = false)
     private String namaObat;
 
-    @NotNull @Column(nullable = false) @ColumnDefault("100")
-    private Integer stok;
+    @NotNull @Column(nullable = false)
+    private Integer stok = 100;
 
     @NotNull @Column(nullable = false)
     private Integer harga;
 
     @OneToMany(mappedBy = "obat", fetch = FetchType.EAGER)
     private List<JumlahModel> listJumlah;
-}
\ No newline at end of file
+}
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..8441189
--- /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")
+    public 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}")
+    public 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")
+    public List<ObatModel> getAllObat(){
+        return obatRestService.retrieveObat();
+    }
+
+    @PutMapping(value = "/update-stok/{idObat}")
+    public 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);
+    }
+
+}
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 41c1e1f..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
@@ -1,12 +1,11 @@
 package spring.TK.SpringTkApap.obat.service;
 
-import spring.TK.SpringTkApap.obat.model.ObatDTO;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 
 import java.util.List;
 
 public interface ObatService {
-    void addObat(ObatDTO obat);
+    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 488bbdb..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
@@ -2,7 +2,6 @@ package spring.TK.SpringTkApap.obat.service;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import spring.TK.SpringTkApap.obat.model.ObatDTO;
 import spring.TK.SpringTkApap.obat.model.ObatModel;
 import spring.TK.SpringTkApap.obat.repository.ObatDb;
 
@@ -18,13 +17,8 @@ public class ObatServiceImpl implements ObatService{
     private ObatDb obatDb;
 
     @Override
-    public void addObat(ObatDTO obat) {
-        ObatModel newObat = new ObatModel();
-        newObat.setIdObat(obat.getIdObat());
-        newObat.setStok(obat.getStok());
-        newObat.setNamaObat(obat.getNamaObat());
-        newObat.setHarga(obat.getHarga());
-        obatDb.save(newObat);
+    public void addObat(ObatModel obat) {
+        obatDb.save(obat);
     }
 
     @Override
-- 
GitLab


From c276fe90ada7568fb5ef058f1e085178c5b61b40 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 12 Dec 2022 10:43:53 +0700
Subject: [PATCH 14/19] feat/obat: add obatdto and delete rest obat

---
 .../obat/controller/ObatController.java       |  7 ++-
 .../tk/springtkapap/obat/model/ObatDTO.java   | 17 ++++++
 .../tk/springtkapap/obat/model/ObatModel.java |  3 +-
 .../obat/rest/ObatRestController.java         | 56 -------------------
 .../obat/rest/ObatRestService.java            | 12 ----
 .../obat/rest/ObatRestServiceImpl.java        | 45 ---------------
 .../obat/service/ObatService.java             |  3 +-
 .../obat/service/ObatServiceImpl.java         | 10 +++-
 8 files changed, 33 insertions(+), 120 deletions(-)
 create mode 100644 SpringTkApap/src/main/java/spring/tk/springtkapap/obat/model/ObatDTO.java
 delete mode 100644 SpringTkApap/src/main/java/spring/tk/springtkapap/obat/rest/ObatRestController.java
 delete mode 100644 SpringTkApap/src/main/java/spring/tk/springtkapap/obat/rest/ObatRestService.java
 delete mode 100644 SpringTkApap/src/main/java/spring/tk/springtkapap/obat/rest/ObatRestServiceImpl.java

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 3c6cd31..e3d0813 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,6 +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.obat.model.ObatDTO;
 import spring.tk.springtkapap.obat.model.ObatModel;
 import spring.tk.springtkapap.obat.service.ObatService;
 
@@ -18,13 +19,13 @@ public class ObatController {
 
     @GetMapping("/add")
     public String addObatForm(Model model){
-        var obat = new ObatModel();
+        ObatDTO obat = new ObatDTO();
         model.addAttribute("obat", obat);
         return "obat/form-add-obat";
     }
 
     @PostMapping("/add")
-    public String addObatSubmit(@ModelAttribute ObatModel obat, Model model){
+    public String addObatSubmit(@ModelAttribute ObatDTO obat, Model model){
         obatService.addObat(obat);
         model.addAttribute("obat", obat);
         return "obat/add-obat";
@@ -46,7 +47,7 @@ public class ObatController {
     }
 
     @PostMapping("/update")
-    public String updateObatSubmit(@ModelAttribute ObatModel obat, Model model){
+    public String updateObatSubmit(@ModelAttribute ObatDTO 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/ObatDTO.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/obat/model/ObatDTO.java
new file mode 100644
index 0000000..c7d5bf3
--- /dev/null
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/obat/model/ObatDTO.java
@@ -0,0 +1,17 @@
+package spring.tk.springtkapap.obat.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class ObatDTO {
+    String idObat;
+    String namaObat;
+    Integer harga;
+    Integer stok = 100;
+}
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 1c425a0..52da544 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
@@ -1,6 +1,7 @@
 package spring.tk.springtkapap.obat.model;
 
 import lombok.*;
+import org.hibernate.annotations.ColumnDefault;
 import org.hibernate.annotations.GenericGenerator;
 import spring.tk.springtkapap.jumlah.JumlahModel;
 
@@ -24,7 +25,7 @@ public class ObatModel implements Serializable {
     @Column(nullable = false)
     private String namaObat;
 
-    @NotNull @Column(nullable = false)
+    @NotNull @Column(nullable = false) @ColumnDefault("100")
     private Integer stok = 100;
 
     @NotNull @Column(nullable = false)
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
deleted file mode 100644
index 175a5ad..0000000
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/obat/rest/ObatRestController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-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")
-    public 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}")
-    public 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")
-    public List<ObatModel> getAllObat(){
-        return obatRestService.retrieveObat();
-    }
-
-    @PutMapping(value = "/update-stok/{idObat}")
-    public 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
deleted file mode 100644
index 747be27..0000000
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/obat/rest/ObatRestService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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
deleted file mode 100644
index dbc0768..0000000
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/obat/rest/ObatRestServiceImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-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);
-    }
-
-}
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 3edc600..70c3812 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
@@ -1,11 +1,12 @@
 package spring.tk.springtkapap.obat.service;
 
+import spring.tk.springtkapap.obat.model.ObatDTO;
 import spring.tk.springtkapap.obat.model.ObatModel;
 
 import java.util.List;
 
 public interface ObatService {
-    void addObat(ObatModel obat);
+    void addObat(ObatDTO 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 166a699..5f70b22 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
@@ -2,6 +2,7 @@ package spring.tk.springtkapap.obat.service;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import spring.tk.springtkapap.obat.model.ObatDTO;
 import spring.tk.springtkapap.obat.model.ObatModel;
 import spring.tk.springtkapap.obat.repository.ObatDb;
 
@@ -17,8 +18,13 @@ public class ObatServiceImpl implements ObatService{
     private ObatDb obatDb;
 
     @Override
-    public void addObat(ObatModel obat) {
-        obatDb.save(obat);
+    public void addObat(ObatDTO obat) {
+        ObatModel newObat = new ObatModel();
+        newObat.setIdObat(obat.getIdObat());
+        newObat.setNamaObat(obat.getNamaObat());
+        newObat.setStok(obat.getStok());
+        newObat.setHarga(obat.getStok());
+        obatDb.save(newObat);
     }
 
     @Override
-- 
GitLab


From 9bd5db0520b8a81f77036447f0c401bb0cd366c0 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 12 Dec 2022 10:55:08 +0700
Subject: [PATCH 15/19] obat/feat: add default value 100 for obat

---
 .../main/java/spring/tk/springtkapap/obat/model/ObatModel.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 52da544..5198a3c 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
@@ -25,7 +25,7 @@ public class ObatModel implements Serializable {
     @Column(nullable = false)
     private String namaObat;
 
-    @NotNull @Column(nullable = false) @ColumnDefault("100")
+    @NotNull @Column(nullable = false, columnDefinition = "integer default 100")
     private Integer stok = 100;
 
     @NotNull @Column(nullable = false)
-- 
GitLab


From 296c4b295a06705abe7ab2f6af6776bface47e9a Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 12 Dec 2022 19:25:23 +0700
Subject: [PATCH 16/19] fix typos

---
 .../SpringTkApap/user/controller/DokterRestController.java | 7 +++----
 .../springtkapap/appointment/AppointmentServiceImpl.java   | 2 +-
 .../tk/springtkapap/user/controller/DokterController.java  | 1 +
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/DokterRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/DokterRestController.java
index 3f7f265..078fd57 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/DokterRestController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/DokterRestController.java
@@ -1,4 +1,4 @@
-package spring.TK.SpringTkApap.user.controller;
+package spring.tk.springtkapap.user.controller;
 
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
@@ -8,9 +8,8 @@ import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import spring.TK.SpringTkApap.appointment.AppointmentRestController;
-import spring.TK.SpringTkApap.user.model.DokterDTO;
-import spring.TK.SpringTkApap.user.service.DokterService;
+import spring.tk.springtkapap.user.model.DokterDTO;
+import spring.tk.springtkapap.user.service.DokterService;
 
 import java.util.List;
 
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentServiceImpl.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentServiceImpl.java
index a95004b..fe12341 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentServiceImpl.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentServiceImpl.java
@@ -1,7 +1,7 @@
 package spring.tk.springtkapap.appointment;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;<<
+import org.springframework.stereotype.Service;
 import spring.tk.springtkapap.appointment.model.AppointmentModel;
 import spring.tk.springtkapap.user.model.DokterModel;
 
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/user/controller/DokterController.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/user/controller/DokterController.java
index 1a26d1a..464d4e3 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/user/controller/DokterController.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/user/controller/DokterController.java
@@ -12,6 +12,7 @@ import spring.tk.springtkapap.appointment.model.AppointmentModel;
 import spring.tk.springtkapap.user.model.DokterModel;
 import spring.tk.springtkapap.user.model.DokterRevDTO;
 import spring.tk.springtkapap.user.service.DokterService;
+import spring.tk.springtkapap.user.controller.DokterRestController;
 
 
 import java.time.LocalDateTime;
-- 
GitLab


From d586fbe4a402a6203976e2b1ee378336fd6854ac Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 12 Dec 2022 21:08:57 +0700
Subject: [PATCH 17/19] feat/11: tambah logic n button konfirmasi resep

---
 .../resep/controller/ResepController.java     |  31 ++++-
 .../resources/templates/resep/view-resep.html | 122 ++++++++++--------
 2 files changed, 100 insertions(+), 53 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..2246365 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
@@ -52,7 +52,6 @@ public class ResepController {
         List<ObatModel> listObat = obatService.getListObat();
         List<ApotekerModel> listApoteker = apotekerService.getAll();
 
-        // resep.setIsDone(false);
         resep.setAppointment(appointment);
         resep.setListJumlah(new ArrayList<>());
         resep.getListJumlah().add(new JumlahModel());
@@ -105,6 +104,18 @@ public class ResepController {
         model.addAttribute("pasien", resep.getAppointment().getPasien());
         model.addAttribute("apoteker", resep.getApoteker());
 
+        Boolean stokAda = true;
+        for (JumlahModel obatDibutuhkan : listJumlah){
+            String idObat = obatDibutuhkan.getObat().getIdObat();
+            System.out.println("stok tersedia adalah " + obatService.getObat(idObat).getStok());
+            System.out.println("stok diperlukan adalah " + obatDibutuhkan.getKuantitas());
+            if(obatDibutuhkan.getKuantitas() > obatService.getObat(idObat).getStok()){
+                stokAda = false;
+            }
+        }
+
+        model.addAttribute("stokAda", stokAda);
+
         return "resep/view-resep";
     }
 
@@ -162,5 +173,23 @@ public class ResepController {
         return "resep/form-add-resep";
     }
 
+    @PostMapping("/update/{idResep}")
+    public String updateResep(@PathVariable Long idResep, Model model){
+        ResepModel resep = resepService.getResep(idResep);
+        resep.setIsDone(Boolean.TRUE);
+        resepService.addResep(resep);
+        model.addAttribute("resep", resep);
+
+        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());
+        model.addAttribute("stokAda", true);
+        return "redirect:/resep/view-detail/?id=" + idResep;
+    }
+
+
 }
 
diff --git a/SpringTkApap/src/main/resources/templates/resep/view-resep.html b/SpringTkApap/src/main/resources/templates/resep/view-resep.html
index 4b3b8f5..4a00872 100644
--- a/SpringTkApap/src/main/resources/templates/resep/view-resep.html
+++ b/SpringTkApap/src/main/resources/templates/resep/view-resep.html
@@ -1,67 +1,85 @@
 <!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>
+    <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>
+    <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>
+                <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>
+                <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>
+
+            <div>
+                <a class="btn btn-primary" href="/">Home</a>
+            </div>
+            <br>
+            <div th:if="${resep.isDone}">
+                <p>Resep telah dikonfirmasi!</p>
+            </div>
+            <div th:unless="${resep.isDone}">
+                <form th:action="@{/resep/update/} + ${resep.id}" th:object="${resep}" method="POST">
+                    <div th:if="${stokAda}">
+                        <button class="btn btn-success" type="submit" href="/">Konfirmasi Resep Selesai</button>
+                    </div>
+                    <div th:unless="${stokAda}">
+                        <p>Stok obat kurang! Resep tidak bisa dikonfirmasi!</p>
+                        <button disabled class="btn btn-secondary" type="submit" href="/">Konfirmasi Resep Selesai</button>
+                    </div>
+                </form>
+            </div>
         </div>
-        <br>
-        <a class="btn btn-primary" href="/">Home</a>
-      </div>
     </div>
-  </div>
+</div>
 </div>
 
 </body>
-- 
GitLab


From 53881fdf8e7bc737eb39f91999f27132f1c31faa Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 12 Dec 2022 21:47:56 +0700
Subject: [PATCH 18/19] feat/11: add tagihan fitur

---
 .../resep/controller/ResepController.java     |  9 +++++++-
 .../appointment/AppointmentController.java    |  6 ++++-
 .../obat/service/ObatService.java             |  1 +
 .../obat/service/ObatServiceImpl.java         |  6 +++++
 .../springtkapap/tagihan/TagihanService.java  |  6 +++--
 .../tagihan/TagihanServiceImpl.java           | 23 +++++++++++++++++--
 .../resources/templates/resep/view-resep.html |  2 +-
 7 files changed, 46 insertions(+), 7 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 2246365..54916c3 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
@@ -23,6 +23,8 @@ 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;
+import spring.tk.springtkapap.tagihan.TagihanModel;
+import spring.tk.springtkapap.tagihan.TagihanService;
 import spring.tk.springtkapap.user.model.ApotekerModel;
 
 @Controller
@@ -45,6 +47,9 @@ public class ResepController {
     @Autowired
     private ApotekerService apotekerService;
 
+    @Autowired
+    private TagihanService tagihanService;
+
     @GetMapping("/add/{kodeAppointment}")
     public String addResepForm(@PathVariable("kodeAppointment") String kodeApt, Model model){
         AppointmentModel appointment = appointmentService.getAppointment(kodeApt);
@@ -176,11 +181,13 @@ public class ResepController {
     @PostMapping("/update/{idResep}")
     public String updateResep(@PathVariable Long idResep, Model model){
         ResepModel resep = resepService.getResep(idResep);
+        AppointmentModel appointment = resep.getAppointment();
         resep.setIsDone(Boolean.TRUE);
         resepService.addResep(resep);
         model.addAttribute("resep", resep);
-
         List<JumlahModel> listJumlah = resep.getListJumlah();
+        tagihanService.addTagihan(appointment, listJumlah);
+
         model.addAttribute("listJumlah", listJumlah);
         model.addAttribute("resep", resep);
         model.addAttribute("dokter", resep.getAppointment().getDokter());
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentController.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentController.java
index 37cd9fc..35eb883 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentController.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentController.java
@@ -10,6 +10,7 @@ import spring.tk.springtkapap.appointment.model.AppointmentModel;
 import spring.tk.springtkapap.auth.model.RolesEnum;
 import spring.tk.springtkapap.auth.model.UserModel;
 import spring.tk.springtkapap.auth.service.UserService;
+import spring.tk.springtkapap.jumlah.model.JumlahModel;
 import spring.tk.springtkapap.resep.model.ResepModel;
 import spring.tk.springtkapap.tagihan.TagihanModel;
 import spring.tk.springtkapap.tagihan.TagihanService;
@@ -20,6 +21,7 @@ import spring.tk.springtkapap.user.service.DokterService;
 import spring.tk.springtkapap.user.service.PasienService;
 
 import java.security.Principal;
+import java.util.ArrayList;
 import java.util.List;
 
 @Controller
@@ -95,7 +97,9 @@ public class AppointmentController {
         appointment.setKode(kodeApt);
         appointmentService.updateAppointment(appointment);
         var tagihan = new TagihanModel();
-        tagihanService.addTagihan(tagihan, appointment);
+        appointment.getListResep();
+        List<JumlahModel> listJumlah = new ArrayList<>();
+        tagihanService.addTagihan(appointment, listJumlah);
         appointment.getListTagihan().add(tagihan);
         appointmentService.updateAppointment(appointment);
         model.addAttribute("resepStatus", Boolean.FALSE);
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 70c3812..09b63a2 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
@@ -7,6 +7,7 @@ import java.util.List;
 
 public interface ObatService {
     void addObat(ObatDTO obat);
+    void updateObat(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 c2ffea6..28b5908 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
@@ -27,6 +27,12 @@ public class ObatServiceImpl implements ObatService{
         obatDb.save(newObat);
     }
 
+    @Override
+    public void updateObat(ObatModel obat) {
+        obatDb.save(obat);
+    }
+
+
     @Override
     public List<ObatModel> getListObat() {
         return obatDb.findAll();
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanService.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanService.java
index 2f63a0a..fec190e 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanService.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanService.java
@@ -1,10 +1,12 @@
 package spring.tk.springtkapap.tagihan;
 
 import spring.tk.springtkapap.appointment.model.AppointmentModel;
+import spring.tk.springtkapap.jumlah.model.JumlahModel;
+
+import java.util.List;
 
 public interface TagihanService {
-    TagihanModel addTagihan(TagihanModel tagihan, AppointmentModel appointment);
+    TagihanModel addTagihan(AppointmentModel appointment, List<JumlahModel> listJumlah);
     TagihanModel findbyKode(String kode);
 
-
 }
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanServiceImpl.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanServiceImpl.java
index 5352663..45f1d91 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanServiceImpl.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanServiceImpl.java
@@ -4,9 +4,14 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import spring.tk.springtkapap.appointment.AppointmentDB;
 import spring.tk.springtkapap.appointment.model.AppointmentModel;
+import spring.tk.springtkapap.jumlah.model.JumlahModel;
+import spring.tk.springtkapap.obat.model.ObatModel;
+import spring.tk.springtkapap.obat.service.ObatService;
+
 import javax.transaction.Transactional;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
 
 @Service
@@ -19,10 +24,24 @@ public class TagihanServiceImpl implements TagihanService{
     @Autowired
     AppointmentDB appointmentDB;
 
+    @Autowired
+    ObatService obatService;
+
     @Override
-    public TagihanModel addTagihan(TagihanModel tagihan, AppointmentModel appointment) {
+    public TagihanModel addTagihan(AppointmentModel appointment, List<JumlahModel> listJumlah) {
+        Integer nominalTagihan = appointment.getDokter().getTarif();
+        if(!listJumlah.isEmpty()){
+            for(JumlahModel obatDibutuhkan : listJumlah){
+                nominalTagihan += (obatDibutuhkan.getObat().getHarga()*obatDibutuhkan.getKuantitas());
+                String idObat = obatDibutuhkan.getObat().getIdObat();
+                ObatModel obatUpdate = obatService.getObat(idObat);
+                obatUpdate.setStok(obatUpdate.getStok()-obatDibutuhkan.getKuantitas());
+                obatService.updateObat(obatUpdate);
+            }
+        }
+        TagihanModel tagihan = new TagihanModel();
         tagihan.setAppointment(appointment);
-        tagihan.setJumlahTagihan(appointment.getDokter().getTarif());
+        tagihan.setJumlahTagihan(nominalTagihan);
         tagihan.setIsPaid(Boolean.FALSE);
         tagihan.setTanggalBayar(null);
         tagihan.setTanggalTerbuat(LocalDateTime.now());
diff --git a/SpringTkApap/src/main/resources/templates/resep/view-resep.html b/SpringTkApap/src/main/resources/templates/resep/view-resep.html
index 4a00872..afe3e2c 100644
--- a/SpringTkApap/src/main/resources/templates/resep/view-resep.html
+++ b/SpringTkApap/src/main/resources/templates/resep/view-resep.html
@@ -64,7 +64,7 @@
             </div>
             <br>
             <div th:if="${resep.isDone}">
-                <p>Resep telah dikonfirmasi!</p>
+                <p>Resep telah dikonfirmasi dan tagihan sudah keluar!</p>
             </div>
             <div th:unless="${resep.isDone}">
                 <form th:action="@{/resep/update/} + ${resep.id}" th:object="${resep}" method="POST">
-- 
GitLab


From bc504e3ccb194aad2406f61efd8ffdebb0ce33f6 Mon Sep 17 00:00:00 2001
From: GhaitsaDina <ghaitsamaulidina@gmail.com>
Date: Mon, 12 Dec 2022 22:07:22 +0700
Subject: [PATCH 19/19] feat/11: add hasAuthority admin for update

---
 .../spring/tk/springtkapap/auth/security/WebSecurityConfig.java  | 1 +
 1 file changed, 1 insertion(+)

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..2d6fa6e 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
@@ -55,6 +55,7 @@ public class WebSecurityConfig {
                     .antMatchers("/obat/update/**").hasAuthority(APOTEKER)
                     .antMatchers("/user/add/**").hasAuthority(ADMIN)
                     .antMatchers("/user/delete/**").hasAuthority(ADMIN)
+                    .antMatchers("/resep/update/**").hasAuthority(ADMIN)
                     .antMatchers("/appointment/viewall").hasAnyAuthority(ADMIN, DOKTER, PASIEN)
                     .antMatchers("/appointment/detail").hasAnyAuthority(ADMIN, DOKTER, PASIEN)
                     .antMatchers("/user/viewall/**").hasAuthority(ADMIN)
-- 
GitLab