Skip to content

Commit c827ae3

Browse files
author
Thomas
committed
Create a GID and change ApplicationRepository to use GID.
1 parent 19defb6 commit c827ae3

File tree

6 files changed

+74
-16
lines changed

6 files changed

+74
-16
lines changed

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/model/Application.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66
import static org.lowcoder.domain.application.ApplicationUtil.getContainerSizeFromDSL;
77
import static org.lowcoder.domain.application.ApplicationUtil.getDependentModulesFromDsl;
88

9-
import java.util.Collections;
10-
import java.util.Map;
11-
import java.util.Optional;
12-
import java.util.Set;
9+
import java.util.*;
1310
import java.util.function.Supplier;
1411

12+
import lombok.Getter;
1513
import lombok.NoArgsConstructor;
1614
import lombok.Setter;
1715
import lombok.experimental.SuperBuilder;
@@ -37,7 +35,8 @@
3735
@SuperBuilder
3836
@NoArgsConstructor
3937
public class Application extends HasIdAndAuditing {
40-
38+
@Getter
39+
private String gid = UUID.randomUUID().toString();
4140
private String organizationId;
4241
private String name;
4342
private Integer applicationType;

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/repository/ApplicationRepository.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,29 +25,37 @@ public interface ApplicationRepository extends ReactiveMongoRepository<Applicati
2525
@Query(fields = "{ publishedApplicationDSL : 0 , editingApplicationDSL : 0 }")
2626
Mono<Application> findById(@Nonnull String id);
2727

28+
@Query(fields = "{ publishedApplicationDSL : 0 , editingApplicationDSL : 0 }")
29+
Flux<Application> findByGid(@Nonnull String gid);
30+
2831
Mono<Long> countByOrganizationIdAndApplicationStatus(String organizationId, ApplicationStatus applicationStatus);
2932

3033
@Query("{$or : [{'publishedApplicationDSL.queries.datasourceId':?0},{'editingApplicationDSL.queries.datasourceId':?0}]}")
3134
Flux<Application> findByDatasourceId(String datasourceId);
3235

3336
Flux<Application> findByIdIn(Collection<String> ids);
37+
Flux<Application> findByGidIn(Collection<String> ids);
3438

3539
Flux<Application> findByCreatedByAndIdIn(String userId, Collection<String> ids);
40+
Flux<Application> findByCreatedByAndGidIn(String userId, Collection<String> gids);
3641

3742
/**
3843
* Filter public applications from list of supplied IDs
3944
*/
4045
Flux<Application> findByPublicToAllIsTrueAndIdIn(Collection<String> ids);
46+
Flux<Application> findByPublicToAllIsTrueAndGidIn(Collection<String> gids);
4147

4248
/**
4349
* Filter marketplace applications from list of supplied IDs
4450
*/
4551
Flux<Application> findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndIdIn(Collection<String> ids);
52+
Flux<Application> findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndGidIn(Collection<String> ids);
4653

4754
/**
4855
* Filter agency applications from list of supplied IDs
4956
*/
5057
Flux<Application> findByPublicToAllIsTrueAndAgencyProfileIsTrueAndIdIn(Collection<String> ids);
58+
Flux<Application> findByPublicToAllIsTrueAndAgencyProfileIsTrueAndGidIn(Collection<String> ids);
5159

5260
/**
5361
* Find all marketplace applications

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/repository/CustomApplicationRepositoryImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.lowcoder.domain.application.repository;
22

33
import org.lowcoder.domain.application.model.Application;
4+
import org.lowcoder.sdk.constants.FieldName;
45
import org.springframework.beans.factory.annotation.Autowired;
56
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
67
import org.springframework.data.mongodb.core.query.Criteria;
@@ -25,6 +26,6 @@ public Flux<Application> findByOrganizationIdWithDsl(String organizationId) {
2526

2627
@Override
2728
public Mono<Application> findByIdWithDsl(String applicationId) {
28-
return reactiveMongoTemplate.findById(applicationId, Application.class);
29+
return reactiveMongoTemplate.findOne(new Query(Criteria.where(FieldName.guessFieldNameFromId(applicationId)).is(applicationId)), Application.class);
2930
}
3031
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public Mono<Application> findByIdWithoutDsl(String id) {
6161
return Mono.error(new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ID));
6262
}
6363

64+
if(FieldName.guessFieldNameFromId(id).equals(FieldName.GID))
65+
return Mono.from(repository.findByGid(id)).switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "CANT_FIND_APPLICATION", id)));
6466
return repository.findById(id)
6567
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "CANT_FIND_APPLICATION", id)));
6668
}
@@ -127,6 +129,9 @@ public Mono<Long> countByOrganizationId(String orgId, ApplicationStatus applicat
127129

128130
@Override
129131
public Flux<Application> findByIdIn(List<String> applicationIds) {
132+
if(applicationIds.isEmpty()) return Flux.empty();
133+
if(FieldName.guessFieldNameFromId(applicationIds.get(0)).equals(FieldName.GID))
134+
return repository.findByGidIn(applicationIds);
130135
return repository.findByIdIn(applicationIds);
131136
}
132137

@@ -257,9 +262,19 @@ public Mono<Set<String>> getFilteredPublicApplicationIds(ApplicationRequestType
257262
@SuppressWarnings("ReactiveStreamsNullableInLambdaInTransform")
258263
public Mono<Set<String>> getPublicApplicationIds(Collection<String> applicationIds) {
259264

265+
if(applicationIds.isEmpty())
266+
return repository.findByPublicToAllIsTrueAndIdIn(applicationIds)
267+
.map(HasIdAndAuditing::getId)
268+
.collect(Collectors.toSet());
269+
270+
if(FieldName.guessFieldNameFromId(applicationIds.stream().findFirst().get()).equals(FieldName.GID))
271+
return repository.findByPublicToAllIsTrueAndGidIn(applicationIds)
272+
.map(Application::getGid)
273+
.collect(Collectors.toSet());
274+
260275
return repository.findByPublicToAllIsTrueAndIdIn(applicationIds)
261-
.map(HasIdAndAuditing::getId)
262-
.collect(Collectors.toSet());
276+
.map(HasIdAndAuditing::getId)
277+
.collect(Collectors.toSet());
263278
}
264279

265280

@@ -272,13 +287,19 @@ public Mono<Set<String>> getPublicApplicationIds(Collection<String> applicationI
272287
public Mono<Set<String>> getPrivateApplicationIds(Collection<String> applicationIds, String userId) {
273288

274289
// TODO: in 2.4.0 we need to check whether the app was published or not
275-
return repository.findByCreatedByAndIdIn(userId, applicationIds)
276-
.map(HasIdAndAuditing::getId)
277-
.collect(Collectors.toSet());
290+
if(applicationIds.isEmpty())
291+
return repository.findByCreatedByAndIdIn(userId, applicationIds)
292+
.map(HasIdAndAuditing::getId)
293+
.collect(Collectors.toSet());
278294

279-
// return repository.findByIdIn(applicationIds)
280-
// .map(HasIdAndAuditing::getId)
281-
// .collect(Collectors.toSet());
295+
if(FieldName.guessFieldNameFromId(applicationIds.stream().findFirst().get()).equals(FieldName.GID))
296+
return repository.findByCreatedByAndGidIn(userId, applicationIds)
297+
.map(Application::getGid)
298+
.collect(Collectors.toSet());
299+
300+
return repository.findByCreatedByAndIdIn(userId, applicationIds)
301+
.map(HasIdAndAuditing::getId)
302+
.collect(Collectors.toSet());
282303
}
283304

284305

@@ -292,6 +313,16 @@ public Mono<Set<String>> getPublicMarketplaceApplicationIds(Collection<String> a
292313

293314
if ((isAnonymous && !isPrivateMarketplace) || !isAnonymous)
294315
{
316+
if(applicationIds.isEmpty())
317+
return repository.findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndIdIn(applicationIds)
318+
.map(HasIdAndAuditing::getId)
319+
.collect(Collectors.toSet());
320+
321+
if(FieldName.guessFieldNameFromId(applicationIds.stream().findFirst().get()).equals(FieldName.GID))
322+
return repository.findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndGidIn(applicationIds)
323+
.map(Application::getGid)
324+
.collect(Collectors.toSet());
325+
295326
return repository.findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndIdIn(applicationIds)
296327
.map(HasIdAndAuditing::getId)
297328
.collect(Collectors.toSet());
@@ -307,6 +338,16 @@ public Mono<Set<String>> getPublicMarketplaceApplicationIds(Collection<String> a
307338
@SuppressWarnings("ReactiveStreamsNullableInLambdaInTransform")
308339
public Mono<Set<String>> getPublicAgencyApplicationIds(Collection<String> applicationIds) {
309340

341+
if(applicationIds.isEmpty())
342+
return repository.findByPublicToAllIsTrueAndAgencyProfileIsTrueAndIdIn(applicationIds)
343+
.map(HasIdAndAuditing::getId)
344+
.collect(Collectors.toSet());
345+
346+
if(FieldName.guessFieldNameFromId(applicationIds.stream().findFirst().get()).equals(FieldName.GID))
347+
return repository.findByPublicToAllIsTrueAndAgencyProfileIsTrueAndGidIn(applicationIds)
348+
.map(Application::getGid)
349+
.collect(Collectors.toSet());
350+
310351
return repository.findByPublicToAllIsTrueAndAgencyProfileIsTrueAndIdIn(applicationIds)
311352
.map(HasIdAndAuditing::getId)
312353
.collect(Collectors.toSet());

server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/mongo/MongoUpsertHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class MongoUpsertHelper {
3939
private ApplicationEventPublisher applicationEventPublisher;
4040

4141
public <T extends HasIdAndAuditing> Mono<Boolean> updateById(T partialResource, String id) {
42-
return update(partialResource, FieldName.ID, id);
42+
return update(partialResource, FieldName.guessFieldNameFromId(id), id);
4343
}
4444

4545
public <T extends HasIdAndAuditing> Mono<Boolean> update(T partialResource, String uniqueKeyName, String uniqueKeyValue) {
@@ -69,7 +69,7 @@ public <T extends HasIdAndAuditing> Mono<Boolean> update(T partialResource, Quer
6969
}
7070

7171
public <T extends HasIdAndAuditing> Mono<Boolean> updatePurely(T partialResource, String id) {
72-
Query query = new Query(Criteria.where(FieldName.ID).is(id));
72+
Query query = new Query(Criteria.where(FieldName.guessFieldNameFromId(id)).is(id));
7373
return updatePurely(partialResource, query);
7474
}
7575

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
package org.lowcoder.sdk.constants;
22

3+
import io.micrometer.common.util.StringUtils;
4+
35
public class FieldName {
46

57
public static final String ORGANIZATION_ID = "organizationId";
68
public static final String NAME = "name";
79
public static final String ORGANIZATION = "organization";
810
public static final String ID = "id";
11+
public static final String GID = "gid";
912
public static final String USER = "user";
1013
public static final String ASSET = "asset";
1114

15+
public static String guessFieldNameFromId(String id) {
16+
if(StringUtils.isEmpty(id)) return ID;
17+
if(id.contains("-")) return GID;
18+
return ID;
19+
}
20+
1221
}

0 commit comments

Comments
 (0)