Skip to content

Commit 0be3bc8

Browse files
committed
feat: add concept of product release that may have its own collections
Signed-off-by: Pavel Shukhman <[email protected]>
1 parent 6d8f320 commit 0be3bc8

File tree

1 file changed

+231
-19
lines changed

1 file changed

+231
-19
lines changed

spec/openapi.yaml

Lines changed: 231 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ servers:
1919
paths:
2020
/product/{uuid}:
2121
get:
22-
description: Returns the corresponding TEA components for a given TEA product UUID.
22+
description: Get a TEA Product by UUID
2323
operationId: getTeaProductByUuid
2424
parameters:
2525
- name: uuid
@@ -42,6 +42,74 @@ paths:
4242
$ref: "#/components/responses/404-object-by-id-not-found"
4343
tags:
4444
- TEA Product
45+
/product/{uuid}/releases:
46+
get:
47+
description: Get releases of the product
48+
operationId: getReleasesByProductId
49+
parameters:
50+
- name: uuid
51+
in: path
52+
required: true
53+
description: UUID of TEA Product in the TEA server
54+
schema:
55+
type: string
56+
format: uuid
57+
responses:
58+
'200':
59+
description: Requested Releases of TEA Product found and returned
60+
content:
61+
application/json:
62+
schema:
63+
type: array
64+
items:
65+
"$ref": "#/components/schemas/productRelease"
66+
'400':
67+
$ref: "#/components/responses/400-invalid-request"
68+
'404':
69+
$ref: "#/components/responses/404-object-by-id-not-found"
70+
tags:
71+
- TEA Product Release
72+
/productRelease/{uuid}:
73+
get:
74+
description: Get a TEA Product Release
75+
operationId: getTeaProductReleaseByUuid
76+
parameters:
77+
- name: uuid
78+
in: path
79+
required: true
80+
description: UUID of TEA Product Release in the TEA server
81+
schema:
82+
type: string
83+
format: uuid
84+
responses:
85+
'200':
86+
description: Requested TEA Product Release found and returned
87+
content:
88+
application/json:
89+
schema:
90+
"$ref": "#/components/schemas/productRelease"
91+
'400':
92+
$ref: "#/components/responses/400-invalid-request"
93+
'404':
94+
$ref: "#/components/responses/404-object-by-id-not-found"
95+
tags:
96+
- TEA Product Release
97+
/productReleases:
98+
get:
99+
description: Returns a list of TEA product releases. Note that multiple product releases may match.
100+
operationId: getTeaProductReleaseByIdentifier
101+
parameters:
102+
- $ref: "#/components/parameters/page-offset"
103+
- $ref: "#/components/parameters/page-size"
104+
- $ref: "#/components/parameters/id-type"
105+
- $ref: "#/components/parameters/id-value"
106+
responses:
107+
'200':
108+
$ref: "#/components/responses/paginated-productRelease"
109+
'400':
110+
$ref: "#/components/responses/400-invalid-request"
111+
tags:
112+
- TEA Product Release
45113
/products:
46114
get:
47115
description: Returns a list of TEA products. Note that multiple products may
@@ -136,6 +204,31 @@ paths:
136204
$ref: "#/components/responses/404-object-by-id-not-found"
137205
tags:
138206
- TEA Release
207+
/productRelease/{uuid}/collection/latest:
208+
get:
209+
description: Get the latest TEA Collection belonging to the TEA Product Release
210+
operationId: getLatestCollectionForProductRelease
211+
parameters:
212+
- name: uuid
213+
in: path
214+
required: true
215+
description: UUID of TEA Product Release in the TEA server
216+
schema:
217+
type: string
218+
format: uuid
219+
responses:
220+
'200':
221+
description: Requested TEA Collection found and returned
222+
content:
223+
application/json:
224+
schema:
225+
"$ref": "#/components/schemas/collection"
226+
'400':
227+
$ref: "#/components/responses/400-invalid-request"
228+
'404':
229+
$ref: "#/components/responses/404-object-by-id-not-found"
230+
tags:
231+
- TEA Product Release
139232
/release/{uuid}/collections:
140233
get:
141234
description: Get the TEA Collections belonging to the TEA Release
@@ -163,6 +256,63 @@ paths:
163256
$ref: "#/components/responses/404-object-by-id-not-found"
164257
tags:
165258
- TEA Release
259+
/productRelease/{uuid}/collections:
260+
get:
261+
description: Get the TEA Collections belonging to the TEA Product Release
262+
operationId: getCollectionsByProductReleaseId
263+
parameters:
264+
- name: uuid
265+
in: path
266+
required: true
267+
description: UUID of TEA Product Release in the TEA server
268+
schema:
269+
type: string
270+
format: uuid
271+
responses:
272+
'200':
273+
description: Requested TEA Collection found and returned
274+
content:
275+
application/json:
276+
schema:
277+
type: array
278+
items:
279+
"$ref": "#/components/schemas/collection"
280+
'400':
281+
$ref: "#/components/responses/400-invalid-request"
282+
'404':
283+
$ref: "#/components/responses/404-object-by-id-not-found"
284+
tags:
285+
- TEA Product Release
286+
/productRelease/{uuid}/collection/{collectionVersion}:
287+
get:
288+
description: Get a specific Collection (by version) for a TEA Product Release by its UUID
289+
operationId: getCollectionForProductRelease
290+
parameters:
291+
- name: uuid
292+
in: path
293+
required: true
294+
description: UUID of TEA Collection in the TEA server
295+
schema:
296+
"$ref": "#/components/schemas/uuid"
297+
- name: collectionVersion
298+
in: path
299+
required: true
300+
description: Version of TEA Collection
301+
schema:
302+
type: integer
303+
responses:
304+
'200':
305+
description: Requested TEA Collection Version found and returned
306+
content:
307+
application/json:
308+
schema:
309+
"$ref": "#/components/schemas/collection"
310+
'400':
311+
$ref: "#/components/responses/400-invalid-request"
312+
'404':
313+
$ref: "#/components/responses/404-object-by-id-not-found"
314+
tags:
315+
- TEA Product Release
166316
/release/{uuid}/collection/{collectionVersion}:
167317
get:
168318
description: Get a specific Collection (by version) for a TEA Release by its UUID
@@ -270,20 +420,10 @@ components:
270420
List of identifiers for the product, like TEI, CPE, PURL or other identifiers
271421
items:
272422
"$ref": "#/components/schemas/identifier"
273-
components:
274-
type: array
275-
description: |
276-
List of TEA component-refs for the product. The component-ref by default just
277-
includes the UUID of the component, but in some cases also include a reference
278-
to the UUID of a specific release.
279-
items:
280-
description: Unique identifier of the TEA component-ref
281-
"$ref": "#/components/schemas/uuid"
282423
required:
283424
- uuid
284425
- name
285426
- identifiers
286-
- components
287427
examples:
288428
- uuid: 09e8c73b-ac45-4475-acac-33e6a7314e6d
289429
name: Apache Log4j 2
@@ -292,10 +432,61 @@ components:
292432
idValue: cpe:2.3:a:apache:log4j
293433
- idType: PURL
294434
idValue: pkg:maven/org.apache.logging.log4j/log4j-api
435+
436+
#
437+
# TEA Product Release
438+
#
439+
productRelease:
440+
type: object
441+
description: A specific release of a TEA product
442+
properties:
443+
uuid:
444+
description: A unique identifier for the TEA Product Release
445+
"$ref": "#/components/schemas/uuid"
446+
version:
447+
description: Version number of the product release
448+
type: string
449+
example: 2.24.3
450+
createdDate:
451+
description: Timestamp when this Product Release was created in TEA (for sorting purposes)
452+
"$ref": "#/components/schemas/date-time"
453+
releaseDate:
454+
description: Timestamp of the product release
455+
"$ref": "#/components/schemas/date-time"
456+
preRelease:
457+
type: boolean
458+
description: |
459+
A flag indicating pre-release (or beta) status.
460+
May be disabled after the creation of the release object, but can't be enabled after creation of an object.
461+
identifiers:
462+
type: array
463+
description: List of identifiers for the product release
464+
items:
465+
"$ref": "#/components/schemas/identifier"
466+
components:
467+
type: array
468+
description: |
469+
List of component references that compose this product release. A component reference can optionally include
470+
the UUID of a specific component release to pin the exact version.
471+
items:
472+
"$ref": "#/components/schemas/component-ref"
473+
required:
474+
- uuid
475+
- version
476+
- createdDate
477+
- components
478+
examples:
479+
- uuid: 123e4567-e89b-12d3-a456-426614174000
480+
version: "2.24.3"
481+
createdDate: 2025-04-01T15:43:00Z
482+
releaseDate: 2025-04-01T15:43:00Z
483+
identifiers:
484+
- idType: TEI
485+
idValue: tei:vendor:[email protected]
295486
components:
296-
- 3910e0fd-aff4-48d6-b75f-8bf6b84687f0
297-
- b844c9bd-55d6-478c-af59-954a932b6ad3
298-
- d6d3f754-d4f4-4672-b096-b994b064ca2d
487+
- uuid: 3910e0fd-aff4-48d6-b75f-8bf6b84687f0
488+
- uuid: b844c9bd-55d6-478c-af59-954a932b6ad3
489+
release: da89e38e-95e7-44ca-aa7d-f3b6b34c7fab
299490

