Commit b8d7d5880a97ace866eb591127aa1d2bbd65ea4c
1 parent
56d83a0e
feat(usr): 通用分页响应体 PageResult REQ-USR-003
Showing
2 changed files
with
110 additions
and
0 deletions
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 | +} |