|
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