Content-Length: 16099 | pFad | http://github.com/lowcoder-org/lowcoder/pull/1407.diff
thub.com
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/repository/ApplicationRepository.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/repository/ApplicationRepository.java
index 4a984b8da..c320dc0c9 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/repository/ApplicationRepository.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/repository/ApplicationRepository.java
@@ -29,6 +29,9 @@ public interface ApplicationRepository extends ReactiveMongoRepository findByGid(@Nonnull String gid);
+ @Aggregation(pipeline = {"{ $match: { slug: ?0 } }", "{ $project: { 'editingApplicationDSL.settings': 1, _id: 1, gid: 1, organizationId: 1, name: 1, applicationType: 1, applicationStatus: 1, publicToAll: 1, publicToMarketplace: 1, agencyProfile: 1, editingUserId: 1, lastEditedAt: 1, createdAt: 1, updatedAt: 1, createdBy: 1, modifiedBy: 1, _class: 1}}"})
+ Flux findBySlug(@Nonnull String slug);
+
Mono countByOrganizationIdAndApplicationStatus(String organizationId, ApplicationStatus applicationStatus);
@Query("{$or : [{'publishedApplicationDSL.queries.datasourceId':?0},{'editingApplicationDSL.queries.datasourceId':?0}]}")
@@ -36,9 +39,11 @@ public interface ApplicationRepository extends ReactiveMongoRepository findByIdIn(Collection ids);
Flux findByGidIn(Collection ids);
+ Flux findBySlugIn(Collection slugs);
Flux findByCreatedByAndIdIn(String userId, Collection ids);
Flux findByCreatedByAndGidIn(String userId, Collection gids);
+ Flux findByCreatedByAndSlugIn(String userId, Collection slugs);
/**
* Filter public applications from list of supplied IDs
@@ -67,6 +72,8 @@ public interface ApplicationRepository extends ReactiveMongoRepository findByPublicToAllIsTrueAndAgencyProfileIsTrue();
- Mono existsBySlug(String slug);
+
+ @Query("{ 'organizationId': ?0, 'slug': ?1 }")
+ Mono existsByOrganizationIdAndSlug(String organizationId, String slug);
}
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java
index 3b3be763a..e8fc4b791 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java
@@ -18,6 +18,7 @@
import org.lowcoder.domain.permission.model.ResourceType;
import org.lowcoder.domain.permission.service.ResourcePermissionService;
import org.lowcoder.domain.user.repository.UserRepository;
+import org.lowcoder.domain.util.SlugUtils;
import org.lowcoder.infra.annotation.NonEmptyMono;
import org.lowcoder.infra.mongo.MongoUpsertHelper;
import org.lowcoder.sdk.constants.FieldName;
@@ -60,9 +61,13 @@ public Mono findByIdWithoutDsl(String id) {
return Mono.error(new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ID));
}
- if(FieldName.isGID(id))
- return Mono.from(repository.findByGid(id)).switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "CANT_FIND_APPLICATION", id)));
- return repository.findById(id)
+ return Mono.from(repository.findBySlug(id))
+ .switchIfEmpty(
+ Mono.defer(() -> {
+ if (FieldName.isGID(id))
+ return Mono.from(repository.findByGid(id));
+ return repository.findById(id);
+ }))
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "CANT_FIND_APPLICATION", id)));
}
@@ -123,7 +128,7 @@ public Mono countByOrganizationId(String orgId, ApplicationStatus applicat
public Flux findByIdIn(List applicationIds) {
if(!applicationIds.isEmpty() && FieldName.isGID(applicationIds.get(0)))
return repository.findByGidIn(applicationIds);
- return repository.findByIdIn(applicationIds);
+ return repository.findBySlugIn(applicationIds).switchIfEmpty(repository.findByIdIn(applicationIds));
}
@Override
@@ -279,7 +284,7 @@ public Mono> getPrivateApplicationIds(Collection application
.map(Application::getGid)
.collect(Collectors.toSet());
- return repository.findByCreatedByAndIdIn(userId, applicationIds)
+ return repository.findByCreatedByAndSlugIn(userId, applicationIds).switchIfEmpty(repository.findByCreatedByAndIdIn(userId, applicationIds))
.map(HasIdAndAuditing::getId)
.collect(Collectors.toSet());
}
@@ -349,15 +354,15 @@ public Mono