diff --git a/src/main/java/com/example/demo/controller/ApprovalReceive.java b/src/main/java/com/example/demo/controller/ApprovalReceive.java new file mode 100644 index 0000000..605c086 --- /dev/null +++ b/src/main/java/com/example/demo/controller/ApprovalReceive.java @@ -0,0 +1,13 @@ +package com.example.demo.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class ApprovalReceive { + @GetMapping("/approvalReceive") + public String approvalReceive() { + return "approvalReceive"; + + } +} diff --git a/src/main/java/com/example/demo/controller/BookController.java b/src/main/java/com/example/demo/controller/BookController.java index d9788fc..2bc6f8b 100644 --- a/src/main/java/com/example/demo/controller/BookController.java +++ b/src/main/java/com/example/demo/controller/BookController.java @@ -1,14 +1,15 @@ package com.example.demo.controller; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; @Controller public class BookController { - @GetMapping("/book") + @PostMapping("/book") public String book() { return "book"; } + } diff --git a/src/main/java/com/example/demo/controller/BookUpdateConfirmController.java b/src/main/java/com/example/demo/controller/BookUpdateConfirmController.java new file mode 100644 index 0000000..19c39fb --- /dev/null +++ b/src/main/java/com/example/demo/controller/BookUpdateConfirmController.java @@ -0,0 +1,13 @@ +package com.example.demo.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; + +@Controller +public class BookUpdateConfirmController { + + @PostMapping("/updateconfirm") + public String updateConfirm() { + return "updateconfirm"; + } +} diff --git a/src/main/java/com/example/demo/controller/BookUpdateController.java b/src/main/java/com/example/demo/controller/BookUpdateController.java new file mode 100644 index 0000000..bb6aad5 --- /dev/null +++ b/src/main/java/com/example/demo/controller/BookUpdateController.java @@ -0,0 +1,19 @@ +package com.example.demo.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; + +@Controller +public class BookUpdateController { + + @PostMapping("/update") + public String update() { + return "update"; + } + + @PostMapping("/bookUpdate") + public String bookUpdate() { + return "book"; + } + +} diff --git a/src/main/java/com/example/demo/controller/LendListController.java b/src/main/java/com/example/demo/controller/LendListController.java new file mode 100644 index 0000000..7a2cdfe --- /dev/null +++ b/src/main/java/com/example/demo/controller/LendListController.java @@ -0,0 +1,13 @@ +package com.example.demo.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class LendListController { + @GetMapping("/lendList") + public String lendList() { + return "lendList"; + + } +} diff --git a/src/main/java/com/example/demo/controller/LoginController.java b/src/main/java/com/example/demo/controller/LoginController.java index 7961482..4e469fc 100644 --- a/src/main/java/com/example/demo/controller/LoginController.java +++ b/src/main/java/com/example/demo/controller/LoginController.java @@ -1,24 +1,79 @@ package com.example.demo.controller; +import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; + import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; +import com.example.demo.entity.AccountEntity; +import com.example.demo.form.LoginForm; +import com.example.demo.service.LoginService; + +import lombok.RequiredArgsConstructor; + @Controller +@RequiredArgsConstructor public class LoginController { - @GetMapping("/login") - public String showLogin() { - return "login"; - } + private final LoginService loginService; - @PostMapping("/doLogin") - public String doLogin() { - return "redirect:/topmenu"; - } + // Boot起動直後にログイン画面に移動する用のメソッド + @GetMapping("/") + public String index(HttpSession session) { + if (session.getAttribute("loginEmployee") != null) { + return "redirect:/topmenu"; + } + return "redirect:/login"; + } - @GetMapping("/topmenu") - public String showTopMenu() { - return "topmenu"; - } + @GetMapping("/login") + public String loginForm(Model model, HttpSession session) { + if (session.getAttribute("loginEmployee") != null) { + return "redirect:/topmenu"; + } + + model.addAttribute("loginForm", new LoginForm()); + return "login"; + } + + // 実際のログイン処理 + @PostMapping("/login") + public String doLogin( + @Valid @ModelAttribute LoginForm loginForm, + BindingResult bindingResult, + Model model, + HttpSession session) { + + if (bindingResult.hasErrors()) { + return "login"; + } + + AccountEntity accountEntity = loginService.login(loginForm); + if (accountEntity == null) { + model.addAttribute("loginError", + "ログインIDまたはパスワードが正しくありません"); + return "login"; + } + + session.setAttribute("loginEmployee", accountEntity); + return "redirect:/topmenu"; + } + + // ログアウト処理 + @GetMapping("/logout") + public String logout(HttpSession session) { + session.invalidate(); + return "redirect:/login"; + } + + // 各画面からトップメニューへの遷移用 + @GetMapping("/topmenu") + public String showTopMenu() { + return "topmenu"; + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/PasswordChangeController.java b/src/main/java/com/example/demo/controller/PasswordChangeController.java new file mode 100644 index 0000000..55894b2 --- /dev/null +++ b/src/main/java/com/example/demo/controller/PasswordChangeController.java @@ -0,0 +1,14 @@ +package com.example.demo.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class PasswordChangeController { + + @GetMapping("/passwordChange") + public String showPasswordChange() { + + return "passwordChange"; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/entity/AccountEntity.java b/src/main/java/com/example/demo/entity/AccountEntity.java new file mode 100644 index 0000000..fc90022 --- /dev/null +++ b/src/main/java/com/example/demo/entity/AccountEntity.java @@ -0,0 +1,40 @@ +package com.example.demo.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/* + * accountテーブル用のEntityクラス + * ログイン時やセッションでの管理者判別に使う + */ + +@Entity +@Table(name = "account") +@Getter +@Setter +@NoArgsConstructor +public class AccountEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="login_info_id") + private Integer loginInfoId; + + @Column(name="employee_id") + private Integer employeeId; + + @Column(name="password_hash") + private String passwordHash; + + @Column(name="admin_flag") + private int adminFlag; + +} diff --git a/src/main/java/com/example/demo/form/LoginForm.java b/src/main/java/com/example/demo/form/LoginForm.java new file mode 100644 index 0000000..2a5a7ab --- /dev/null +++ b/src/main/java/com/example/demo/form/LoginForm.java @@ -0,0 +1,17 @@ +package com.example.demo.form; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +import lombok.Data; + +@Data +public class LoginForm { + + @NotNull(message = "社員IDを入力してください") + private Integer employeeId; + + @NotBlank(message = "パスワードを入力してください") + private String passwordHash; + +} diff --git a/src/main/java/com/example/demo/repository/AccountRepository.java b/src/main/java/com/example/demo/repository/AccountRepository.java new file mode 100644 index 0000000..db7d155 --- /dev/null +++ b/src/main/java/com/example/demo/repository/AccountRepository.java @@ -0,0 +1,11 @@ +package com.example.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.example.demo.entity.AccountEntity; + +public interface AccountRepository extends JpaRepository{ + + AccountEntity findByEmployeeId (Integer employeeId); + +} diff --git a/src/main/java/com/example/demo/service/LoginService.java b/src/main/java/com/example/demo/service/LoginService.java new file mode 100644 index 0000000..c87eead --- /dev/null +++ b/src/main/java/com/example/demo/service/LoginService.java @@ -0,0 +1,31 @@ +package com.example.demo.service; + +import org.springframework.stereotype.Service; + +import com.example.demo.entity.AccountEntity; +import com.example.demo.form.LoginForm; +import com.example.demo.repository.AccountRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class LoginService { + + private final AccountRepository accountRepository; + + public AccountEntity login(LoginForm form) { + AccountEntity accountEntity = + accountRepository.findByEmployeeId(form.getEmployeeId()); + + if(accountEntity == null) { + return null; + } + + if(!accountEntity.getPasswordHash().equals(form.getPasswordHash())) + return null; + + return accountEntity; + } + +} diff --git a/src/main/resources/static/js/passwordChange.js b/src/main/resources/static/js/passwordChange.js new file mode 100644 index 0000000..a53327c --- /dev/null +++ b/src/main/resources/static/js/passwordChange.js @@ -0,0 +1,62 @@ +function togglePassword(id) { + + const input = document.getElementById(id); + + if (input === null) { + return; + } + + if (input.type === "password") { + input.type = "text"; + } else { + input.type = "password"; + } +} + + +function clearForm() { + + const form = document.getElementById("pwForm"); + + if (form === null) { + return; + } + + form.reset(); +} + + + +function showCompletedPopup() { + + const completedDialog = document.getElementById("completedDialog"); + + if (completedDialog === null) { + return; + } + + completedDialog.showModal(); +} + +function goTopMenu() { + + const topMenuUrl = document.body.dataset.topmenuUrl; + + if (topMenuUrl) { + window.location.href = topMenuUrl; + return; + } + + window.location.href = "/topmenu"; +} + +function goLogin(){ + const loginUrl = document.body.dataset.loginUrl; + + if (loginUrl){ + window.location.href = loginUrl; + return; + } + + window.location.href="/login" +} \ No newline at end of file diff --git a/src/main/resources/templates/approvalReceive.html b/src/main/resources/templates/approvalReceive.html index 590e6a0..f8ae3c0 100644 --- a/src/main/resources/templates/approvalReceive.html +++ b/src/main/resources/templates/approvalReceive.html @@ -1,10 +1,34 @@ + - -寄贈申請 受信BOX + + 寄贈申請 受信BOX + +

寄贈申請 受信BOX

+ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/book.html b/src/main/resources/templates/book.html index d18c996..abb6211 100644 --- a/src/main/resources/templates/book.html +++ b/src/main/resources/templates/book.html @@ -13,6 +13,13 @@ 貸出 + +
+ +
\ No newline at end of file diff --git a/src/main/resources/templates/lendList.html b/src/main/resources/templates/lendList.html new file mode 100644 index 0000000..2f9065a --- /dev/null +++ b/src/main/resources/templates/lendList.html @@ -0,0 +1,48 @@ + + + + + + 貸出中図書一覧 + + + +

貸出中図書一覧

+ + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 06b4373..70f5aac 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -1,29 +1,35 @@ - + + - -ログイン + + ログイン + - +

ログイン

-
-
- -
+

+

- - - - -
- - -
+ +
+ + +

+
+ +
+ + +

+
+ + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/passwordChange.html b/src/main/resources/templates/passwordChange.html new file mode 100644 index 0000000..93e54ab --- /dev/null +++ b/src/main/resources/templates/passwordChange.html @@ -0,0 +1,377 @@ + + + + + + ShareBooks|パスワード変更 + + + + + +
+ +
+ ShareBooks +
+ +
+ + + 🔔 + 3 + + + + テストユーザー(一般) + + + + +
+
+ +
+ + + + + +
+ + + + +

+ パスワード再設定 +

+ +

+ 現在のパスワードと新しいパスワードを入力し、 + 「確定」ボタンを押してください。 +

+ +

+ (※)は必須項目です。 +

+ +
+ + +
+ +
+ +

+ パスワード再設定入力 +

+ + +
+ + +
+ + + +
+ + + + + +
+
+ + +
+ + + +
+ + + + + +
+ +

+ ※ 半角英数字・記号を含む8文字以上16文字以下で入力してください。 +

+ +
+ + +
+ + + +
+ + + + + +
+ +

+ ※ 確認のため、もう一度新しいパスワードを入力してください。 +

+ +
+ +
+ +
+ + +
+ +
+ 注意事項 +
+ +
+ + +
+ + + +
+ + + + + + +
+
+ +
+ + +
+ +
+ +
+ パスワードの制約 +
+ +
+ 使用可能文字 +
+ +
+ 半角英数字・記号 +
+ +
+ +
+ 制約 +
+ +
    +
  • ✓ 8文字以上16文字以下
  • +
  • ✓ 1つ以上の小文字を使用
  • +
  • ✓ 1つ以上の大文字を使用
  • +
  • ✓ 1つ以上の数字を使用
  • +
  • ✓ 1つ以上の記号を使用
  • +
+ +
+ +
+ 設定例 +
+ +
+ Abcdef12! +
+ +
+ (9文字、英字大小・数字・記号を含む) +
+ +
+ +
+
+ +
+
+ +
+ + + + + +

+ 変更完了 +

+ +

+ パスワードの変更が完了しました。 +

+ + + +
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/topmenu.html b/src/main/resources/templates/topmenu.html index 65e2ed8..2fff6ee 100644 --- a/src/main/resources/templates/topmenu.html +++ b/src/main/resources/templates/topmenu.html @@ -1,29 +1,56 @@ + - -トップメニュー + + トップメニュー + + +
+ +
+ ShareBooks +
+ +
+ + + テストユーザー(一般) + + + + ログアウト + + +
+ + +
+

メインメニュー

- + + - +
+ リンク名 + +

- - + +

寄贈申請

@@ -31,11 +58,11 @@ 寄贈申請フォームの
入力を行います。

- +
- + - +

新規図書登録

@@ -46,20 +73,20 @@

- - - - + + + +

貸出中図書一覧

貸出中図書の
一覧を表示します。 -

+

- +
- - + +

寄贈申請受信BOX

@@ -68,5 +95,16 @@

+
+ + +

パスワード変更

+ +

+ 初期パスワードを
変更します。 +

+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/update.html b/src/main/resources/templates/update.html index 1883fdf..eed51f5 100644 --- a/src/main/resources/templates/update.html +++ b/src/main/resources/templates/update.html @@ -5,6 +5,13 @@ 図書情報更新入力 - + 更新入力画面 + +
+ +
\ No newline at end of file diff --git a/src/main/resources/templates/updateConfirm.html b/src/main/resources/templates/updateConfirm.html new file mode 100644 index 0000000..87eadc6 --- /dev/null +++ b/src/main/resources/templates/updateConfirm.html @@ -0,0 +1,24 @@ + + + + +更新内容確認 + + +更新内容確認画面 + +
+ +
+ +
+ +
+ + \ No newline at end of file