Skip to content

Commit 4cfe3d5

Browse files
committed
add collection group support
1 parent 0dbb37e commit 4cfe3d5

File tree

2 files changed

+23
-17
lines changed

2 files changed

+23
-17
lines changed
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package in.kuros.jfirebase.provider.firebase;
22

3-
import com.google.cloud.firestore.CollectionReference;
43
import com.google.cloud.firestore.Firestore;
54
import in.kuros.jfirebase.provider.firebase.query.QueryBuilder;
65
import in.kuros.jfirebase.query.Query;
@@ -10,7 +9,9 @@ public class QueryAdapter {
109
public static <T> com.google.cloud.firestore.Query toFirebaseQuery(final Firestore firestore, final Query<T> query) {
1110
final QueryBuilder<T> queryBuilder = (QueryBuilder<T>) query;
1211
final String path = queryBuilder.getPath();
13-
final CollectionReference collectionReference = firestore.collection(path);
14-
return queryBuilder.build(collectionReference);
12+
if (queryBuilder.isCollectionGroup()) {
13+
return queryBuilder.build(firestore.collectionGroup(path));
14+
}
15+
return queryBuilder.build(firestore.collection(path));
1516
}
1617
}

src/main/java/in/kuros/jfirebase/provider/firebase/query/QueryBuilder.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,53 +3,58 @@
33
import com.google.common.collect.Lists;
44
import in.kuros.jfirebase.metadata.Attribute;
55
import in.kuros.jfirebase.metadata.AttributeValue;
6-
import in.kuros.jfirebase.metadata.UpdateAttribute;
76
import in.kuros.jfirebase.provider.firebase.AttributeValueHelper;
87
import in.kuros.jfirebase.provider.firebase.EntityHelper;
98
import lombok.Getter;
109

11-
import java.util.Arrays;
1210
import java.util.List;
1311
import java.util.Objects;
1412

1513
public final class QueryBuilder<T> extends QueryImpl<T> {
1614
@Getter private final String path;
1715
@Getter private Class<T> resultType;
16+
@Getter private boolean collectionGroup;
1817
private final AttributeValueHelper attributeValueHelper;
1918

2019
@SuppressWarnings("unchecked")
21-
private QueryBuilder(final Class<T> type) {
22-
this(getCollectionName(type), type);
23-
}
2420

25-
private QueryBuilder(final String path, final Class<T> resultType) {
21+
private QueryBuilder(final String path, final Class<T> resultType, final boolean collectionGroup) {
2622
this.path = path;
2723
this.resultType = resultType;
2824
this.attributeValueHelper = new AttributeValueHelper();
25+
this.collectionGroup = collectionGroup;
2926
}
3027

3128
public static <S> QueryBuilder<S> collection(final Class<S> type) {
32-
return new QueryBuilder<>(type);
29+
return new QueryBuilder<>(getCollectionName(type), type, false);
3330
}
3431

3532
public static <S> QueryBuilder<S> collection(final String path, final Class<S> resultType) {
36-
return new QueryBuilder<>(path, resultType);
33+
return new QueryBuilder<>(path, resultType, false);
34+
}
35+
36+
public static <S> QueryBuilder<S> collectionGroup(final Class<S> type) {
37+
return new QueryBuilder<>(getCollectionName(type), type, true);
38+
}
39+
40+
public static <S> QueryBuilder<S> collectionGroup(final String path, final Class<S> resultType) {
41+
return new QueryBuilder<>(path, resultType, true);
3742
}
3843

3944
public <S> QueryBuilder<S> subCollection(final Class<S> type) {
40-
return new QueryBuilder<>(path + "/" + getCollectionName(type), type);
45+
return new QueryBuilder<>(path + "/" + getCollectionName(type), type, collectionGroup);
4146
}
4247

4348
public <S> QueryBuilder<S> subCollection(final String collection, final Class<S> resultClass) {
44-
return new QueryBuilder<>(path + "/" + collection, resultClass);
49+
return new QueryBuilder<>(path + "/" + collection, resultClass, collectionGroup);
4550
}
4651

4752
public QueryBuilder<T> withId(final String id) {
48-
return new QueryBuilder<>(path + "/" + id, resultType);
53+
return new QueryBuilder<>(path + "/" + id, resultType, collectionGroup);
4954
}
5055

5156
public QueryBuilder<T> withPath(final String pathValue) {
52-
return new QueryBuilder<>(path + pathValue, resultType);
57+
return new QueryBuilder<>(path + pathValue, resultType, collectionGroup);
5358
}
5459

5560
@SuppressWarnings("unchecked")
@@ -65,11 +70,11 @@ public static <T> QueryBuilder<T> withKeys(List<AttributeValue<T, ?>> attributeV
6570
final T entity = attributeValueHelper.createEntity(attributeValues);
6671
final String documentPath = EntityHelper.INSTANCE.getDocumentPath(entity);
6772

68-
return new QueryBuilder<>(documentPath, attributeValues.get(0).getAttribute().getDeclaringType());
73+
return new QueryBuilder<>(documentPath, attributeValues.get(0).getAttribute().getDeclaringType(), false);
6974
}
7075

7176
public <S> QueryBuilder<S> resultType(final Class<S> resultClass) {
72-
return new QueryBuilder<>(path, resultClass);
77+
return new QueryBuilder<>(path, resultClass, collectionGroup);
7378
}
7479

7580
private static String getCollectionName(final Class<?> type) {

0 commit comments

Comments
 (0)