Skip to content

Commit 86b66ad

Browse files
authored
feat: Add Application API (#8)
* feat: Add Application API * build: Bump GPG plugin version * test: 401 Application endpoints
1 parent 5a060d8 commit 86b66ad

File tree

7 files changed

+482
-5
lines changed

7 files changed

+482
-5
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ You'll need to have [created a Vonage account](https://dashboard.nexmo.com/sign-
1919

2020
## Supported APIs
2121
- [Account](https://developer.vonage.com/en/account/overview)
22+
- [Application](https://developer.vonage.com/en/application/overview)
2223
- [Conversion](https://developer.vonage.com/en/messaging/conversion-api/overview)
2324
- [Messages](https://developer.vonage.com/en/messages/overview)
2425
- [Number Insight](https://developer.vonage.com/en/number-insight/overview)

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@
229229
<plugins>
230230
<plugin>
231231
<artifactId>maven-gpg-plugin</artifactId>
232-
<version>3.2.4</version>
232+
<version>3.2.5</version>
233233
<executions>
234234
<execution>
235235
<id>sign-artifacts</id>
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Copyright 2024 Vonage
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.vonage.client.kt
17+
18+
import com.vonage.client.application.*
19+
import com.vonage.client.application.Application
20+
import com.vonage.client.application.capabilities.*
21+
import com.vonage.client.application.capabilities.Messages
22+
import com.vonage.client.application.capabilities.Verify
23+
import com.vonage.client.application.capabilities.Voice
24+
import com.vonage.client.common.Webhook
25+
import java.util.*
26+
27+
class Application internal constructor(private val client: ApplicationClient) {
28+
29+
fun application(applicationId: String): ExistingApplication = ExistingApplication(applicationId)
30+
31+
fun application(applicationId: UUID) = application(applicationId.toString())
32+
33+
inner class ExistingApplication internal constructor(val id: String) {
34+
fun get(): Application = client.getApplication(id)
35+
36+
fun update(properties: Application.Builder.() -> Unit): Application =
37+
client.updateApplication(Application.builder(get()).apply(properties).build())
38+
39+
fun delete(): Unit = client.deleteApplication(id)
40+
}
41+
42+
fun listAll(): List<Application> = client.listAllApplications()
43+
44+
fun list(page: Int? = null, pageSize: Int? = null): List<Application> {
45+
val filter = ListApplicationRequest.builder()
46+
if (page != null) filter.page(page.toLong())
47+
if (pageSize != null) filter.pageSize(pageSize.toLong())
48+
return client.listApplications(filter.build()).applications
49+
}
50+
51+
fun create(properties: Application.Builder.() -> Unit): Application =
52+
client.createApplication(Application.builder().apply(properties).build())
53+
}
54+
55+
private fun webhookBuilder(properties: Webhook.Builder.() -> Unit): Webhook =
56+
Webhook.builder().apply(properties).build()
57+
58+
fun Webhook.Builder.url(url: String): Webhook.Builder = address(url)
59+
60+
fun Voice.Builder.answer(properties: Webhook.Builder.() -> Unit): Voice.Builder =
61+
addWebhook(Webhook.Type.ANSWER, webhookBuilder(properties))
62+
63+
fun Voice.Builder.fallbackAnswer(properties: Webhook.Builder.() -> Unit): Voice.Builder =
64+
addWebhook(Webhook.Type.FALLBACK_ANSWER, webhookBuilder(properties))
65+
66+
fun Voice.Builder.event(properties: Webhook.Builder.() -> Unit): Voice.Builder =
67+
addWebhook(Webhook.Type.EVENT, webhookBuilder(properties))
68+
69+
fun Rtc.Builder.event(properties: Webhook.Builder.() -> Unit): Rtc.Builder =
70+
addWebhook(Webhook.Type.EVENT, webhookBuilder(properties))
71+
72+
fun Verify.Builder.status(properties: Webhook.Builder.() -> Unit): Verify.Builder =
73+
addWebhook(Webhook.Type.STATUS, webhookBuilder(properties))
74+
75+
fun Messages.Builder.inbound(properties: Webhook.Builder.() -> Unit): Messages.Builder =
76+
addWebhook(Webhook.Type.INBOUND, webhookBuilder(properties))
77+
78+
fun Messages.Builder.status(properties: Webhook.Builder.() -> Unit): Messages.Builder =
79+
addWebhook(Webhook.Type.STATUS, webhookBuilder(properties))
80+
81+
fun Application.Builder.removeCapabilities(vararg capabilities: Capability.Type): Application.Builder {
82+
for (capability in capabilities) {
83+
removeCapability(capability)
84+
}
85+
return this
86+
}
87+
88+
fun Application.Builder.voice(capability: Voice.Builder.() -> Unit): Application.Builder =
89+
addCapability(Voice.builder().apply(capability).build())
90+
91+
fun Application.Builder.messages(capability: Messages.Builder.() -> Unit): Application.Builder =
92+
addCapability(Messages.builder().apply(capability).build())
93+
94+
fun Application.Builder.verify(capability: Verify.Builder.() -> Unit): Application.Builder =
95+
addCapability(Verify.builder().apply(capability).build())
96+
97+
fun Application.Builder.rtc(capability: Rtc.Builder.() -> Unit): Application.Builder =
98+
addCapability(Rtc.builder().apply(capability).build())
99+
100+
fun Application.Builder.vbc(): Application.Builder = addCapability(Vbc.builder().build())

src/main/kotlin/com/vonage/client/kt/Vonage.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.vonage.client.VonageClient
2121
class Vonage(init: VonageClient.Builder.() -> Unit) {
2222
private val client : VonageClient = VonageClient.builder().apply(init).build()
2323
val account = Account(client.accountClient)
24+
val application = Application(client.applicationClient)
2425
val conversion = Conversion(client.conversionClient)
2526
val messages = Messages(client.messagesClient)
2627
val numberInsight = NumberInsight(client.insightClient)

src/test/kotlin/com/vonage/client/kt/AbstractTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ abstract class AbstractTest {
7979
protected val timestamp2: Instant = Instant.parse(timestamp2Str)
8080
protected val currency = "EUR"
8181
protected val exampleUrlBase = "https://example.com"
82+
protected val eventUrl = "$exampleUrlBase/event"
8283
protected val callbackUrl = "$exampleUrlBase/callback"
8384
protected val statusCallbackUrl = "$callbackUrl/status"
8485
protected val moCallbackUrl = "$callbackUrl/inbound-sms"

0 commit comments

Comments
 (0)