Skip to content

Commit f344e7d

Browse files
committed
chore: saveRuleIfAbsent
1 parent 20349e6 commit f344e7d

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/main/kotlin/spp/protocol/service/LiveViewService.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import io.vertx.codegen.annotations.VertxGen
2222
import io.vertx.core.Future
2323
import io.vertx.core.Vertx
2424
import io.vertx.core.eventbus.DeliveryOptions
25+
import io.vertx.core.eventbus.ReplyException
2526
import io.vertx.core.json.JsonObject
2627
import spp.protocol.service.SourceServices.LIVE_VIEW
2728
import spp.protocol.view.LiveView
@@ -51,6 +52,17 @@ interface LiveViewService {
5152
fun saveRule(rule: LiveViewRule): Future<LiveViewRule>
5253
fun deleteRule(ruleName: String): Future<LiveViewRule?>
5354

55+
@GenIgnore
56+
fun saveRuleIfAbsent(rule: LiveViewRule): Future<LiveViewRule> {
57+
return saveRule(rule).recover { error ->
58+
if (error is ReplyException && error.failureCode() == 409) {
59+
Future.succeededFuture(rule)
60+
} else {
61+
Future.failedFuture(error)
62+
}
63+
}
64+
}
65+
5466
fun addLiveView(subscription: LiveView): Future<LiveView>
5567
fun updateLiveView(id: String, subscription: LiveView): Future<LiveView>
5668
fun removeLiveView(id: String): Future<LiveView>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Source++, the continuous feedback platform for developers.
3+
* Copyright (C) 2022 CodeBrig, Inc.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package spp.protocol.service.error
18+
19+
import io.vertx.serviceproxy.ServiceException
20+
import spp.protocol.view.rule.LiveViewRule
21+
22+
/**
23+
* Thrown when attempting to save a [LiveViewRule] that already exists.
24+
*
25+
* @author [Brandon Fergerson](mailto:[email protected])
26+
*/
27+
class RuleAlreadyExistsException(message: String) : ServiceException(409, message)

0 commit comments

Comments
 (0)