Skip to content

Commit adc02d8

Browse files
committed
feat(api): add plan addon types and operations
1 parent 3da719d commit adc02d8

6 files changed

Lines changed: 186 additions & 49 deletions

File tree

api/spec/packages/aip/src/features/operations.tsp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ interface FeatureOperations {
3939
create(
4040
@body
4141
feature: Shared.CreateRequest<Feature>,
42-
): Shared.PagePaginatedResponse<Feature> | Common.ErrorResponses;
42+
): Shared.CreateResponse<Feature> | Common.ErrorResponses;
4343

4444
/**
4545
* Get a feature by id.

api/spec/packages/aip/src/konnect.tsp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,17 @@ interface LLMCostPricesEndpoints extends LLMCost.LLMCostPricesOperations {}
121121
interface LLMCostOverridesEndpoints
122122
extends LLMCost.LLMCostOverridesOperations {}
123123

124-
@route("/openmeter/product-catalog/prices")
124+
@route("/openmeter/plans")
125125
@tag(Shared.ProductCatalogTag)
126-
interface ProductCatalogEndpoints
127-
extends ProductCatalog.ProductCatalogOperations {}
126+
interface PlansEndpoints extends ProductCatalog.PlanOperations {}
127+
128+
@route("/openmeter/addons")
129+
@tag(Shared.ProductCatalogTag)
130+
interface AddonsEndpoints extends ProductCatalog.AddonOperations {}
131+
132+
@route("/openmeter/plans/{planId}/addons")
133+
@tag(Shared.ProductCatalogTag)
134+
interface PlanAddonEndpoints extends ProductCatalog.PlanAddonOperations {}
128135

129136
/**
130137
* The system account access token is meant for automations and integrations that are not directly associated with a human identity.

api/spec/packages/aip/src/openmeter.tsp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,14 @@ interface LLMCostPricesEndpoints extends LLMCost.LLMCostPricesOperations {}
123123
interface LLMCostOverridesEndpoints
124124
extends LLMCost.LLMCostOverridesOperations {}
125125

126-
@route("/openmeter/product-catalog")
126+
@route("/openmeter/plans")
127127
@tag(Shared.ProductCatalogTag)
128-
interface ProductCatalogEndpoints
129-
extends ProductCatalog.ProductCatalogOperations {}
128+
interface PlansEndpoints extends ProductCatalog.PlanOperations {}
129+
130+
@route("/openmeter/addons")
131+
@tag(Shared.ProductCatalogTag)
132+
interface AddonsEndpoints extends ProductCatalog.AddonOperations {}
133+
134+
@route("/openmeter/plans/{planId}/addons")
135+
@tag(Shared.ProductCatalogTag)
136+
interface PlanAddonEndpoints extends ProductCatalog.PlanAddonOperations {}

api/spec/packages/aip/src/productcatalog/index.tsp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ import "./unitconfig.tsp";
33
import "./ratecard.tsp";
44
import "./operations.tsp";
55
import "./addons.tsp";
6+
import "./planaddon.tsp";

api/spec/packages/aip/src/productcatalog/operations.tsp

Lines changed: 112 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,23 @@ import "@typespec/rest";
33
import "@typespec/openapi";
44
import "@typespec/openapi3";
55
import "../common/error.tsp";
6+
import "../common/pagination.tsp";
67
import "../common/parameters.tsp";
78
import "../shared/index.tsp";
89
import "./ratecard.tsp";
910
import "./plan.tsp";
11+
import "./planaddon.tsp";
1012

1113
using TypeSpec.Http;
1214
using TypeSpec.OpenAPI;
1315

1416
namespace ProductCatalog;
1517

16-
interface ProductCatalogOperations {
18+
interface PlanOperations {
1719
/**
18-
* List all plans.
20+
* List all plans.
1921
*/
2022
@get
21-
@route("/plans")
2223
@operationId("list-plans")
2324
@summary("List plans")
2425
@extension(Shared.PrivateExtension, true)
@@ -29,46 +30,42 @@ interface ProductCatalogOperations {
2930
): Shared.PagePaginatedResponse<Plan> | Common.ErrorResponses;
3031

3132
/**
32-
* Create a new plan.
33+
* Create a new plan.
3334
*/
3435
@post
35-
@route("/plans")
3636
@operationId("create-plan")
3737
@summary("Create a new plan.")
3838
@extension(Shared.PrivateExtension, true)
3939
@extension(Shared.UnstableExtension, true)
4040
@extension(Shared.InternalExtension, true)
4141
createPlan(
42-
@body
43-
plan: Shared.CreateRequest<Plan>,
42+
@body plan: Shared.CreateRequest<Plan>,
4443
): Shared.CreateResponse<Plan> | Common.ErrorResponses;
4544

