From 8939e0fc01921314a092539fe19d600095bc454e Mon Sep 17 00:00:00 2001 From: zichun Date: Fri, 15 May 2026 00:23:47 +0800 Subject: [PATCH] feat(usr): LoginReq + LoginVo + UserInfoVo REQ-USR-001 --- backend/src/main/java/com/xly/erp/module/usr/dto/LoginReq.java | 21 +++++++++++++++++++++ backend/src/main/java/com/xly/erp/module/usr/vo/LoginVo.java | 13 +++++++++++++ backend/src/main/java/com/xly/erp/module/usr/vo/UserInfoVo.java | 17 +++++++++++++++++ backend/src/test/java/com/xly/erp/module/usr/dto/LoginReqValidationTest.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 0 deletions(-) create mode 100644 backend/src/main/java/com/xly/erp/module/usr/dto/LoginReq.java create mode 100644 backend/src/main/java/com/xly/erp/module/usr/vo/LoginVo.java create mode 100644 backend/src/main/java/com/xly/erp/module/usr/vo/UserInfoVo.java create mode 100644 backend/src/test/java/com/xly/erp/module/usr/dto/LoginReqValidationTest.java diff --git a/backend/src/main/java/com/xly/erp/module/usr/dto/LoginReq.java b/backend/src/main/java/com/xly/erp/module/usr/dto/LoginReq.java new file mode 100644 index 0000000..2bc2af4 --- /dev/null +++ b/backend/src/main/java/com/xly/erp/module/usr/dto/LoginReq.java @@ -0,0 +1,21 @@ +package com.xly.erp.module.usr.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Data +public class LoginReq { + + @NotBlank + @Size(max = 50) + private String username; + + @NotBlank + @Size(max = 128) + private String password; + + @NotBlank + @Size(max = 50) + private String companyCode; +} diff --git a/backend/src/main/java/com/xly/erp/module/usr/vo/LoginVo.java b/backend/src/main/java/com/xly/erp/module/usr/vo/LoginVo.java new file mode 100644 index 0000000..5e8f933 --- /dev/null +++ b/backend/src/main/java/com/xly/erp/module/usr/vo/LoginVo.java @@ -0,0 +1,13 @@ +package com.xly.erp.module.usr.vo; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class LoginVo { + private String accessToken; + private String tokenType; + private long expiresInSec; + private UserInfoVo userInfo; +} diff --git a/backend/src/main/java/com/xly/erp/module/usr/vo/UserInfoVo.java b/backend/src/main/java/com/xly/erp/module/usr/vo/UserInfoVo.java new file mode 100644 index 0000000..5fe001e --- /dev/null +++ b/backend/src/main/java/com/xly/erp/module/usr/vo/UserInfoVo.java @@ -0,0 +1,17 @@ +package com.xly.erp.module.usr.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public class UserInfoVo { + private Integer userId; + private String username; + private String userType; + private String language; + private String employeeName; + private String companyCode; +} diff --git a/backend/src/test/java/com/xly/erp/module/usr/dto/LoginReqValidationTest.java b/backend/src/test/java/com/xly/erp/module/usr/dto/LoginReqValidationTest.java new file mode 100644 index 0000000..d300140 --- /dev/null +++ b/backend/src/test/java/com/xly/erp/module/usr/dto/LoginReqValidationTest.java @@ -0,0 +1,66 @@ +package com.xly.erp.module.usr.dto; + +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; +import org.junit.jupiter.api.Test; + +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +class LoginReqValidationTest { + + private static final Validator VALIDATOR = + Validation.buildDefaultValidatorFactory().getValidator(); + + private LoginReq build(String u, String p, String c) { + LoginReq r = new LoginReq(); + r.setUsername(u); + r.setPassword(p); + r.setCompanyCode(c); + return r; + } + + @Test + void blankUsername_fails() { + Set> v = VALIDATOR.validate(build("", "Password1!", "HQ")); + assertFalse(v.isEmpty()); + assertTrue(v.stream().anyMatch(c -> c.getPropertyPath().toString().equals("username"))); + } + + @Test + void blankPassword_fails() { + Set> v = VALIDATOR.validate(build("alice", "", "HQ")); + assertFalse(v.isEmpty()); + assertTrue(v.stream().anyMatch(c -> c.getPropertyPath().toString().equals("password"))); + } + + @Test + void blankCompanyCode_fails() { + Set> v = VALIDATOR.validate(build("alice", "Password1!", "")); + assertFalse(v.isEmpty()); + assertTrue(v.stream().anyMatch(c -> c.getPropertyPath().toString().equals("companyCode"))); + } + + @Test + void tooLongUsername_fails() { + String tooLong = "a".repeat(51); + Set> v = VALIDATOR.validate(build(tooLong, "Password1!", "HQ")); + assertFalse(v.isEmpty()); + } + + @Test + void tooLongPassword_fails() { + String tooLong = "a".repeat(129); + Set> v = VALIDATOR.validate(build("alice", tooLong, "HQ")); + assertFalse(v.isEmpty()); + } + + @Test + void allFieldsPresent_passes() { + Set> v = VALIDATOR.validate(build("alice", "Password1!", "HQ")); + assertTrue(v.isEmpty()); + } +} -- libgit2 0.22.2