Skip to content

Commit b41bda0

Browse files
Schema changes to get entities count for labels (#122)
1 parent 4a365d6 commit b41bda0

11 files changed

Lines changed: 112 additions & 15 deletions

File tree

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package org.hypertrace.graphql.label.request;
22

33
import org.hypertrace.core.graphql.common.request.ContextualRequest;
4-
import org.hypertrace.graphql.label.schema.Label;
4+
import org.hypertrace.graphql.label.schema.mutation.UpdateLabel;
55

66
public interface LabelUpdateRequest extends ContextualRequest {
7-
Label label();
7+
UpdateLabel label();
88
}

hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/Label.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import org.hypertrace.core.graphql.common.schema.id.Identifiable;
55

66
@GraphQLName(Label.TYPE_NAME)
7-
public interface Label extends Identifiable, LabelData {
7+
public interface Label extends Identifiable, LabelData, LabeledEntities {
88
String TYPE_NAME = "Label";
99
String ARGUMENT_NAME = "label";
1010
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.hypertrace.graphql.label.schema;
2+
3+
import graphql.annotations.annotationTypes.GraphQLField;
4+
import graphql.annotations.annotationTypes.GraphQLName;
5+
import graphql.annotations.annotationTypes.GraphQLNonNull;
6+
import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument;
7+
8+
@GraphQLName(LabeledEntities.TYPE_NAME)
9+
public interface LabeledEntities {
10+
String TYPE_NAME = "LabeledEntities";
11+
String LABELED_ENTITIES_QUERY_NAME = "labeledEntities";
12+
String ENTITY_TYPE_ARGUMENT_NAME = "type";
13+
14+
@GraphQLField
15+
@GraphQLNonNull
16+
@GraphQLName(LABELED_ENTITIES_QUERY_NAME)
17+
LabeledEntityResultSet labeledEntities(
18+
@GraphQLNonNull @GraphQLName(ENTITY_TYPE_ARGUMENT_NAME) String entityType,
19+
@GraphQLName(LimitArgument.ARGUMENT_NAME) int limit);
20+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.hypertrace.graphql.label.schema;
2+
3+
import graphql.annotations.annotationTypes.GraphQLName;
4+
import org.hypertrace.core.graphql.common.schema.attributes.AttributeQueryable;
5+
import org.hypertrace.core.graphql.common.schema.id.Identifiable;
6+
7+
@GraphQLName(LabeledEntity.TYPE_NAME)
8+
public interface LabeledEntity extends AttributeQueryable, Identifiable {
9+
String TYPE_NAME = "LabeledEntity";
10+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.hypertrace.graphql.label.schema;
2+
3+
import graphql.annotations.annotationTypes.GraphQLField;
4+
import graphql.annotations.annotationTypes.GraphQLName;
5+
import graphql.annotations.annotationTypes.GraphQLNonNull;
6+
import java.util.List;
7+
import org.hypertrace.core.graphql.common.schema.results.ResultSet;
8+
9+
@GraphQLName(LabeledEntityResultSet.TYPE_NAME)
10+
public interface LabeledEntityResultSet extends ResultSet<LabeledEntity> {
11+
String TYPE_NAME = "LabeledEntityResultSet";
12+
13+
@Override
14+
@GraphQLField
15+
@GraphQLNonNull
16+
@GraphQLName(RESULT_SET_RESULTS_NAME)
17+
List<LabeledEntity> results();
18+
}

hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/mutation/LabelMutationSchema.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ public interface LabelMutationSchema {
2222
@GraphQLNonNull
2323
@GraphQLName(UPDATE_LABEL)
2424
@GraphQLDataFetcher(LabelUpdateMutator.class)
25-
Label updateLabel(@GraphQLNonNull @GraphQLName(Label.ARGUMENT_NAME) Label label);
25+
Label updateLabel(@GraphQLNonNull @GraphQLName(Label.ARGUMENT_NAME) UpdateLabel label);
2626
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.hypertrace.graphql.label.schema.mutation;
2+
3+
import graphql.annotations.annotationTypes.GraphQLName;
4+
import org.hypertrace.core.graphql.common.schema.id.Identifiable;
5+
import org.hypertrace.graphql.label.schema.LabelData;
6+
7+
@GraphQLName(UpdateLabel.TYPE_NAME)
8+
public interface UpdateLabel extends Identifiable, LabelData {
9+
String TYPE_NAME = "UpdateLabel";
10+
String ARGUMENT_NAME = "label";
11+
}

hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelResponseConverter.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package org.hypertrace.graphql.label.dao;
22

33
import io.reactivex.rxjava3.core.Single;
4+
import java.util.Collections;
45
import java.util.List;
6+
import java.util.Map;
7+
import java.util.Optional;
58
import java.util.stream.Collectors;
69
import lombok.Value;
710
import lombok.experimental.Accessors;
811
import org.hypertrace.graphql.label.schema.Label;
912
import org.hypertrace.graphql.label.schema.LabelResultSet;
13+
import org.hypertrace.graphql.label.schema.LabeledEntity;
14+
import org.hypertrace.graphql.label.schema.LabeledEntityResultSet;
1015
import org.hypertrace.label.config.service.v1.CreateLabelResponse;
1116
import org.hypertrace.label.config.service.v1.GetLabelsResponse;
1217
import org.hypertrace.label.config.service.v1.UpdateLabelResponse;
@@ -42,7 +47,8 @@ private Label convertLabel(org.hypertrace.label.config.service.v1.Label label) {
4247
label.getId(),
4348
label.getData().getKey(),
4449
label.getData().hasColor() ? label.getData().getColor() : null,
45-
label.getData().hasDescription() ? label.getData().getDescription() : null);
50+
label.getData().hasDescription() ? label.getData().getDescription() : null,
51+
Collections.emptyMap());
4652
}
4753

4854
@Value
@@ -60,5 +66,36 @@ private static class DefaultLabel implements Label {
6066
String key;
6167
String color;
6268
String description;
69+
Map<String, List<LabeledEntity>> labeledEntitiesMap;
70+
71+
@Override
72+
public LabeledEntityResultSet labeledEntities(String entityType, int limit) {
73+
List<LabeledEntity> labeledEntities =
74+
Optional.ofNullable(labeledEntitiesMap.get(entityType)).orElse(Collections.emptyList());
75+
List<LabeledEntity> labeledEntitiesWithLimit =
76+
labeledEntities.size() > limit ? labeledEntities.subList(0, limit) : labeledEntities;
77+
return new DefaultLabeledEntityResultSet(
78+
labeledEntitiesWithLimit, labeledEntitiesWithLimit.size(), labeledEntities.size());
79+
}
80+
}
81+
82+
@Value
83+
@Accessors(fluent = true)
84+
private static class DefaultLabeledEntityResultSet implements LabeledEntityResultSet {
85+
List<LabeledEntity> results;
86+
long count;
87+
long total;
88+
}
89+
90+
@Value
91+
@Accessors(fluent = true)
92+
private static class DefaultLabeledEntity implements LabeledEntity {
93+
String id;
94+
Map<String, Object> attributeValues;
95+
96+
@Override
97+
public Object attribute(String key) {
98+
return this.attributeValues.get(key);
99+
}
63100
}
64101
}

hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelDeserializationModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ protected void configure() {
1111
Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class);
1212

1313
deserializationConfigBinder.addBinding().to(CreateLabelDeserializationConfig.class);
14-
deserializationConfigBinder.addBinding().to(LabelDeserializationConfig.class);
14+
deserializationConfigBinder.addBinding().to(UpdateLabelDeserializationConfig.class);
1515
}
1616
}

hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelDeserializationConfig.java renamed to hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/UpdateLabelDeserializationConfig.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,30 @@
88
import lombok.Value;
99
import lombok.experimental.Accessors;
1010
import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig;
11-
import org.hypertrace.graphql.label.schema.Label;
11+
import org.hypertrace.graphql.label.schema.mutation.UpdateLabel;
1212

13-
public class LabelDeserializationConfig implements ArgumentDeserializationConfig {
13+
public class UpdateLabelDeserializationConfig implements ArgumentDeserializationConfig {
1414

1515
@Override
1616
public String getArgumentKey() {
17-
return Label.ARGUMENT_NAME;
17+
return UpdateLabel.ARGUMENT_NAME;
1818
}
1919

2020
@Override
2121
public Class<?> getArgumentSchema() {
22-
return Label.class;
22+
return UpdateLabel.class;
2323
}
2424

2525
@Override
2626
public List<Module> jacksonModules() {
27-
return List.of(new SimpleModule().addAbstractTypeMapping(Label.class, LabelArgument.class));
27+
return List.of(
28+
new SimpleModule().addAbstractTypeMapping(UpdateLabel.class, UpdateLabelArgument.class));
2829
}
2930

3031
@Value
3132
@Accessors(fluent = true)
3233
@NoArgsConstructor(force = true)
33-
private static class LabelArgument implements Label {
34+
private static class UpdateLabelArgument implements UpdateLabel {
3435
@JsonProperty(IDENTITY_FIELD_NAME)
3536
String id;
3637

0 commit comments

Comments
 (0)