Skip to content

Commit 2e3fe02

Browse files
author
Thomasr
committed
add unique gid index
1 parent 00953a0 commit 2e3fe02

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@
77
import lombok.extern.slf4j.Slf4j;
88
import org.bson.Document;
99
import org.lowcoder.domain.application.model.Application;
10+
import org.lowcoder.domain.bundle.model.Bundle;
1011
import org.lowcoder.domain.datasource.model.Datasource;
1112
import org.lowcoder.domain.datasource.model.DatasourceStructureDO;
1213
import org.lowcoder.domain.datasource.model.TokenBasedConnection;
14+
import org.lowcoder.domain.folder.model.Folder;
1315
import org.lowcoder.domain.group.model.Group;
1416
import org.lowcoder.domain.group.model.QGroup;
1517
import org.lowcoder.domain.material.model.MaterialMeta;
1618
import org.lowcoder.domain.organization.model.Organization;
19+
import org.lowcoder.domain.query.model.ApplicationQuery;
1720
import org.lowcoder.domain.query.model.LibraryQuery;
1821
import org.lowcoder.domain.query.model.LibraryQueryRecord;
1922
import org.lowcoder.domain.user.model.User;
@@ -243,6 +246,31 @@ public void processDocument(Document document) {
243246
});
244247
}
245248

249+
@ChangeSet(order = "024", id = "add-gid-indexes-unique", author = "")
250+
public void addGidIndexesUnique(MongockTemplate mongoTemplate) {
251+
// collections to add gid
252+
String[] collectionNames = {"group", "organization"};
253+
254+
// Get the list of existing collections
255+
Set<String> existingCollections = mongoTemplate.getCollectionNames();
256+
257+
for (String collectionName : collectionNames) {
258+
if (existingCollections.contains(collectionName)) {
259+
addGidField(mongoTemplate, collectionName);
260+
} else {
261+
System.out.println("Collection " + collectionName + " does not exist.");
262+
}
263+
}
264+
265+
ensureIndexes(mongoTemplate, Application.class, makeIndex("gid").unique());
266+
ensureIndexes(mongoTemplate, Datasource.class, makeIndex("gid").unique());
267+
ensureIndexes(mongoTemplate, Bundle.class, makeIndex("gid").unique());
268+
ensureIndexes(mongoTemplate, Folder.class, makeIndex("gid").unique());
269+
ensureIndexes(mongoTemplate, Group.class, makeIndex("gid").unique());
270+
ensureIndexes(mongoTemplate, Organization.class, makeIndex("gid").unique());
271+
ensureIndexes(mongoTemplate, LibraryQuery.class, makeIndex("gid").unique());
272+
}
273+
246274
private void addGidField(MongockTemplate mongoTemplate, String collectionName) {
247275
// Create a query to match all documents
248276
Query query = new Query();
@@ -262,7 +290,7 @@ public void processDocument(Document document) {
262290
update.set("gid", uniqueGid);
263291

264292
// Create a query to match the current document by its _id
265-
Query idQuery = new Query(Criteria.where("_id").is(document.getObjectId("_id")));
293+
Query idQuery = new Query(Criteria.where("_id").is(document.getObjectId("_id")).andOperator(Criteria.where("gid").isNull()));
266294

267295
// Update the document with the new 'gid' field
268296
mongoTemplate.updateFirst(idQuery, update, collectionName);

0 commit comments

Comments
 (0)