|
30 | 30 | import reactor.core.publisher.Flux; |
31 | 31 | import reactor.core.publisher.Mono; |
32 | 32 |
|
| 33 | +import java.util.List; |
| 34 | + |
33 | 35 | import static org.lowcoder.sdk.exception.BizError.INVALID_USER_STATUS; |
34 | 36 | import static org.lowcoder.sdk.util.ExceptionUtils.ofError; |
35 | 37 |
|
@@ -70,30 +72,25 @@ public Mono<ResponseView<?>> getUserProfile(ServerWebExchange exchange) { |
70 | 72 |
|
71 | 73 | @Override |
72 | 74 | public Mono<ResponseView<?>> getUserOrgs(ServerWebExchange exchange, |
73 | | - @RequestParam(required = false) String orgName, |
74 | | - @RequestParam(required = false, defaultValue = "1") Integer pageNum, |
75 | | - @RequestParam(required = false, defaultValue = "10") Integer pageSize) { |
| 75 | + @RequestParam(required = false) String orgName, |
| 76 | + @RequestParam(required = false, defaultValue = "1") Integer pageNum, |
| 77 | + @RequestParam(required = false, defaultValue = "10") Integer pageSize) { |
76 | 78 | return sessionUserService.getVisitor() |
77 | 79 | .flatMap(user -> { |
78 | | - // Get all active organizations for the user |
79 | 80 | Flux<OrgMember> orgMemberFlux = orgMemberService.getAllActiveOrgs(user.getId()); |
80 | | - |
81 | | - // If orgName filter is provided, filter organizations by name |
82 | | - if (StringUtils.isNotBlank(orgName)) { |
83 | | - return orgMemberFlux |
84 | | - .flatMap(orgMember -> organizationService.getById(orgMember.getOrgId())) |
85 | | - .filter(org -> StringUtils.containsIgnoreCase(org.getName(), orgName)) |
86 | | - .map(OrgView::new) |
87 | | - .collectList() |
88 | | - .map(orgs -> PageResponseView.success(orgs, pageNum, pageSize, orgs.size())); |
89 | | - } |
90 | | - |
91 | | - // If no filter, return all organizations |
92 | | - return orgMemberFlux |
| 81 | + |
| 82 | + Flux<OrgView> orgViewFlux = orgMemberFlux |
93 | 83 | .flatMap(orgMember -> organizationService.getById(orgMember.getOrgId())) |
94 | | - .map(OrgView::new) |
95 | | - .collectList() |
96 | | - .map(orgs -> PageResponseView.success(orgs, pageNum, pageSize, orgs.size())); |
| 84 | + .filter(org -> StringUtils.isBlank(orgName) || StringUtils.containsIgnoreCase(org.getName(), orgName)) |
| 85 | + .map(OrgView::new); |
| 86 | + |
| 87 | + return orgViewFlux.collectList().map(orgs -> { |
| 88 | + int total = orgs.size(); |
| 89 | + int fromIndex = Math.max((pageNum - 1) * pageSize, 0); |
| 90 | + int toIndex = Math.min(fromIndex + pageSize, total); |
| 91 | + List<OrgView> pagedOrgs = fromIndex < toIndex ? orgs.subList(fromIndex, toIndex) : List.of(); |
| 92 | + return PageResponseView.success(pagedOrgs, pageNum, pageSize, total); |
| 93 | + }); |
97 | 94 | }) |
98 | 95 | .map(ResponseView::success); |
99 | 96 | } |
|
0 commit comments