4645
/**
47-
* Upsert a plan by id.
46+
* Upsert a plan by id.
4847
*/
4948
@put
50-
@route("/plans/{planId}")
49+
@route("/{planId}")
5150
@operationId("upsert-plan")
5251
@summary("Upsert a plan by id.")
5352
@extension(Shared.PrivateExtension, true)
5453
@extension(Shared.UnstableExtension, true)
5554
@extension(Shared.InternalExtension, true)
5655
upsertPlan(
5756
@path planId: Shared.ULID,
58-
59-
@body
60-
plan: Shared.UpsertRequest<Plan>,
57+
@body plan: Shared.UpsertRequest<Plan>,
6158
):
6259
| Shared.UpsertResponse<Plan>
6360
| Common.ErrorResponses
6461
| Common.Gone
6562
| Common.NotFound;
6663

6764
/**
68-
* Get a plan by id.
65+
* Get a plan by id.
6966
*/
7067
@get
71-
@route("/plans/{planId}")
68+
@route("/{planId}")
7269
@operationId("get-plan")
7370
@summary("Get a plan by id.")
7471
@extension(Shared.PrivateExtension, true)
@@ -81,10 +78,10 @@ interface ProductCatalogOperations {
8178
| Common.NotFound;
8279

8380
/**
84-
* Delete plan by id.
81+
* Delete a plan by id.
8582
*/
8683
@delete
87-
@route("/plans/{planId}")
84+
@route("/{planId}")
8885
@operationId("delete-plan")
8986
@summary("Delete a plan by id.")
9087
@extension(Shared.PrivateExtension, true)
@@ -98,7 +95,7 @@ interface ProductCatalogOperations {
9895
* Archive a plan version.
9996
*/
10097
@post
101-
@route("/plans/{planId}/archive")
98+
@route("/{planId}/archive")
10299
@operationId("archive-plan")
103100
@summary("Archive a plan version.")
104101
@extension(Shared.PrivateExtension, true)
@@ -112,21 +109,22 @@ interface ProductCatalogOperations {
112109
* Publish a plan version.
113110
*/
114111
@post
115-
@route("/plans/{planId}/publish")
116-
@operationId("archive-plan")
112+
@route("/{planId}/publish")
113+
@operationId("publish-plan")
117114
@summary("Publish a plan version.")
118115
@extension(Shared.PrivateExtension, true)
119116
@extension(Shared.UnstableExtension, true)
120117
@extension(Shared.InternalExtension, true)
121118
publishPlan(
122119
@path planId: Shared.ULID,
123120
): Shared.UpdateResponse<Plan> | Common.ErrorResponses | Common.NotFound;
121+
}
124122

123+
interface AddonOperations {
125124
/**
126-
* List all add-ons.
125+
* List all add-ons.
127126
*/
128127
@get
129-
@route("/addons")
130128
@operationId("list-addons")
131129
@summary("List all add-ons.")
132130
@extension(Shared.PrivateExtension, true)
@@ -137,46 +135,42 @@ interface ProductCatalogOperations {
137135
): Shared.PagePaginatedResponse<Addon> | Common.ErrorResponses;
138136

139137
/**
140-
* List all add-ons.
138+
* Create a new add-on.
141139
*/
142140
@post
143-
@route("/addons")
144141
@operationId("create-addon")
145-
@summary("Create a new add-on")
142+
@summary("Create a new add-on.")
146143
@extension(Shared.PrivateExtension, true)
147144
@extension(Shared.UnstableExtension, true)
148145
@extension(Shared.InternalExtension, true)
149146
createAddon(
150-
@body
151-
addon: Shared.CreateRequest<Addon>,
147+
@body addon: Shared.CreateRequest<Addon>,
152148
): Shared.CreateResponse<Addon> | Common.ErrorResponses;
153149

154150
/**
155-
* Upsert add-on by id.
151+
* Upsert add-on by id.
156152
*/
157153
@put
158-
@route("/addons/{addonId}")
154+
@route("/{addonId}")
159155
@operationId("upsert-addon")
160-
@summary("Upsert add-on by id")
156+
@summary("Upsert add-on by id.")
161157
@extension(Shared.PrivateExtension, true)
162158
@extension(Shared.UnstableExtension, true)
163159
@extension(Shared.InternalExtension, true)
164160
upsertAddon(
165161
@path addonId: Shared.ULID,
166-
167-
@body
168-
addon: Shared.UpsertRequest<Addon>,
162+
@body addon: Shared.UpsertRequest<Addon>,
169163
):
170164
| Shared.UpsertResponse<Addon>
171165
| Common.ErrorResponses
172166
| Common.Gone
173167
| Common.NotFound;
174168

175169
/**
176-
* Get add-on by id.
170+
* Get add-on by id.
177171
*/
178172
@get
179-
@route("/addons/{addonId}")
173+
@route("/{addonId}")
180174
@operationId("get-addon")
181175
@summary("Get add-on by id.")
182176
@extension(Shared.PrivateExtension, true)
@@ -192,7 +186,7 @@ interface ProductCatalogOperations {
192186
* Soft delete add-on by id.
193187
*/
194188
@delete
195-
@route("/addons/{addonId}")
189+
@route("/{addonId}")
196190
@operationId("delete-addon")
197191
@summary("Soft delete add-on by id.")
198192
@extension(Shared.PrivateExtension, true)
@@ -203,30 +197,106 @@ interface ProductCatalogOperations {
203197
): Shared.DeleteResponse | Common.ErrorResponses | Common.NotFound;
204198

205199
/**
206-
* Archive a add-on version.
200+
* Archive an add-on version.
207201
*/
208202
@post
209-
@route("/addons/{addonId}/archive")
203+
@route("/{addonId}/archive")
210204
@operationId("archive-addon")
211-
@summary("Archive a add-on version.")
205+
@summary("Archive an add-on version.")
212206
@extension(Shared.PrivateExtension, true)
213207
@extension(Shared.UnstableExtension, true)
214208
@extension(Shared.InternalExtension, true)
215209
archiveAddon(
216210
@path addonId: Shared.ULID,
217-
): Shared.UpdateResponse<Addon> | Common.ErrorResponses;
211+
): Shared.UpdateResponse<Addon> | Common.ErrorResponses | Common.NotFound;
218212

219213
/**
220-
* Publish an add-on version.
214+
* Publish an add-on version.
221215
*/
222216
@post
223-
@route("/addons/{addonId}/publish")
217+
@route("/{addonId}/publish")
224218
@operationId("publish-addon")
225219
@summary("Publish an add-on version.")
226220
@extension(Shared.PrivateExtension, true)
227221
@extension(Shared.UnstableExtension, true)
228222
@extension(Shared.InternalExtension, true)
229223
publishAddon(
230224
@path addonId: Shared.ULID,
231-
): Shared.UpdateResponse<Addon> | Common.ErrorResponses;
225+
): Shared.UpdateResponse<Addon> | Common.ErrorResponses | Common.NotFound;
226+
}
227+
228+
interface PlanAddonOperations {
229+
/**
230+
* List add-ons associated with a plan.
231+
*/
232+
@get
233+
@operationId("list-plan-addons")
234+
@summary("List add-ons for a plan.")
235+
@extension(Shared.PrivateExtension, true)
236+
@extension(Shared.UnstableExtension, true)
237+
@extension(Shared.InternalExtension, true)
238+
listPlanAddons(
239+
@path planId: Shared.ULID,
240+
...Common.PagePaginationQuery,
241+
): Shared.PagePaginatedResponse<PlanAddon> | Common.ErrorResponses;
242+
243+
/**
244+
* Add an add-on to a plan.
245+
*/
246+
@post
247+
@operationId("create-plan-addon")
248+
@summary("Add an add-on to a plan.")
249+
@extension(Shared.PrivateExtension, true)
250+
@extension(Shared.UnstableExtension, true)
251+
@extension(Shared.InternalExtension, true)
252+
createPlanAddon(
253+
@path planId: Shared.ULID,
254+
@body plan_addon: Shared.CreateRequest<PlanAddon>,
255+
): Shared.CreateResponse<PlanAddon> | Common.ErrorResponses;
256+
257+
/**
258+
* Get an add-on association for a plan.
259+
*/
260+
@get
261+
@route("/{planAddonId}")
262+
@operationId("get-plan-addon")
263+
@summary("Get an add-on association for a plan.")
264+
@extension(Shared.PrivateExtension, true)
265+
@extension(Shared.UnstableExtension, true)
266+
@extension(Shared.InternalExtension, true)
267+
getPlanAddon(
268+
@path planId: Shared.ULID,
269+
@path planAddonId: Shared.ULID,
270+
): Shared.GetResponse<PlanAddon> | Common.ErrorResponses | Common.NotFound;
271+
272+
/**
273+
* Update an add-on association for a plan.
274+
*/
275+
@put
276+
@route("/{planAddonId}")
277+
@operationId("upsert-plan-addon")
278+
@summary("Update an add-on association for a plan.")
279+
@extension(Shared.PrivateExtension, true)
280+
@extension(Shared.UnstableExtension, true)
281+
@extension(Shared.InternalExtension, true)
282+
upsertPlanAddon(
283+
@path planId: Shared.ULID,
284+
@path planAddonId: Shared.ULID,
285+
@body plan_addon: Shared.UpsertRequest<PlanAddon>,
286+
): Shared.UpsertResponse<PlanAddon> | Common.ErrorResponses | Common.NotFound;
287+
288+
/**
289+
* Remove an add-on from a plan.
290+
*/
291+
@delete
292+
@route("/{planAddonId}")
293+
@operationId("delete-plan-addon")
294+
@summary("Remove an add-on from a plan.")
295+
@extension(Shared.PrivateExtension, true)
296+
@extension(Shared.UnstableExtension, true)
297+
@extension(Shared.InternalExtension, true)
298+
deletePlanAddon(
299+
@path planId: Shared.ULID,
300+
@path planAddonId: Shared.ULID,
301+
): Shared.DeleteResponse | Common.ErrorResponses | Common.NotFound;
232302
}

0 commit comments

Comments
 (0)