Commit 405982ff08eed758e0db5fc24cb0cf34836c902b

Authored by zichun
1 parent a11b5571

feat(usr): UserQueryReq + UserListItemVo REQ-USR-004

backend/src/main/java/com/xly/erp/module/usr/dto/UserQueryReq.java 0 → 100644
  1 +package com.xly.erp.module.usr.dto;
  2 +
  3 +import jakarta.validation.constraints.Max;
  4 +import jakarta.validation.constraints.Min;
  5 +import lombok.Data;
  6 +
  7 +/**
  8 + * 用户列表查询请求。所有字段可选;枚举值白名单由 service 层校验。
  9 + * REQ-USR-004。
  10 + */
  11 +@Data
  12 +public class UserQueryReq {
  13 +
  14 + @Min(value = 1, message = "page 必须 >= 1")
  15 + private Integer page;
  16 +
  17 + @Min(value = 1, message = "size 必须 >= 1")
  18 + @Max(value = 100, message = "size 不能超过 100")
  19 + private Integer size;
  20 +
  21 + private String sortField;
  22 + private String sortOrder;
  23 + private String queryField;
  24 + private String matchMode;
  25 + private String queryValue;
  26 + private String userType;
  27 + private Boolean isDeleted;
  28 +}
backend/src/main/java/com/xly/erp/module/usr/vo/UserListItemVo.java 0 → 100644
  1 +package com.xly.erp.module.usr.vo;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonInclude;
  4 +import lombok.Builder;
  5 +import lombok.Data;
  6 +import lombok.NoArgsConstructor;
  7 +import lombok.AllArgsConstructor;
  8 +
  9 +import java.time.LocalDateTime;
  10 +
  11 +@Data
  12 +@Builder
  13 +@NoArgsConstructor
  14 +@AllArgsConstructor
  15 +@JsonInclude(JsonInclude.Include.ALWAYS)
  16 +public class UserListItemVo {
  17 + private Integer userId;
  18 + private String username;
  19 + private String employeeName;
  20 + private String userCode;
  21 + private String departmentName;
  22 + private String userType;
  23 + private String language;
  24 + private Boolean isDeleted;
  25 + private LocalDateTime lastLoginDate;
  26 + private String createdBy;
  27 + private LocalDateTime createdDate;
  28 +}
backend/src/test/java/com/xly/erp/module/usr/dto/UserQueryReqValidationTest.java 0 → 100644
  1 +package com.xly.erp.module.usr.dto;
  2 +
  3 +import jakarta.validation.Validation;
  4 +import jakarta.validation.Validator;
  5 +import org.junit.jupiter.api.Test;
  6 +
  7 +import static org.junit.jupiter.api.Assertions.assertFalse;
  8 +import static org.junit.jupiter.api.Assertions.assertTrue;
  9 +
  10 +class UserQueryReqValidationTest {
  11 +
  12 + private static final Validator V =
  13 + Validation.buildDefaultValidatorFactory().getValidator();
  14 +
  15 + @Test
  16 + void emptyReq_isValid() {
  17 + assertTrue(V.validate(new UserQueryReq()).isEmpty());
  18 + }
  19 +
  20 + @Test
  21 + void pageZero_fails() {
  22 + UserQueryReq r = new UserQueryReq();
  23 + r.setPage(0);
  24 + assertFalse(V.validate(r).isEmpty());
  25 + }
  26 +
  27 + @Test
  28 + void sizeOver100_fails() {
  29 + UserQueryReq r = new UserQueryReq();
  30 + r.setSize(101);
  31 + assertFalse(V.validate(r).isEmpty());
  32 + }
  33 +
  34 + @Test
  35 + void sizeZero_fails() {
  36 + UserQueryReq r = new UserQueryReq();
  37 + r.setSize(0);
  38 + assertFalse(V.validate(r).isEmpty());
  39 + }
  40 +
  41 + @Test
  42 + void allValidFields_passes() {
  43 + UserQueryReq r = new UserQueryReq();
  44 + r.setPage(2);
  45 + r.setSize(50);
  46 + r.setSortField("tCreateDate");
  47 + r.setSortOrder("asc");
  48 + r.setQueryField("username");
  49 + r.setMatchMode("contains");
  50 + r.setQueryValue("ali");
  51 + r.setUserType("NORMAL");
  52 + r.setIsDeleted(false);
  53 + assertTrue(V.validate(r).isEmpty());
  54 + }
  55 +}