|
4 | 4 | import static org.hypertrace.config.validation.GrpcValidatorUtils.validateRequestContextOrThrow;
|
5 | 5 |
|
6 | 6 | import io.grpc.Status;
|
| 7 | +import java.util.List; |
7 | 8 | import org.hypertrace.core.grpcutils.context.RequestContext;
|
8 | 9 | import org.hypertrace.notification.config.service.v1.CreateNotificationRuleRequest;
|
9 | 10 | import org.hypertrace.notification.config.service.v1.DeleteNotificationRuleRequest;
|
10 | 11 | import org.hypertrace.notification.config.service.v1.GetAllNotificationRulesRequest;
|
11 | 12 | import org.hypertrace.notification.config.service.v1.GetNotificationRuleRequest;
|
12 | 13 | import org.hypertrace.notification.config.service.v1.NotificationIntegrationTarget;
|
| 14 | +import org.hypertrace.notification.config.service.v1.NotificationRule; |
13 | 15 | import org.hypertrace.notification.config.service.v1.NotificationRuleMutableData;
|
14 | 16 | import org.hypertrace.notification.config.service.v1.UpdateNotificationRuleRequest;
|
15 | 17 |
|
16 | 18 | public class NotificationRuleConfigServiceRequestValidator {
|
17 | 19 |
|
18 | 20 | public void validateCreateNotificationRuleRequest(
|
19 |
| - RequestContext requestContext, CreateNotificationRuleRequest request) { |
| 21 | + RequestContext requestContext, |
| 22 | + CreateNotificationRuleRequest request, |
| 23 | + List<NotificationRule> existingNotificationRules) { |
20 | 24 | validateRequestContextOrThrow(requestContext);
|
| 25 | + validateNonDuplicateNotificationRuleOrThrow( |
| 26 | + request.getNotificationRuleMutableData().getRuleName(), existingNotificationRules); |
21 | 27 | validateNotificationRuleMutableData(request.getNotificationRuleMutableData());
|
22 | 28 | }
|
23 | 29 |
|
24 | 30 | public void validateUpdateNotificationRuleRequest(
|
25 |
| - RequestContext requestContext, UpdateNotificationRuleRequest request) { |
| 31 | + RequestContext requestContext, |
| 32 | + UpdateNotificationRuleRequest request, |
| 33 | + List<NotificationRule> existingNotificationRules) { |
26 | 34 | validateRequestContextOrThrow(requestContext);
|
27 | 35 | validateNonDefaultPresenceOrThrow(request, UpdateNotificationRuleRequest.ID_FIELD_NUMBER);
|
| 36 | + validateNonDuplicateNotificationRuleOrThrow( |
| 37 | + request.getNotificationRuleMutableData().getRuleName(), existingNotificationRules); |
28 | 38 | validateNotificationRuleMutableData(request.getNotificationRuleMutableData());
|
29 | 39 | }
|
30 | 40 |
|
| 41 | + private void validateNonDuplicateNotificationRuleOrThrow( |
| 42 | + String ruleName, List<NotificationRule> existingNotificationRules) { |
| 43 | + for (NotificationRule existingNotificationRule : existingNotificationRules) { |
| 44 | + if (existingNotificationRule |
| 45 | + .getNotificationRuleMutableData() |
| 46 | + .getRuleName() |
| 47 | + .equals(ruleName)) { |
| 48 | + throw Status.ALREADY_EXISTS |
| 49 | + .withDescription("Notification Rule with the same name already exists.") |
| 50 | + .asRuntimeException(); |
| 51 | + } |
| 52 | + } |
| 53 | + } |
| 54 | + |
31 | 55 | private void validateNotificationRuleMutableData(NotificationRuleMutableData data) {
|
32 | 56 | validateNonDefaultPresenceOrThrow(data, NotificationRuleMutableData.RULE_NAME_FIELD_NUMBER);
|
33 | 57 | if (data.hasIntegrationTarget()) {
|
|
0 commit comments