From aed6e92d06d862e16881df7c4a707800ea0951f5 Mon Sep 17 00:00:00 2001
From: "M. Margaretha Stella" <stellaa.mmskdt@gmail.com>
Date: Sun, 13 Feb 2022 01:23:02 +0700
Subject: [PATCH] Implement student page

---
 .../controller/StudentController.java         | 46 +++++++++++++++++++
 .../DuplicateStudentNameException.java        |  7 +++
 .../cs/advprog/turorial0/model/Student.java   | 12 +++++
 3 files changed, 65 insertions(+)
 create mode 100644 src/main/java/id/ac/ui/cs/advprog/turorial0/controller/StudentController.java
 create mode 100644 src/main/java/id/ac/ui/cs/advprog/turorial0/exception/DuplicateStudentNameException.java
 create mode 100644 src/main/java/id/ac/ui/cs/advprog/turorial0/model/Student.java

diff --git a/src/main/java/id/ac/ui/cs/advprog/turorial0/controller/StudentController.java b/src/main/java/id/ac/ui/cs/advprog/turorial0/controller/StudentController.java
new file mode 100644
index 0000000..62a2ff5
--- /dev/null
+++ b/src/main/java/id/ac/ui/cs/advprog/turorial0/controller/StudentController.java
@@ -0,0 +1,46 @@
+package id.ac.ui.cs.advprog.turorial0.controller;
+
+import id.ac.ui.cs.advprog.turorial0.exception.DuplicateStudentNameException;
+import id.ac.ui.cs.advprog.turorial0.model.Student;
+import id.ac.ui.cs.advprog.turorial0.service.StudentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Controller
+@RequestMapping("/student")
+public class StudentController {
+
+    @Autowired
+    private StudentService service;
+
+    @GetMapping("/list")
+    public String studentListPage(Model model) {
+        List<Student> allStudents = service.findAll();
+        model.addAttribute("students", allStudents);
+        return "studentList";
+    }
+
+    @GetMapping("/create")
+    public String createStudentPage(Model model) {
+        Student student = new Student();
+        model.addAttribute("student", student);
+        return "createStudent";
+    }
+
+    @PostMapping("/create")
+    public String createStudentPost(@ModelAttribute Student student, Model model) {
+        try {
+            service.create(student);
+        } catch (DuplicateStudentNameException e) {
+            model.addAttribute("error", e);
+            model.addAttribute("student", student);
+            return "createStudent";
+        }
+        return "redirect:list";
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/id/ac/ui/cs/advprog/turorial0/exception/DuplicateStudentNameException.java b/src/main/java/id/ac/ui/cs/advprog/turorial0/exception/DuplicateStudentNameException.java
new file mode 100644
index 0000000..59153f3
--- /dev/null
+++ b/src/main/java/id/ac/ui/cs/advprog/turorial0/exception/DuplicateStudentNameException.java
@@ -0,0 +1,7 @@
+package id.ac.ui.cs.advprog.turorial0.exception;
+
+public class DuplicateStudentNameException extends RuntimeException {
+    public DuplicateStudentNameException(String studentName) {
+        super(String.format("The student name %s is a duplicate!", studentName));
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/id/ac/ui/cs/advprog/turorial0/model/Student.java b/src/main/java/id/ac/ui/cs/advprog/turorial0/model/Student.java
new file mode 100644
index 0000000..3897183
--- /dev/null
+++ b/src/main/java/id/ac/ui/cs/advprog/turorial0/model/Student.java
@@ -0,0 +1,12 @@
+package id.ac.ui.cs.advprog.turorial0.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class Student {
+    private String name;
+    private String npm;
+    private String address;
+}
-- 
GitLab