Skip to content

Commit a8e8b9a

Browse files
authored
Merge pull request #960 from th37rose/feature/gid
Introduce GID(UUID) to all objects in the database
2 parents db1a528 + b3308a3 commit a8e8b9a

File tree

40 files changed

+376
-305
lines changed

40 files changed

+376
-305
lines changed

server/api-service/lowcoder-domain/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,11 @@
262262
<artifactId>jaxb-runtime</artifactId>
263263
</dependency>
264264
<!-- oss-->
265+
<dependency>
266+
<groupId>com.github.f4b6a3</groupId>
267+
<artifactId>uuid-creator</artifactId>
268+
<version>5.2.0</version>
269+
</dependency>
265270
</dependencies>
266271

267272
<build>

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
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 com.github.f4b6a3.uuid.UuidCreator;
13+
import lombok.Getter;
1514
import lombok.NoArgsConstructor;
1615
import lombok.Setter;
1716
import lombok.experimental.SuperBuilder;
@@ -37,7 +36,8 @@
3736
@SuperBuilder
3837
@NoArgsConstructor
3938
public class Application extends HasIdAndAuditing {
40-
39+
@Getter
40+
private String gid;
4141
private String organizationId;
4242
private String name;
4343
private Integer applicationType;
@@ -64,6 +64,7 @@ public Application(
6464
@JsonProperty("publicToMarketplace") Boolean publicToMarketplace,
6565
@JsonProperty("agencyProfile") Boolean agencyProfile
6666
) {
67+
this.gid = UuidCreator.getTimeOrderedEpoch().toString();
6768
this.organizationId = organizationId;
6869
this.name = name;
6970
this.applicationType = 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: 27 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.isGID(id))
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,8 @@ public Mono<Long> countByOrganizationId(String orgId, ApplicationStatus applicat
127129

128130
@Override
129131
public Flux<Application> findByIdIn(List<String> applicationIds) {
132+
if(!applicationIds.isEmpty() && FieldName.isGID(applicationIds.get(0)))
133+
return repository.findByGidIn(applicationIds);
130134
return repository.findByIdIn(applicationIds);
131135
}
132136

@@ -256,10 +260,14 @@ public Mono<Set<String>> getFilteredPublicApplicationIds(ApplicationRequestType
256260
@NonEmptyMono
257261
@SuppressWarnings("ReactiveStreamsNullableInLambdaInTransform")
258262
public Mono<Set<String>> getPublicApplicationIds(Collection<String> applicationIds) {
263+
if(!applicationIds.isEmpty() && FieldName.isGID(applicationIds.stream().findFirst().get()))
264+
return repository.findByPublicToAllIsTrueAndGidIn(applicationIds)
265+
.map(Application::getGid)
266+
.collect(Collectors.toSet());
259267

260268
return repository.findByPublicToAllIsTrueAndIdIn(applicationIds)
261-
.map(HasIdAndAuditing::getId)
262-
.collect(Collectors.toSet());
269+
.map(HasIdAndAuditing::getId)
270+
.collect(Collectors.toSet());
263271
}
264272

265273

@@ -272,13 +280,14 @@ public Mono<Set<String>> getPublicApplicationIds(Collection<String> applicationI
272280
public Mono<Set<String>> getPrivateApplicationIds(Collection<String> applicationIds, String userId) {
273281

274282
// 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());
283+
if(!applicationIds.isEmpty() && FieldName.isGID(applicationIds.stream().findFirst().get()))
284+
return repository.findByCreatedByAndGidIn(userId, applicationIds)
285+
.map(Application::getGid)
286+
.collect(Collectors.toSet());
278287

279-
// return repository.findByIdIn(applicationIds)
280-
// .map(HasIdAndAuditing::getId)
281-
// .collect(Collectors.toSet());
288+
return repository.findByCreatedByAndIdIn(userId, applicationIds)
289+
.map(HasIdAndAuditing::getId)
290+
.collect(Collectors.toSet());
282291
}
283292

284293

@@ -292,6 +301,11 @@ public Mono<Set<String>> getPublicMarketplaceApplicationIds(Collection<String> a
292301

293302
if ((isAnonymous && !isPrivateMarketplace) || !isAnonymous)
294303
{
304+
if(!applicationIds.isEmpty() && FieldName.isGID(applicationIds.stream().findFirst().get()))
305+
return repository.findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndGidIn(applicationIds)
306+
.map(Application::getGid)
307+
.collect(Collectors.toSet());
308+
295309
return repository.findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndIdIn(applicationIds)
296310
.map(HasIdAndAuditing::getId)
297311
.collect(Collectors.toSet());
@@ -307,6 +321,11 @@ public Mono<Set<String>> getPublicMarketplaceApplicationIds(Collection<String> a
307321
@SuppressWarnings("ReactiveStreamsNullableInLambdaInTransform")
308322
public Mono<Set<String>> getPublicAgencyApplicationIds(Collection<String> applicationIds) {
309323

324+
if(!applicationIds.isEmpty() && FieldName.isGID(applicationIds.stream().findFirst().get()))
325+
return repository.findByPublicToAllIsTrueAndAgencyProfileIsTrueAndGidIn(applicationIds)
326+
.map(Application::getGid)
327+
.collect(Collectors.toSet());
328+
310329
return repository.findByPublicToAllIsTrueAndAgencyProfileIsTrueAndIdIn(applicationIds)
311330
.map(HasIdAndAuditing::getId)
312331
.collect(Collectors.toSet());

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/bundle/model/Bundle.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.lowcoder.domain.bundle.model;
22

33

4+
import com.github.f4b6a3.uuid.UuidCreator;
45
import jakarta.annotation.Nullable;
56
import lombok.Getter;
67
import lombok.NoArgsConstructor;
@@ -10,6 +11,8 @@
1011
import org.lowcoder.sdk.models.HasIdAndAuditing;
1112
import org.springframework.data.mongodb.core.mapping.Document;
1213

14+
import java.util.UUID;
15+
1316
import java.util.Map;
1417

1518
@Getter
@@ -18,6 +21,8 @@
1821
@NoArgsConstructor
1922
@SuperBuilder
2023
public class Bundle extends HasIdAndAuditing {
24+
@Getter
25+
private String gid;
2126
private String organizationId;
2227
@Nullable
2328
private String name;

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/bundle/repository/BundleRepository.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,37 @@
11
package org.lowcoder.domain.bundle.repository;
22

3+
import jakarta.annotation.Nonnull;
34
import org.lowcoder.domain.bundle.model.Bundle;
45
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
56
import org.springframework.stereotype.Repository;
67
import reactor.core.publisher.Flux;
8+
import reactor.core.publisher.Mono;
79

810
import java.util.Collection;
911

1012
@Repository
1113
public interface BundleRepository extends ReactiveMongoRepository<Bundle, String> {
14+
Mono<Void> deleteAllByGid(Collection<String> gids);
15+
Flux<Bundle> findByGid(@Nonnull String gid);
1216

1317
Flux<Bundle> findByCreatedBy(String userId);
1418
/**
1519
* Filter marketplace bundles from list of supplied IDs
1620
*/
1721
Flux<Bundle> findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndIdIn(Collection<String> ids);
22+
Flux<Bundle> findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndGidIn(Collection<String> gids);
1823
/**
1924
* Filter public bundles from list of supplied IDs
2025
*/
2126
Flux<Bundle> findByPublicToAllIsTrueAndIdIn(Collection<String> ids);
27+
Flux<Bundle> findByPublicToAllIsTrueAndGidIn(Collection<String> gids);
2228
Flux<Bundle> findByCreatedByAndIdIn(String userId, Collection<String> ids);
29+
Flux<Bundle> findByCreatedByAndGidIn(String userId, Collection<String> gids);
2330
/**
2431
* Filter agency bundles from list of supplied IDs
2532
*/
2633
Flux<Bundle> findByPublicToAllIsTrueAndAgencyProfileIsTrueAndIdIn(Collection<String> ids);
34+
Flux<Bundle> findByPublicToAllIsTrueAndAgencyProfileIsTrueAndGidIn(Collection<String> gids);
2735

2836
Flux<Bundle> findByPublicToAllIsTrueAndPublicToMarketplaceIsTrue();
2937

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/bundle/service/BundleServiceImpl.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public Mono<Bundle> findById(String id) {
4848
return Mono.error(new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ID));
4949
}
5050

51+
if(FieldName.isGID(id))
52+
return Mono.from(repository.findByGid(id))
53+
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "BUNDLE_NOT_FOUND", id)));
54+
5155
return repository.findById(id)
5256
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "BUNDLE_NOT_FOUND", id)));
5357
}
@@ -75,6 +79,8 @@ public Flux<Bundle> findByUserId(String userId) {
7579

7680
@Override
7781
public Mono<Void> deleteAllById(Collection<String> ids) {
82+
if(!ids.isEmpty() && FieldName.isGID(ids.stream().findFirst().get()))
83+
return repository.deleteAllByGid(ids);
7884
return repository.deleteAllById(ids);
7985
}
8086

@@ -138,6 +144,11 @@ public Mono<Set<String>> getFilteredPublicBundleIds(BundleRequestType requestTyp
138144
@SuppressWarnings("ReactiveStreamsNullableInLambdaInTransform")
139145
public Mono<Set<String>> getPublicBundleIds(Collection<String> bundleIds) {
140146

147+
if(!bundleIds.isEmpty() && FieldName.isGID(bundleIds.stream().findFirst().get()))
148+
return repository.findByPublicToAllIsTrueAndGidIn(bundleIds)
149+
.map(Bundle::getGid)
150+
.collect(Collectors.toSet());
151+
141152
return repository.findByPublicToAllIsTrueAndIdIn(bundleIds)
142153
.map(HasIdAndAuditing::getId)
143154
.collect(Collectors.toSet());
@@ -153,6 +164,10 @@ public Mono<Set<String>> getPublicBundleIds(Collection<String> bundleIds) {
153164
public Mono<Set<String>> getPrivateBundleIds(Collection<String> bundleIds, String userId) {
154165

155166
// TODO: in 2.4.0 we need to check whether the app was published or not
167+
if(!bundleIds.isEmpty() && FieldName.isGID(bundleIds.stream().findFirst().get()))
168+
return repository.findByCreatedByAndGidIn(userId, bundleIds)
169+
.map(Bundle::getGid)
170+
.collect(Collectors.toSet());
156171
return repository.findByCreatedByAndIdIn(userId, bundleIds)
157172
.map(HasIdAndAuditing::getId)
158173
.collect(Collectors.toSet());
@@ -173,6 +188,11 @@ public Mono<Set<String>> getPublicMarketplaceBundleIds(Collection<String> bundle
173188

174189
if (!isAnonymous || !isPrivateMarketplace)
175190
{
191+
if(!bundleIds.isEmpty() && FieldName.isGID(bundleIds.stream().findFirst().get()))
192+
return repository.findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndGidIn(bundleIds)
193+
.map(Bundle::getGid)
194+
.collect(Collectors.toSet());
195+
176196
return repository.findByPublicToAllIsTrueAndPublicToMarketplaceIsTrueAndIdIn(bundleIds)
177197
.map(HasIdAndAuditing::getId)
178198
.collect(Collectors.toSet());
@@ -188,6 +208,11 @@ public Mono<Set<String>> getPublicMarketplaceBundleIds(Collection<String> bundle
188208
@SuppressWarnings("ReactiveStreamsNullableInLambdaInTransform")
189209
public Mono<Set<String>> getPublicAgencyBundleIds(Collection<String> bundleIds) {
190210

211+
if(!bundleIds.isEmpty() && FieldName.isGID(bundleIds.stream().findFirst().get()))
212+
return repository.findByPublicToAllIsTrueAndAgencyProfileIsTrueAndGidIn(bundleIds)
213+
.map(Bundle::getGid)
214+
.collect(Collectors.toSet());
215+
191216
return repository.findByPublicToAllIsTrueAndAgencyProfileIsTrueAndIdIn(bundleIds)
192217
.map(HasIdAndAuditing::getId)
193218
.collect(Collectors.toSet());

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/folder/model/Folder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.lowcoder.domain.folder.model;
22

33

4+
import com.github.f4b6a3.uuid.UuidCreator;
45
import jakarta.annotation.Nullable;
56
import lombok.Getter;
67
import lombok.NoArgsConstructor;
@@ -15,8 +16,10 @@
1516
public class Folder extends HasIdAndAuditing {
1617

1718
private String organizationId;
19+
private String gid;
1820
@Nullable
1921
private String parentFolderId; // null represents folder in the root folder
22+
private String parentFolderGid; // null represents folder in the root folder
2023
private String name;
2124
private String title;
2225
private String description;

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/folder/repository/FolderRepository.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@
55
import org.springframework.stereotype.Repository;
66

77
import reactor.core.publisher.Flux;
8+
import reactor.core.publisher.Mono;
9+
10+
import java.util.Collection;
811

912
@Repository
1013
public interface FolderRepository extends ReactiveMongoRepository<Folder, String> {
1114

1215
Flux<Folder> findByOrganizationId(String organizationId);
16+
Mono<Folder> findByGid(String organizationGid);
17+
Mono<Void> deleteAllByGid(Collection<String> gids);
1318
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/folder/service/FolderServiceImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ public Mono<Folder> findById(String id) {
3939
return Mono.error(new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ID));
4040
}
4141

42+
if(FieldName.isGID(id))
43+
return repository.findByGid(id)
44+
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "FOLDER_NOT_FOUND", id)));
4245
return repository.findById(id)
4346
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "FOLDER_NOT_FOUND", id)));
4447
}
@@ -55,6 +58,8 @@ public Flux<Folder> findByOrganizationId(String organizationId) {
5558

5659
@Override
5760
public Mono<Void> deleteAllById(Collection<String> ids) {
61+
if(!ids.isEmpty() && FieldName.isGID(ids.stream().findFirst().get()))
62+
return repository.deleteAllByGid(ids);
5863
return repository.deleteAllById(ids);
5964
}
6065

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/model/Organization.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
1010
import com.fasterxml.jackson.annotation.JsonView;
11+
import com.github.f4b6a3.uuid.UuidCreator;
1112
import lombok.experimental.SuperBuilder;
1213
import lombok.extern.jackson.Jacksonized;
1314
import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -37,6 +38,8 @@
3738
public class Organization extends HasIdAndAuditing implements BeforeMongodbWrite, AfterMongodbRead {
3839

3940
private static final OrganizationCommonSettings EMPTY_SETTINGS = new OrganizationCommonSettings();
41+
@Getter
42+
private String gid;
4043

4144
private String name;
4245

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ public interface OrganizationRepository extends ReactiveMongoRepository<Organiza
1515
Mono<Organization> findFirstByStateMatches(OrganizationState state);
1616

1717
Flux<Organization> findByIdInAndState(Collection<String> id, OrganizationState state);
18+
Flux<Organization> findByGidInAndState(Collection<String> gid, OrganizationState state);
1819

1920
Mono<Organization> findByIdAndState(String id, OrganizationState state);
21+
Mono<Organization> findByGidAndState(String gid, OrganizationState state);
2022

2123
Mono<Organization> findBySourceAndThirdPartyCompanyIdAndState(String source, String tpCompanyId, OrganizationState state);
2224

0 commit comments

Comments
 (0)