From c55e7add27a52a1c2ca75eefb6e11dc270c9129d Mon Sep 17 00:00:00 2001 From: devmrko Date: Tue, 23 Jun 2026 11:21:31 +0900 Subject: [PATCH] [Developer] #424 default token expiry picker Refs #424 --- .../vpdbackoffice/web/TokenController.java | 25 +++++++++++++++++-- src/main/resources/templates/tokens.html | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/web/TokenController.java b/src/main/java/com/cloudhandson/vpdbackoffice/web/TokenController.java index ad5618f..4d74fe0 100644 --- a/src/main/java/com/cloudhandson/vpdbackoffice/web/TokenController.java +++ b/src/main/java/com/cloudhandson/vpdbackoffice/web/TokenController.java @@ -3,7 +3,12 @@ package com.cloudhandson.vpdbackoffice.web; import com.cloudhandson.vpdbackoffice.domain.token.TokenIssueCommand; import com.cloudhandson.vpdbackoffice.mapper.UserMapper; import com.cloudhandson.vpdbackoffice.service.BearerTokenService; +import java.time.Clock; +import java.time.LocalDateTime; import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.time.format.DateTimeFormatter; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -16,16 +21,19 @@ public class TokenController { private final BearerTokenService tokenService; private final UserMapper userMapper; + private final Clock clock; - public TokenController(BearerTokenService tokenService, UserMapper userMapper) { + public TokenController(BearerTokenService tokenService, UserMapper userMapper, Clock clock) { this.tokenService = tokenService; this.userMapper = userMapper; + this.clock = clock; } @GetMapping("/tokens") public String tokens(Model model) { model.addAttribute("tokens", tokenService.findAll()); model.addAttribute("users", userMapper.findAll()); + model.addAttribute("defaultExpiresAt", defaultExpiresAt()); return "tokens"; } @@ -38,7 +46,7 @@ public class TokenController { ) { var issued = tokenService.issueToken(new TokenIssueCommand( userId, - OffsetDateTime.parse(expiresAt), + parseBrowserDateTime(expiresAt), description )); redirectAttributes.addFlashAttribute("issued", issued); @@ -55,4 +63,17 @@ public class TokenController { redirectAttributes.addFlashAttribute("message", "토큰을 회수했습니다."); return "redirect:/tokens"; } + + private String defaultExpiresAt() { + return LocalDateTime.now(clock.withZone(ZoneId.systemDefault())) + .plusMonths(1) + .truncatedTo(ChronoUnit.MINUTES) + .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } + + private OffsetDateTime parseBrowserDateTime(String expiresAt) { + return LocalDateTime.parse(expiresAt) + .atZone(ZoneId.systemDefault()) + .toOffsetDateTime(); + } } diff --git a/src/main/resources/templates/tokens.html b/src/main/resources/templates/tokens.html index 106a516..820f7c4 100644 --- a/src/main/resources/templates/tokens.html +++ b/src/main/resources/templates/tokens.html @@ -27,7 +27,7 @@