[#40228] added storage resource

- changed /download and /open to redirect responses
- fixed readOnly properties
- added storage path and model
- added permissions and descriptions on error responses
This commit is contained in:
Eric Schubert
2022-01-25 10:29:17 +01:00
parent 6eb26e8249
commit 29afa4da70
11 changed files with 340 additions and 556 deletions
+6 -467
View File
@@ -1,470 +1,9 @@
# This file instructs Redocly's linter to ignore the rules contained for specific parts of your API.
# See https://redoc.ly/docs/cli/ for more information.
docs/api/apiv3/openapi-spec.yml:
no-empty-servers:
- '#/servers'
tmp/oas-generated.yml:
info-license:
- '#/info'
no-ambiguous-paths:
- '#/paths/~1api~1v3~1queries~1{id}~1star'
- '#/paths/~1api~1v3~1queries~1{id}~1unstar'
- '#/paths/~1api~1v3~1relations~1{id}~1form'
- '#/paths/~1api~1v3~1work_packages~1{id}~1activities'
- '#/paths/~1api~1v3~1work_packages~1{id}~1attachments'
- '#/paths/~1api~1v3~1work_packages~1{id}~1available_projects'
- '#/paths/~1api~1v3~1work_packages~1{id}~1available_relation_candidates'
- '#/paths/~1api~1v3~1work_packages~1{id}~1available_watchers'
- '#/paths/~1api~1v3~1work_packages~1{id}~1form'
- '#/paths/~1api~1v3~1work_packages~1{id}~1revisions'
- '#/paths/~1api~1v3~1work_packages~1{work_package_id}~1relations'
- '#/paths/~1api~1v3~1work_packages~1{work_package_id}~1watchers'
docs/api/apiv3/paths/root.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
docs/api/apiv3/components/schemas/activity_model.yml:
spec:
- '#/properties/details/type'
docs/api/apiv3/paths/activity.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/components/schemas/attachment_model.yml:
spec:
- '#/properties/digest/type'
docs/api/apiv3/components/schemas/link.yml:
spec:
- '#/examples'
docs/api/apiv3/paths/attachments.yml:
no-invalid-media-type-examples:
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/filesize
- '#/post/responses/200/content/application~1hal+json/examples/response/value'
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/staticDownloadLocation
docs/api/apiv3/paths/attachment.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/filesize
- '#/get/responses/200/content/application~1hal+json/examples/response/value'
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/staticDownloadLocation
docs/api/apiv3/paths/budget.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/id
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/subject
docs/api/apiv3/paths/category.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/components/schemas/configuration_model.yml:
spec:
- '#/properties/perPageOptions/type'
docs/api/apiv3/paths/configuration.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/custom_object.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/document.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_embedded
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/description
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/addAttachment
docs/api/apiv3/components/schemas/grid_model.yml:
spec:
- '#/properties/widgets/type'
docs/api/apiv3/paths/grids.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/scope
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
docs/api/apiv3/paths/grid.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/scope
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
docs/api/apiv3/paths/news_item.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_embedded
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/description
docs/api/apiv3/paths/post.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_embedded
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/attachments
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/project
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/self
docs/api/apiv3/paths/priority.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/project_copy.yml:
operation-2xx-response:
- '#/post/responses'
docs/api/apiv3/paths/project_work_packages.yml:
no-invalid-media-type-examples:
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/customField1
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/customField2
- '#/post/responses/200/content/application~1hal+json/examples/response/value'
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/startDate
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/dueDate
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/derivedStartDate
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/derivedDueDate
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/changeParent
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/customField3
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/delete
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/logTime
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/move
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/addWatcher/payload
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/customActions
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/watch/payload
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/ancestors
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/children
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/timeEntries/type
docs/api/apiv3/components/schemas/query_model.yml:
spec:
- '#/properties/filters/type'
- '#/properties/timelineLabels/type'
docs/api/apiv3/paths/queries.yml:
no-invalid-media-type-examples:
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_embedded
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_type
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_links/columns
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_links/groupBy
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_links/highlightedAttributes
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_links/project
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_links/results
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_links/self
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_links/sortBy
- >-
#/post/responses/201/content/application~1hal+json/examples/response/value/_links/user
docs/api/apiv3/paths/queries_column.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/components/schemas/query_filter_instance_schema_model.yml:
spec:
- '#/properties/name/type'
- '#/properties/filter/type'
docs/api/apiv3/paths/queries_filter.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/queries_operator.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/queries_sort_by.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/query.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_embedded
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/columns
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/groupBy
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/highlightedAttributes
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/project
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/results
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/self
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/sortBy
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/user
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_embedded
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/columns
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/groupBy
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/highlightedAttributes
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/project
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/results
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/self
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/sortBy
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/user
docs/api/apiv3/paths/relation.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/delay
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/delay
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links
docs/api/apiv3/paths/revision.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/role.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/status.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/components/schemas/type_model.yml:
spec:
- '#/properties/color/type'
docs/api/apiv3/paths/type.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
docs/api/apiv3/paths/version.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/customField14
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/endDate
- '#/get/responses/200/content/application~1hal+json/examples/response/value'
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/customField4
docs/api/apiv3/paths/wiki_page.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_embedded
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/attachments
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/project
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/self
docs/api/apiv3/paths/work_packages.yml:
no-invalid-media-type-examples:
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/customField1
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/customField2
- '#/post/responses/200/content/application~1hal+json/examples/response/value'
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/startDate
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/dueDate
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/derivedStartDate
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/derivedDueDate
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/changeParent
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/customField3
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/delete
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/logTime
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/move
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/addWatcher/payload
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/customActions
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/watch/payload
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/ancestors
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/children
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/timeEntries/type
docs/api/apiv3/paths/work_packages_schemas.yml:
no-path-trailing-slash:
- '#/'
docs/api/apiv3/paths/work_package.yml:
no-invalid-media-type-examples:
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/customField1
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/customField2
- '#/get/responses/200/content/application~1hal+json/examples/response/value'
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/startDate
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/dueDate
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/derivedStartDate
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/derivedDueDate
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/changeParent
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/customField3
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/delete
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/logTime
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/move
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/addWatcher/payload
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/customActions
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/watch/payload
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/ancestors
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/children
- >-
#/get/responses/200/content/application~1hal+json/examples/response/value/_links/timeEntries/type
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/customField1
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/customField2
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/startDate
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/dueDate
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/derivedStartDate
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/derivedDueDate
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/changeParent
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/customField3
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/delete
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/logTime
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/move
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/addWatcher/payload
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/customActions
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/watch/payload
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/ancestors
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/children
- >-
#/patch/responses/200/content/application~1hal+json/examples/response/value/_links/timeEntries/type
docs/api/apiv3/paths/work_package_attachments.yml:
no-invalid-media-type-examples:
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_type
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/filesize
- '#/post/responses/200/content/application~1hal+json/examples/response/value'
- >-
#/post/responses/200/content/application~1hal+json/examples/response/value/_links/staticDownloadLocation
docs/api/apiv3/paths/work_package_relations.yml:
operation-2xx-response:
- '#/get/responses'
docs/api/apiv3/components/schemas/schema_model.yml:
spec:
- '#/properties/_dependencies/type'
docs/api/apiv3/components/schemas/time_entry_model.yml:
spec:
- '#/properties/hours/type'
- '#/paths/~1api~1v3~1work_packages~1{id}~1relations/get/responses'
- '#/paths/~1api~1v3~1work_packages~1{id}~1file_links~1{file_link_id}~1download/get/responses'
- '#/paths/~1api~1v3~1work_packages~1{id}~1file_links~1{file_link_id}~1open/get/responses'
operation-4xx-response:
- '#/paths/~1api~1v3~1work_packages~1{id}~1relations/get/responses'
@@ -4,7 +4,6 @@ type: object
required:
- id
- _type
- storageType
- originData
properties:
id:
@@ -15,8 +14,6 @@ properties:
type: string
enum:
- FileLink
storageType:
type: string
readOnly: true
createdAt:
type: string
@@ -30,6 +27,17 @@ properties:
readOnly: true
originData:
$ref: '#/components/schemas/File_Link_Origin_DataModel'
_embedded:
type: object
required:
- storage
- container
properties:
storage:
$ref: '#/components/schemas/StorageModel'
container:
oneOf:
- $ref: '#/components/schemas/Work_PackageModel'
_links:
type: object
required:
@@ -45,18 +53,26 @@ properties:
allOf:
- $ref: './link.yml'
- description: |-
This file link
This file link.
**Resource**: FileLink
readOnly: true
storage:
allOf:
- $ref: './link.yml'
- description: |-
The storage resource of the linked file.
**Resource**: Storage
readOnly: true
storageUrl:
allOf:
- $ref: './link.yml'
- description: |-
The storage url the file link references to.
**Resource**: N/A
readOnly: true
writeOnly: true
container:
allOf:
- $ref: './link.yml'
@@ -71,7 +87,7 @@ properties:
allOf:
- $ref: './link.yml'
- description: |-
The uri to delete the file link
The uri to delete the file link.
**Resource**: N/A
readOnly: true
@@ -79,7 +95,7 @@ properties:
allOf:
- $ref: './link.yml'
- description: |-
The uri to download the origin file from
The uri to download the origin file from.
**Resource**: N/A
readOnly: true
@@ -87,7 +103,7 @@ properties:
allOf:
- $ref: './link.yml'
- description: |-
A static uri to fetch the download uri
A static uri to download the origin filefrom the storage. Responds with a redirect.
**Resource**: N/A
readOnly: true
@@ -95,7 +111,15 @@ properties:
allOf:
- $ref: './link.yml'
- description: |-
The uri to open the origin file on the origin itself
The uri to open the origin file on the origin itself.
**Resource**: N/A
readOnly: true
staticOriginOpen:
allOf:
- $ref: './link.yml'
- description: |-
A static uri to open the origin file on the storage. Responds with a redirect.
**Resource**: N/A
readOnly: true
@@ -103,7 +127,6 @@ properties:
example:
id: 1337
_type: FileLink
storageType: nextcloud
createdAt: '2021-12-20T13:37:00.211Z'
updatedAt: '2021-12-20T13:37:00.211Z'
originData:
@@ -114,13 +137,163 @@ example:
lastModifiedAt: '2021-12-20T14:00:13.987Z'
createdByName: Luke Skywalker
lastModifiedByName: Anakin Skywalker
_embedded:
storage:
id: 1337
_type: Storage
href: https://nextcloud.deathstar.rocks/
storageType: nextcloud
createdAt: '2021-12-20T13:37:00.211Z'
updatedAt: '2021-12-20T13:37:00.211Z'
_links:
self:
href: /api/v3/storages/1337
title: storage
container:
_type: WorkPackage
_links:
self:
href: "/api/v3/work_packages/1528"
title: Develop API
schema:
href: "/api/v3/work_packages/schemas/11-2"
update:
href: "/api/v3/work_packages/1528"
method: patch
title: Update Develop API
delete:
href: "/work_packages/bulk?ids=1528"
method: delete
title: Delete Develop API
logTime:
href: "/work_packages/1528/time_entries/new"
type: text/html
title: Log time on Develop API
move:
href: "/work_packages/1528/move/new"
type: text/html
title: Move Develop API
attachments:
href: "/api/v3/work_packages/1528/attachments"
addAttachment:
href: "/api/v3/work_packages/1528/attachments"
method: post
author:
href: "/api/v3/users/1"
title: OpenProject Admin - admin
customActions:
- href: "/api/v3/work_packages/1528/custom_actions/153/execute"
method: post
title: Reset
- href: "/api/v3/work_packages/1528/custom_actions/94/execute"
method: post
title: Forward to accounting
responsible:
href: "/api/v3/users/23"
title: Laron Leuschke - Alaina5788
relations:
href: "/api/v3/work_packages/1528/relations"
title: Show relations
revisions:
href: "/api/v3/work_packages/1528/revisions"
assignee:
href: "/api/v3/users/11"
title: Emmie Okuneva - Adele5450
priority:
href: "/api/v3/priorities/2"
title: Normal
project:
href: "/api/v3/projects/1"
title: A Test Project
status:
href: "/api/v3/statuses/1"
title: New
type:
href: "/api/v3/types/1"
title: A Type
version:
href: "/api/v3/versions/1"
title: Version 1
availableWatchers:
href: "/api/v3/work_packages/1528/available_watchers"
watch:
href: "/api/v3/work_packages/1528/watchers"
method: post
payload:
user:
href: "/api/v3/users/1"
addWatcher:
href: "/api/v3/work_packages/1528/watchers"
method: post
payload:
user:
href: "/api/v3/users/{user_id}"
templated: true
removeWatcher:
href: "/api/v3/work_packages/1528/watchers/{user_id}"
method: delete
templated: true
addRelation:
href: "/api/v3/relations"
method: post
title: Add relation
changeParent:
href: "/api/v3/work_packages/694"
method: patch
title: Change parent of Bug in OpenProject
addComment:
href: "/api/v3/work_packages/1528/activities"
method: post
title: Add comment
parent:
href: "/api/v3/work_packages/1298"
title: nisi eligendi officiis eos delectus quis voluptas dolores
category:
href: "/api/v3/categories/1298"
title: eligend isi
children:
- href: "/api/v3/work_packages/1529"
title: Write API documentation
ancestors:
- href: "/api/v3/work_packages/1290"
title: Root node of hierarchy
- href: "/api/v3/work_packages/1291"
title: Intermediate node of hierarchy
- href: "/api/v3/work_packages/1298"
title: nisi eligendi officiis eos delectus quis voluptas dolores
timeEntries:
href: "/work_packages/1528/time_entries"
type: text/html
title: Time entries
watchers:
href: "/api/v3/work_packages/1528/watchers"
customField3:
href: api/v3/users/14
id: 1528
subject: Develop API
description:
format: markdown
raw: Develop super cool OpenProject API.
html: "<p>Develop super cool OpenProject API.</p>"
scheduleManually: false
startDate:
dueDate:
derivedStartDate:
derivedDueDate:
estimatedTime: PT2H
derivedEstimatedTime: PT10H
percentageDone: 0
customField1: Foo
customField2: 42
createdAt: '2014-08-29T12:40:53Z'
updatedAt: '2014-08-29T12:44:41Z'
_links:
self:
href: /api/v3/work_package/17/file_links/1337
title: file link
storage:
href: https://nextcloud.deathstar.rocks/
title: Link to storage
href: /api/v3/storage/42
title: storage
container:
href: /api/v3/work_package/17
title: work package
@@ -136,3 +309,6 @@ example:
originOpen:
href: https://nextcloud.deathstar.rocks/index.php/f?fileid=5503
title: file open
staticOriginOpen:
href: /api/v3/work_package/17/file_links/1337/open
title: file open
@@ -0,0 +1,59 @@
# Schema: StorageModel
---
type: object
required:
- id
- _type
- href
- storageType
properties:
id:
type: integer
description: Storage id
_type:
type: string
enum:
- Storage
href:
type: string
format: uri
description: web uri of the storage instance
storageType:
type: string
enum:
- nextcloud
description: |-
The type of the storage resource. Currently only nextcloud storages are supported.
createdAt:
type: string
format: date-time
description: Time of creation
updatedAt:
type: string
format: date-time
description: Time of the most recent change to the storage
_links:
type: object
required:
- self
properties:
self:
allOf:
- $ref: './link.yml'
- description: |-
This storage resource
**Resource**: Storage
example:
id: 1337
_type: Storage
href: https://nextcloud.deathstar.rocks/
storageType: nextcloud
createdAt: '2021-12-20T13:37:00.211Z'
updatedAt: '2021-12-20T13:37:00.211Z'
_links:
self:
href: /api/v3/storages/1337
title: storage
+4
View File
@@ -322,6 +322,8 @@ paths:
"$ref": "./paths/statuses.yml"
"/api/v3/statuses/{id}":
"$ref": "./paths/status.yml"
"/api/v3/storages/{id}":
"$ref": "./paths/storage.yml"
"/api/v3/time_entries":
"$ref": "./paths/time_entries.yml"
"/api/v3/time_entries/{id}/form":
@@ -667,6 +669,8 @@ components:
"$ref": "./components/schemas/status_model.yml"
StatusesModel:
"$ref": "./components/schemas/statuses_model.yml"
StorageModel:
"$ref": "./components/schemas/storage_model.yml"
Time_EntryModel:
"$ref": "./components/schemas/time_entry_model.yml"
Time_Entry_ActivityModel:
+38
View File
@@ -0,0 +1,38 @@
# /api/v3/storages/{id}
---
get:
summary: Gets a file link.
operationId: Get_Storage
tags:
- File links
description: |-
Gets a storage resource.
parameters:
- name: id
description: Storage id
in: path
required: true
schema:
type: integer
example: 1337
responses:
'200':
description: OK
content:
application/hal+json:
schema:
$ref: '#/components/schemas/StorageModel'
'404':
content:
application/hal+json:
schema:
$ref: "#/components/schemas/ErrorResponse"
example:
_type: Error
errorIdentifier: urn:openproject-org:api:v3:errors:NotFound
message: The requested resource could not be found.
description: |-
Returned if the storage does not exist or the client does not have sufficient permissions to see it.
**Required permission:** view file links
@@ -30,22 +30,6 @@ get:
application/hal+json:
schema:
$ref: '#/components/schemas/File_LinkModel'
headers: { }
'403':
content:
application/hal+json:
schema:
$ref: "#/components/schemas/ErrorResponse"
example:
_type: Error
errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission
message: You are not allowed to delete file links of this work package.
description: |-
Returned if the client does not have sufficient permissions.
**Required permission:** view file links
*Note that you will only receive this error, if you are at least allowed to see the corresponding work package.*
'404':
content:
application/hal+json:
@@ -58,7 +42,7 @@ get:
description: |-
Returned if the work package does not exist or the client does not have sufficient permissions to see it.
**Required permission:** view work package
**Required permission:** view work package, view file links
delete:
summary: Removes a file link.
@@ -88,7 +72,6 @@ delete:
responses:
'200':
description: OK
headers: { }
'403':
content:
application/hal+json:
@@ -97,7 +80,7 @@ delete:
example:
_type: Error
errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission
message: You are not allowed to delete file links of this work package.
message: You are not authorized to access this resource.
description: |-
Returned if the client does not have sufficient permissions.
@@ -114,6 +97,7 @@ delete:
errorIdentifier: urn:openproject-org:api:v3:errors:NotFound
message: The requested resource could not be found.
description: |-
Returned if the work package does not exist or the client does not have sufficient permissions to see it.
Returned if the work package or the file link does not exist or the client does not have sufficient permissions
to see it.
**Required permission:** view work package
**Required permission:** view work package, view file links
@@ -1,6 +1,6 @@
# /api/v3/work_packages/{id}/file_links/{file_link_id}/download
---
post:
get:
summary: Creates a download uri of the linked file.
operationId: Work_Package_File_Link_Download
tags:
@@ -25,28 +25,15 @@ post:
type: integer
example: 42
responses:
'200':
description: OK
content:
application/hal+json:
'303':
headers:
Location:
schema:
$ref: '#/components/schemas/Link'
headers: { }
'403':
content:
application/hal+json:
schema:
$ref: "#/components/schemas/ErrorResponse"
example:
_type: Error
errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission
message: You are not allowed to delete file links of this work package.
type: string
format: uri
description: |-
Returned if the client does not have sufficient permissions.
**Required permission:** view file links
*Note that you will only receive this error, if you are at least allowed to see the corresponding work package.*
Returned if the request was succesful. In the `Location` header is the uri where the client can download the
origin file from the storage.
'404':
content:
application/hal+json:
@@ -59,4 +46,4 @@ post:
description: |-
Returned if the work package does not exist or the client does not have sufficient permissions to see it.
**Required permission:** view work package
**Required permission:** view work package, view file links
@@ -1,6 +1,6 @@
# /api/v3/work_packages/{id}/file_links/{file_link_id}/open
---
post:
get:
summary: Creates an opening uri of the linked file.
operationId: Work_Package_File_Link_Open
tags:
@@ -25,28 +25,15 @@ post:
type: integer
example: 42
responses:
'200':
description: OK
content:
application/hal+json:
'303':
headers:
Location:
schema:
$ref: '#/components/schemas/Link'
headers: { }
'403':
content:
application/hal+json:
schema:
$ref: "#/components/schemas/ErrorResponse"
example:
_type: Error
errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission
message: You are not allowed to delete file links of this work package.
type: string
format: uri
description: |-
Returned if the client does not have sufficient permissions.
**Required permission:** view file links
*Note that you will only receive this error, if you are at least allowed to see the corresponding work package.*
Returned if the request was succesful. In the `Location` header is the uri where the client can open the origin
file on the storage.
'404':
content:
application/hal+json:
@@ -59,4 +46,4 @@ post:
description: |-
Returned if the work package does not exist or the client does not have sufficient permissions to see it.
**Required permission:** view work package
**Required permission:** view work package, view file links
@@ -31,20 +31,12 @@ post:
type: object
required:
- _type
- count
- total
- _embedded
properties:
_type:
type: string
enum:
- Collection
count:
type: integer
minimum: 0
total:
type: integer
minimum: 0
_embedded:
type: object
required:
@@ -62,6 +54,23 @@ post:
storageUrl:
type: string
format: uri
example:
_type: Collection
_embedded:
elements:
- originData:
id: 5503
name: logo.png
mimeType: image/png
createdAt: '2021-12-19T09:42:10.170Z'
lastModifiedAt: '2021-12-20T14:00:13.987Z'
createdByName: Luke Skywalker
lastModifiedByName: Anakin Skywalker
_links:
storageUrl:
href: https://nextcloud.deathstar.rocks/
title: Link to storage
responses:
'201':
description: Created
@@ -112,7 +121,7 @@ post:
example:
_type: Error
errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission
message: You are not allowed to create file links of this work package.
message: You are not authorized to access this resource.
description: |-
Returned if the client does not have sufficient permissions.
@@ -131,7 +140,7 @@ post:
description: |-
Returned if the work package does not exist or the client does not have sufficient permissions to see it.
**Required permission:** view work package
**Required permission:** view work package, view file links
get:
summary: Gets all file links of a work package
operationId: Work_Package_Get_File_Links
@@ -190,7 +199,7 @@ get:
example:
_type: Error
errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission
message: You are not allowed to create file links of this work package.
message: You are not authorized to access this resource.
description: |-
Returned if the client does not have sufficient permissions.
+1
View File
@@ -14,6 +14,7 @@
"npm": "~6.14.13"
},
"devDependencies": {
"@redocly/openapi-cli": "^1.0.0-beta.80",
"webfonts-generator": "^0.4.0"
}
}
+1 -1
View File
@@ -7,7 +7,7 @@ require 'yaml'
load 'lib/api/open_api.rb'
assembled_path = Tempfile.new.path
assembled_path = "./tmp/oas-generated.yml"
spec_path = Pathname(__dir__).join("../../docs/api/apiv3/openapi-spec.yml")
full_spec = API::OpenAPI.send(:assemble_spec, spec_path).to_yaml
status = 1