Commit b8d7d5880a97ace866eb591127aa1d2bbd65ea4c

Authored by zichun
1 parent 56d83a0e

feat(usr): 通用分页响应体 PageResult REQ-USR-003

backend/src/main/java/com/xly/erp/common/response/PageResult.java 0 → 100644
  1 +package com.xly.erp.common.response;
  2 +
  3 +import java.io.Serializable;
  4 +import java.util.List;
  5 +
  6 +/**
  7 + * 通用分页响应体(docs/04 § 1.4 / § 3.2 SSoT)。
  8 + *
  9 + * <p>REQ-USR-003 T1【本 REQ 新增公共契约】。分页接口统一返回 {@code Result<PageResult<T>>},
  10 + * 含当前页数据 {@code records}、真实总记录数 {@code total}、当前页号 {@code pageNum}
  11 + * (数据越界钳制后的实际页号)、每页条数 {@code pageSize}。后续分页 REQ 复用。</p>
  12 + *
  13 + * @param <T> 当前页元素类型
  14 + */
  15 +public class PageResult<T> implements Serializable {
  16 +
  17 + private static final long serialVersionUID = 1L;
  18 +
  19 + /** 当前页数据。 */
  20 + private List<T> records;
  21 + /** 真实总记录数。 */
  22 + private long total;
  23 + /** 当前页号(数据越界钳制后的实际页号)。 */
  24 + private long pageNum;
  25 + /** 每页条数。 */
  26 + private long pageSize;
  27 +
  28 + public PageResult() {
  29 + }
  30 +
  31 + public PageResult(List<T> records, long total, long pageNum, long pageSize) {
  32 + this.records = records;
  33 + this.total = total;
  34 + this.pageNum = pageNum;
  35 + this.pageSize = pageSize;
  36 + }
  37 +
  38 + /**
  39 + * 静态工厂:从分页要素装配。
  40 + */
  41 + public static <T> PageResult<T> of(List<T> records, long total, long pageNum, long pageSize) {
  42 + return new PageResult<>(records, total, pageNum, pageSize);
  43 + }
  44 +
  45 + public List<T> getRecords() {
  46 + return records;
  47 + }
  48 +
  49 + public void setRecords(List<T> records) {
  50 + this.records = records;
  51 + }
  52 +
  53 + public long getTotal() {
  54 + return total;
  55 + }
  56 +
  57 + public void setTotal(long total) {
  58 + this.total = total;
  59 + }
  60 +
  61 + public long getPageNum() {
  62 + return pageNum;
  63 + }
  64 +
  65 + public void setPageNum(long pageNum) {
  66 + this.pageNum = pageNum;
  67 + }
  68 +
  69 + public long getPageSize() {
  70 + return pageSize;
  71 + }
  72 +
  73 + public void setPageSize(long pageSize) {
  74 + this.pageSize = pageSize;
  75 + }
  76 +}
... ...
backend/src/test/java/com/xly/erp/common/response/PageResultTest.java 0 → 100644
  1 +package com.xly.erp.common.response;
  2 +
  3 +import static org.assertj.core.api.Assertions.assertThat;
  4 +
  5 +import java.util.List;
  6 +import org.junit.jupiter.api.Test;
  7 +
  8 +/**
  9 + * REQ-USR-003 T1:通用分页响应体 PageResult。
  10 + *
  11 + * <p>验证四字段(records/total/pageNum/pageSize)装配读回一致,空 records 允许。</p>
  12 + */
  13 +class PageResultTest {
  14 +
  15 + @Test
  16 + void ofAssemblesAllFields() {
  17 + List<String> records = List.of("a", "b", "c");
  18 + PageResult<String> page = PageResult.of(records, 23L, 2L, 10L);
  19 +
  20 + assertThat(page.getRecords()).isEqualTo(records);
  21 + assertThat(page.getTotal()).isEqualTo(23L);
  22 + assertThat(page.getPageNum()).isEqualTo(2L);
  23 + assertThat(page.getPageSize()).isEqualTo(10L);
  24 + }
  25 +
  26 + @Test
  27 + void emptyRecordsAllowed() {
  28 + PageResult<String> page = PageResult.of(List.of(), 0L, 1L, 10L);
  29 +
  30 + assertThat(page.getRecords()).isNotNull().isEmpty();
  31 + assertThat(page.getTotal()).isZero();
  32 + assertThat(page.getPageNum()).isEqualTo(1L);
  33 + }
  34 +}
... ...