|
12 | 12 | import org.lowcoder.api.usermanagement.view.OrgAndVisitorRoleView; |
13 | 13 | import org.lowcoder.api.usermanagement.view.UserProfileView; |
14 | 14 | import org.lowcoder.domain.application.model.Application; |
| 15 | +import org.lowcoder.domain.application.model.ApplicationRecord; |
15 | 16 | import org.lowcoder.domain.application.model.ApplicationStatus; |
16 | 17 | import org.lowcoder.domain.application.model.ApplicationType; |
17 | 18 | import org.lowcoder.domain.application.service.ApplicationRecordService; |
|
35 | 36 | import org.lowcoder.domain.user.service.UserService; |
36 | 37 | import org.lowcoder.domain.user.service.UserStatusService; |
37 | 38 | import org.lowcoder.infra.util.NetworkUtils; |
| 39 | +import org.lowcoder.infra.util.TupleUtils; |
38 | 40 | import org.lowcoder.sdk.config.CommonConfig; |
| 41 | +import org.lowcoder.sdk.models.VersionedModel; |
39 | 42 | import org.springframework.stereotype.Component; |
40 | 43 | import org.springframework.web.server.ServerWebExchange; |
41 | 44 | import reactor.core.publisher.Flux; |
@@ -203,11 +206,13 @@ public Flux<ApplicationInfoView> getAllAuthorisedApplications4CurrentOrgMember(@ |
203 | 206 | return applicationService.findByOrganizationIdWithDsl(currentOrgId); |
204 | 207 | } |
205 | 208 | return applicationService.findByOrganizationIdWithoutDsl(currentOrgId); |
206 | | - }) |
207 | | - .filter(application -> (isNull(applicationType) || applicationType == ApplicationType.ALL || application.getApplicationType() == applicationType.getValue()) |
208 | | - && (isNull(applicationStatus) || application.getApplicationStatus() == applicationStatus) |
209 | | - && (isNull(name) || StringUtils.containsIgnoreCase(application.getName(), name)) |
210 | | - && (isNull(category) || StringUtils.containsIgnoreCase(application.getCategory(), category))) |
| 209 | + }).flatMap(application -> application.getCategory(applicationRecordService) |
| 210 | + .map(categoryValue -> Map.entry(application, categoryValue))) |
| 211 | + .filter(entry -> (isNull(applicationType) || applicationType == ApplicationType.ALL || entry.getKey().getApplicationType() == applicationType.getValue()) |
| 212 | + && (isNull(applicationStatus) || entry.getKey().getApplicationStatus() == applicationStatus) |
| 213 | + && (isNull(name) || StringUtils.containsIgnoreCase(entry.getKey().getName(), name)) |
| 214 | + && (isNull(category) || StringUtils.containsIgnoreCase(entry.getValue(), category))) |
| 215 | + .map(Map.Entry::getKey) |
211 | 216 | .cache() |
212 | 217 | .collectList() |
213 | 218 | .flatMapIterable(Function.identity()); |
@@ -563,36 +568,48 @@ public Flux<MarketplaceBundleInfoView> getAllAgencyProfileBundles() { |
563 | 568 |
|
564 | 569 | private Mono<ApplicationInfoView> buildView(Application application, ResourceRole maxRole, Map<String, User> userMap, @Nullable Instant lastViewTime, |
565 | 570 | Long bundlePosition, boolean withContainerSize) { |
566 | | - ApplicationInfoViewBuilder applicationInfoViewBuilder = ApplicationInfoView.builder() |
567 | | - .applicationId(application.getId()) |
568 | | - .applicationGid(application.getGid()) |
569 | | - .orgId(application.getOrganizationId()) |
570 | | - .name(application.getName()) |
571 | | - .title(application.getTitle()) |
572 | | - .description(application.getDescription()) |
573 | | - .category(application.getCategory()) |
574 | | - .createBy(Optional.ofNullable(userMap.get(application.getCreatedBy())) |
575 | | - .map(User::getName) |
576 | | - .orElse("")) |
577 | | - .createAt(application.getCreatedAt().toEpochMilli()) |
578 | | - .role(maxRole.getValue()) |
579 | | - .applicationType(application.getApplicationType()) |
580 | | - .applicationStatus(application.getApplicationStatus()) |
581 | | - .lastModifyTime(application.getUpdatedAt()) |
582 | | - .lastViewTime(lastViewTime) |
583 | | - .lastEditedAt(application.getLastEditedAt()) |
584 | | - .publicToAll(application.isPublicToAll()) |
585 | | - .publicToMarketplace(application.isPublicToMarketplace()) |
586 | | - .agencyProfile(application.agencyProfile()); |
587 | | - if (withContainerSize) { |
588 | | - return application.getLiveContainerSize(applicationRecordService).map(size -> applicationInfoViewBuilder |
589 | | - .containerSize(size) |
590 | | - .build()) |
591 | | - .switchIfEmpty(Mono.just(applicationInfoViewBuilder |
592 | | - .containerSize(null) |
593 | | - .build())); |
594 | | - } |
595 | | - return Mono.just(applicationInfoViewBuilder.build()); |
| 571 | + return application.getTitle(applicationRecordService) |
| 572 | + .zipWith(application.getDescription(applicationRecordService)) |
| 573 | + .zipWith(application.getCategory(applicationRecordService), TupleUtils::merge) |
| 574 | + .zipWith(application.getIcon(applicationRecordService), TupleUtils::merge) |
| 575 | + .zipWith(applicationRecordService.getLatestRecordByApplicationId(application.getId()).map(Optional::of).switchIfEmpty(Mono.just(Optional.empty())), TupleUtils::merge) |
| 576 | + .flatMap(tuple -> { |
| 577 | + Optional<ApplicationRecord> lastAppRecord = tuple.getT5(); |
| 578 | + ApplicationInfoView.ApplicationInfoViewBuilder applicationInfoViewBuilder = ApplicationInfoView.builder() |
| 579 | + .applicationId(application.getId()) |
| 580 | + .applicationGid(application.getGid()) |
| 581 | + .orgId(application.getOrganizationId()) |
| 582 | + .name(application.getName()) |
| 583 | + .title(tuple.getT1()) |
| 584 | + .description(tuple.getT2()) |
| 585 | + .category(tuple.getT3()) |
| 586 | + .icon(tuple.getT4()) |
| 587 | + .published(lastAppRecord.isPresent()) |
| 588 | + .publishedVersion(lastAppRecord.map(ApplicationRecord::version).orElse(null)) |
| 589 | + .lastPublishedTime(lastAppRecord.map(ApplicationRecord::getCreatedAt).orElse(null)) |
| 590 | + .createBy(Optional.ofNullable(userMap.get(application.getCreatedBy())) |
| 591 | + .map(User::getName) |
| 592 | + .orElse("")) |
| 593 | + .createAt(application.getCreatedAt().toEpochMilli()) |
| 594 | + .role(maxRole.getValue()) |
| 595 | + .applicationType(application.getApplicationType()) |
| 596 | + .applicationStatus(application.getApplicationStatus()) |
| 597 | + .lastModifyTime(application.getUpdatedAt()) |
| 598 | + .lastViewTime(lastViewTime) |
| 599 | + .lastEditedAt(application.getLastEditedAt()) |
| 600 | + .publicToAll(application.isPublicToAll()) |
| 601 | + .publicToMarketplace(application.isPublicToMarketplace()) |
| 602 | + .agencyProfile(application.agencyProfile()); |
| 603 | + if (withContainerSize) { |
| 604 | + return application.getLiveContainerSize(applicationRecordService).map(size -> applicationInfoViewBuilder |
| 605 | + .containerSize(size) |
| 606 | + .build()) |
| 607 | + .switchIfEmpty(Mono.just(applicationInfoViewBuilder |
| 608 | + .containerSize(null) |
| 609 | + .build())); |
| 610 | + } |
| 611 | + return Mono.just(applicationInfoViewBuilder.build()); |
| 612 | + }); |
596 | 613 | } |
597 | 614 |
|
598 | 615 | } |
0 commit comments