300491
#
301492
# TEA Component and related objects
@@ -319,7 +510,6 @@ components:
319510
- uuid
320511
- name
321512
- identifiers
322-
- versions
323513
examples:
324514
- uuid: 3910e0fd-aff4-48d6-b75f-8bf6b84687f0
325515
name: Apache Log4j API
@@ -348,13 +538,11 @@ components:
348538
description: A unique identifier for the TEA component
349539
"$ref": "#/components/schemas/uuid"
350540
release:
351-
type: string
352541
description: |
353542
Optional UUID of a specific release included in the product in the case where the product
354543
always include a specific release of a component. The product name should include a version
355544
identifier in this case.
356-
items:
357-
"$ref": "#/components/schemas/uuid"
545+
"$ref": "#/components/schemas/uuid"
358546
required:
359547
- uuid
360548

@@ -430,7 +618,7 @@ components:
430618
uuid:
431619
description: |
432620
UUID of the TEA Collection object.
433-
Note that this is equal to the UUID of the associated TEA Component Release object.
621+
This matches the UUID of the associated TEA Component Release or TEA Product Release object.
434622
When updating a collection, only the `version` is changed.
435623
"$ref": "#/components/schemas/uuid"
436624
version:
@@ -441,6 +629,9 @@ components:
441629
date:
442630
description: The date when the TEA Collection version was created.
443631
"$ref": "#/components/schemas/date-time"
632+
belongsTo:
633+
description: Indicates whether this collection belongs to a Component Release or a Product Release
634+
"$ref": "#/components/schemas/collection-belongs-to-type"
444635
updateReason:
445636
description: Reason for the update/release of the TEA Collection object.
446637
"$ref": "#/components/schemas/collection-update-reason"
@@ -502,6 +693,13 @@ components:
502693
- ARTIFACT_ADDED
503694
- ARTIFACT_REMOVED
504695

696+
collection-belongs-to-type:
697+
type: string
698+
description: Indicates whether a collection belongs to a component release or a product release
699+
enum:
700+
- RELEASE
701+
- PRODUCT_RELEASE
702+
505703
#
506704
# TEA Artifact and related objects
507705
#
@@ -644,6 +842,19 @@ components:
644842
type: array
645843
items:
646844
"$ref": "#/components/schemas/product"
845+
paginated-productRelease:
846+
description: A paginated response containing TEA Product Releases
847+
content:
848+
application/json:
849+
schema:
850+
allOf:
851+
- $ref: "#/components/schemas/pagination-details"
852+
- type: object
853+
properties:
854+
results:
855+
type: array
856+
items:
857+
"$ref": "#/components/schemas/productRelease"
647858
parameters:
648859
# Pagination
649860
page-offset:
@@ -715,6 +926,7 @@ security:
715926
- basicAuth: []
716927
tags:
717928
- name: TEA Product
929+
- name: TEA Product Release
718930
- name: TEA Component
719931
- name: TEA Release
720932
- name: TEA Artifact

0 commit comments

Comments
 (0)