diff --git a/.redocly.lint-ignore.yaml b/.redocly.lint-ignore.yaml index b35c6a3b16d..c8216fd556b 100644 --- a/.redocly.lint-ignore.yaml +++ b/.redocly.lint-ignore.yaml @@ -6,4 +6,19 @@ tmp/oas-generated.yml: - '#/paths/~1api~1v3~1file_links~1{file_link_id}~1open/get/responses' operation-4xx-response: - '#/paths/~1api~1v3/get/responses' - - '#/paths/~1api~1v3~1work_packages~1{id}~1relations/get/responses' + no-ambiguous-paths: + - '#/paths/~1api~1v3~1queries~1{id}~1form' + - '#/paths/~1api~1v3~1queries~1{id}~1star' + - '#/paths/~1api~1v3~1queries~1{id}~1unstar' + - '#/paths/~1api~1v3~1relations~1{id}~1form' + - '#/paths/~1api~1v3~1time_entries~1activity~1{id}' + - '#/paths/~1api~1v3~1work_packages~1{id}~1activities' + - '#/paths/~1api~1v3~1work_packages~1{id}~1attachments' + - '#/paths/~1api~1v3~1work_packages~1{id}~1file_links' + - '#/paths/~1api~1v3~1work_packages~1{id}~1form' + - '#/paths/~1api~1v3~1work_packages~1{id}~1revisions' + - '#/paths/~1api~1v3~1work_packages~1{id}~1relations' + - '#/paths/~1api~1v3~1work_packages~1{id}~1watchers' + - '#/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' diff --git a/docs/api/apiv3/README.md b/docs/api/apiv3/README.md index d8137c1a55f..2eb27b50605 100644 --- a/docs/api/apiv3/README.md +++ b/docs/api/apiv3/README.md @@ -2,7 +2,7 @@ _Status: under development_ -The documentation for the APIv3 is written according to the [OpenAPI 3.0 Specification](https://swagger.io/specification/). +The specification for the APIv3 is written according to the [OpenAPI 3.1 Specification](https://spec.openapis.org/oas/latest.html). The file in the repository is split up into many files. Some OAS (OpenAPI Specification) do not support that. You can retrieve the complete, singular file from any OpenProject server under `/api/v3/spec.json` or `/api/v3/spec.yml`. diff --git a/docs/api/apiv3/components/schemas/custom_action_model.yml b/docs/api/apiv3/components/schemas/custom_action_model.yml index 4916888f563..2df8091c89b 100644 --- a/docs/api/apiv3/components/schemas/custom_action_model.yml +++ b/docs/api/apiv3/components/schemas/custom_action_model.yml @@ -1,15 +1,45 @@ -# Schema: Custom_ActionModel +# Schema: CustomActionModel --- type: object -example: - _type: CustomAction - name: Change project and type - description: Changes project and type in one go +properties: + _type: + type: string + enum: + - CustomAction + name: + type: string + description: The name of the custom action + description: + type: string + description: The description for the custom action _links: - executeImmediately: - href: "/apiChanges project and type in one go" - title: Execute Change project and type - method: post - self: - href: "/api/v3/custom_actions/2" - title: Change project and type + type: object + required: + - self + - executeImmediately + properties: + self: + allOf: + - $ref: "./link.yml" + - description: |- + This custom action + + **Resource**: CustomAction + executeImmediately: + allOf: + - $ref: "./link.yml" + - description: |- + Execute this custom action. + +examples: + - _type: CustomAction + name: Change project and type + description: Changes project and type in one go + _links: + executeImmediately: + href: "/api/v3/custom_actions/2/execute" + title: Execute Change project and type + method: post + self: + href: "/api/v3/custom_actions/2" + title: Change project and type diff --git a/docs/api/apiv3/components/schemas/list_time_entries_model.yml b/docs/api/apiv3/components/schemas/list_time_entries_model.yml deleted file mode 100644 index 0a3c75445e2..00000000000 --- a/docs/api/apiv3/components/schemas/list_time_entries_model.yml +++ /dev/null @@ -1,84 +0,0 @@ -# Schema: List_time_entriesModel ---- -type: object -example: - _type: Collection - total: 39 - count: 2 - pageSize: 2 - offset: 1 - _embedded: - elements: - - _type: TimeEntry - id: 5 - comment: - format: plain - raw: Some comment - html: "
Some comment
" - spentOn: '2015-03-20' - hours: PT5H - createdAt: '2015-03-20T12:56:56Z' - updatedAt: '2015-03-20T12:56:56Z' - _links: - self: - href: "/api/v3/time_entries/1" - updateImmediately: - href: "/api/v3/time_entries/1" - method: patch - delete: - href: "/api/v3/time_entries/1" - method: delete - project: - href: "/api/v3/projects/1" - title: Some project - workPackage: - href: "/api/v3/work_packages/1" - title: Some work package - user: - href: "/api/v3/users/2" - title: Some user - activity: - href: "/api/v3/time_entries/activities/18" - title: Some time entry activity - - _type: TimeEntry - id: 10 - comment: - format: plain - raw: Another comment - html: "Another comment
" - spentOn: '2015-03-21' - hours: PT7H - createdAt: '2015-03-20T12:56:56Z' - updatedAt: '2015-03-20T12:56:56Z' - _links: - self: - href: "/api/v3/time_entries/2" - project: - href: "/api/v3/projects/42" - title: Some other project - workPackage: - href: "/api/v3/work_packages/541" - title: Some other work package - user: - href: "/api/v3/users/6" - title: Some other project - activity: - href: "/api/v3/time_entries/activities/14" - title: some other time entry activity - _links: - self: - href: "/api/v3/time_entries?offset=1&pageSize=2" - jumpTo: - href: "/api/v3/time_entries?offset=%7Boffset%7D&pageSize=2" - templated: true - changeSize: - href: "/api/v3/time_entries?offset=1&pageSize=%7Bsize%7D" - templated: true - nextByOffset: - href: "/api/v3/time_entries?offset=2&pageSize=2" - createTimeEntry: - href: "/api/v3/time_entries/form" - method: post - createTimeEntryImmediately: - href: "/api/v3/time_entries" - method: post diff --git a/docs/api/apiv3/components/schemas/time_entry_activity_model.yml b/docs/api/apiv3/components/schemas/time_entry_activity_model.yml new file mode 100644 index 00000000000..d3acb4701a5 --- /dev/null +++ b/docs/api/apiv3/components/schemas/time_entry_activity_model.yml @@ -0,0 +1,78 @@ +# Schema: TimeEntryActivityModel +--- +type: object +required: + - _type + - id + - name + - position + - default + - _embedded + - _links +properties: + _type: + type: string + enum: + - TimeEntriesActivity + id: + type: integer + description: Time entry id + minimum: 1 + name: + type: string + description: The human readable name chosen for this activity + position: + type: integer + description: The rank the activity has in a list of activities + default: + type: boolean + description: Flag to signal whether this activity is the default activity + _embedded: + type: object + required: + - projects + properties: + projects: + type: array + items: + $ref: './project_model.yml' + _links: + type: object + required: + - self + - projects + properties: + self: + allOf: + - $ref: './link.yml' + - description: |- + This time entry activity + + **Resource**: TimeEntriesActivity + projects: + type: array + items: + allOf: + - $ref: './link.yml' + - description: |- + One of the projects the time entry is active in. + + **Resource**: Project + +examples: + - _type: TimeEntriesActivity + id: 18 + name: Management + position: 8 + default: false + _embedded: + projects: [ ] + _links: + self: + href: "/api/v3/time_entries/activities/18" + title: Management + projects: + - href: "/api/v3/projects/death_star_v2" + title: DeathStarV2 + - href: "/api/v3/projects/star_killer_base" + title: StarKillerBase diff --git a/docs/api/apiv3/components/schemas/time_entry_collection_model.yml b/docs/api/apiv3/components/schemas/time_entry_collection_model.yml new file mode 100644 index 00000000000..74325d88250 --- /dev/null +++ b/docs/api/apiv3/components/schemas/time_entry_collection_model.yml @@ -0,0 +1,113 @@ +# Schema: TimeEntryCollectionModel +--- +type: object +allOf: + - $ref: './collection_model.yml' + - type: object + required: + - _links + - _embedded + properties: + _links: + type: object + required: + - self + properties: + self: + allOf: + - $ref: "./link.yml" + - description: |- + This time entry collection + + **Resource**: TimeEntryCollectionModel + _embedded: + type: object + required: + - elements + properties: + elements: + type: array + items: + $ref: './time_entry_model.yml' + +examples: + - _type: Collection + total: 39 + count: 2 + pageSize: 2 + offset: 1 + _embedded: + elements: + - _type: TimeEntry + id: 5 + comment: + format: plain + raw: Some comment + html: "Some comment
" + spentOn: '2015-03-20' + hours: PT5H + createdAt: '2015-03-20T12:56:56Z' + updatedAt: '2015-03-20T12:56:56Z' + _links: + self: + href: "/api/v3/time_entries/1" + updateImmediately: + href: "/api/v3/time_entries/1" + method: patch + delete: + href: "/api/v3/time_entries/1" + method: delete + project: + href: "/api/v3/projects/1" + title: Some project + workPackage: + href: "/api/v3/work_packages/1" + title: Some work package + user: + href: "/api/v3/users/2" + title: Some user + activity: + href: "/api/v3/time_entries/activities/18" + title: Some time entry activity + - _type: TimeEntry + id: 10 + comment: + format: plain + raw: Another comment + html: "Another comment
" + spentOn: '2015-03-21' + hours: PT7H + createdAt: '2015-03-20T12:56:56Z' + updatedAt: '2015-03-20T12:56:56Z' + _links: + self: + href: "/api/v3/time_entries/2" + project: + href: "/api/v3/projects/42" + title: Some other project + workPackage: + href: "/api/v3/work_packages/541" + title: Some other work package + user: + href: "/api/v3/users/6" + title: Some other project + activity: + href: "/api/v3/time_entries/activities/14" + title: some other time entry activity + _links: + self: + href: "/api/v3/time_entries?offset=1&pageSize=2" + jumpTo: + href: "/api/v3/time_entries?offset=%7Boffset%7D&pageSize=2" + templated: true + changeSize: + href: "/api/v3/time_entries?offset=1&pageSize=%7Bsize%7D" + templated: true + nextByOffset: + href: "/api/v3/time_entries?offset=2&pageSize=2" + createTimeEntry: + href: "/api/v3/time_entries/form" + method: post + createTimeEntryImmediately: + href: "/api/v3/time_entries" + method: post diff --git a/docs/api/apiv3/components/schemas/time_entry_model.yml b/docs/api/apiv3/components/schemas/time_entry_model.yml new file mode 100644 index 00000000000..60c7a7b6039 --- /dev/null +++ b/docs/api/apiv3/components/schemas/time_entry_model.yml @@ -0,0 +1,144 @@ +# Schema: TimeEntryModel +--- +type: object +properties: + id: + type: integer + description: The id of the time entry + minimum: 1 + comment: + allOf: + - $ref: './formattable.yml' + - description: A comment to the time entry + spentOn: + type: string + format: date + description: The date the expenditure is booked for + hours: + type: string + format: duration + description: The time quantifying the expenditure + createdAt: + type: string + format: date-time + description: The time the time entry was created + updatedAt: + type: string + format: date-time + description: The time the time entry was last updated + _links: + type: object + required: + - self + - project + - user + - activity + properties: + self: + allOf: + - "$ref": './link.yml' + - description: |- + This time entry + + **Resource**: TimeEntry + updateImmediately: + allOf: + - "$ref": './link.yml' + - description: |- + Directly perform edits on this time entry + + # Conditions + + **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user + update: + allOf: + - "$ref": './link.yml' + - description: |- + Form endpoint that aids in preparing and performing edits on a TimeEntry + + # Conditions + + **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user + delete: + allOf: + - "$ref": './link.yml' + - description: |- + Delete this time entry + + # Conditions + + **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user + schema: + allOf: + - "$ref": './link.yml' + - description: |- + The time entry schema + + **Resource**: Schema + project: + allOf: + - "$ref": './link.yml' + - description: |- + The project the time entry is bundled in. The project might be different from the work package's project once the workPackage is moved. + + **Resource**: Project + workPackage: + allOf: + - "$ref": './link.yml' + - description: |- + The work package the time entry is created on + + **Resource**: WorkPackage + user: + allOf: + - "$ref": './link.yml' + - description: |- + The user the time entry tracks expenditures for + + **Resource**: User + activity: + allOf: + - "$ref": './link.yml' + - description: |- + The time entry activity the time entry is categorized as + + **Resource**: TimeEntriesActivity + +examples: + - _type: TimeEntry + id: 42 + comment: + format: plain + raw: "The force shall set me free." + html: "The force shall set me free.
" + spentOn: '2023-01-11' + hours: 'PT4H' + createdAt: '2023-01-11T13:58:24Z' + updatedAt: '2023-01-11T13:58:24Z' + _links: + self: + href: '/api/v3/time_entries/42' + updateImmediately: + href: '/api/v3/time_entries/42' + method: patch + update: + href: '/api/v3/time_entries/42/form' + method: post + delete: + href: '/api/v3/time_entries/42' + method: delete + schema: + href: '/api/v3/time_entries/schema' + project: + href: '/api/v3/projects/11' + title: DeathStarV2 + workPackage: + href: '/api/v3/work_packages/77' + title: Build new hangar + user: + href: '/api/v3/users/3' + title: Darth Vader + activity: + href: '/api/v3/time_entries/activities/1' + title: Management + diff --git a/docs/api/apiv3/components/schemas/view_time_entries_activity_model.yml b/docs/api/apiv3/components/schemas/view_time_entries_activity_model.yml deleted file mode 100644 index 0235879f539..00000000000 --- a/docs/api/apiv3/components/schemas/view_time_entries_activity_model.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Schema: View_time_entries_activityModel ---- -type: object -example: - _type: TimeEntriesActivity - id: 18 - name: a autem - position: 10 - default: false - _embedded: - projects...: [] - _links: - self: - href: "/api/v3/time_entries/activities/18" - title: a autem - projects: - - href: "/api/v3/projects/seeded_project" - title: Seeded Project - - href: "/api/v3/projects/working-project" - title: Working Project diff --git a/docs/api/apiv3/components/schemas/view_time_entry_model.yml b/docs/api/apiv3/components/schemas/view_time_entry_model.yml deleted file mode 100644 index be6509e83b5..00000000000 --- a/docs/api/apiv3/components/schemas/view_time_entry_model.yml +++ /dev/null @@ -1,44 +0,0 @@ -# Schema: View_time_entryModel ---- -type: object -example: - _type: TimeEntry - id: 1 - comment: - format: plain - raw: Some text explaining why the time entry was created - html: "Some text explaining why the time entry was created
" - spentOn: '2015-03-20' - hours: PT5H - createdAt: '2015-03-20T12:56:56Z' - updatedAt: '2015-03-20T12:56:56Z' - customField12: 5 - _embedded: - project...: {} - workPackage...: {} - user...: {} - activity...: {} - _links: - self: - href: "/api/v3/time_entries/1" - updateImmediately: - href: "/api/v3/time_entries/1" - method: patch - delete: - href: "/api/v3/time_entries/1" - method: delete - project: - href: "/api/v3/projects/1" - title: Some project - workPackage: - href: "/api/v3/work_packages/1" - title: Some work package - user: - href: "/api/v3/users/2" - title: Some user - activity: - href: "/api/v3/time_entries/activities/18" - title: Some time entry activity - customField4: - href: "/api/v3/users/5" - title: Some other user diff --git a/docs/api/apiv3/openapi-spec.yml b/docs/api/apiv3/openapi-spec.yml index fe000a4a39d..9390b5ab972 100644 --- a/docs/api/apiv3/openapi-spec.yml +++ b/docs/api/apiv3/openapi-spec.yml @@ -379,7 +379,7 @@ paths: "/api/v3/time_entries/{id}/form": "$ref": "./paths/time_entries_id_form.yml" "/api/v3/time_entries/activity/{id}": - "$ref": "./paths/time_entries_activity_item.yml" + "$ref": "./paths/time_entry_activity.yml" "/api/v3/time_entries/available_projects": "$ref": "./paths/time_entries_available_projects.yml" "/api/v3/time_entries/form": @@ -541,9 +541,9 @@ components: "$ref": "./components/schemas/collection_model.yml" ConfigurationModel: "$ref": "./components/schemas/configuration_model.yml" - Custom_ActionModel: + CustomActionModel: "$ref": "./components/schemas/custom_action_model.yml" - Custom_OptionModel: + CustomOptionModel: "$ref": "./components/schemas/custom_option_model.yml" DayCollectionModel: "$ref": "./components/schemas/day_collection_model.yml" @@ -599,8 +599,6 @@ components: "$ref": "./components/schemas/list_projects_model.yml" List_projects_by_versionModel: "$ref": "./components/schemas/list_projects_by_version_model.yml" - List_time_entriesModel: - "$ref": "./components/schemas/list_time_entries_model.yml" MarkdownModel: "$ref": "./components/schemas/markdown_model.yml" NewsModel: @@ -701,6 +699,12 @@ components: "$ref": "./components/schemas/storage_read_model.yml" StorageWriteModel: "$ref": "./components/schemas/storage_write_model.yml" + TimeEntryActivityModel: + "$ref": "./components/schemas/time_entry_activity_model.yml" + TimeEntryCollectionModel: + "$ref": "./components/schemas/time_entry_collection_model.yml" + TimeEntryModel: + "$ref": "./components/schemas/time_entry_model.yml" TypeModel: "$ref": "./components/schemas/type_model.yml" TypesModel: @@ -741,10 +745,6 @@ components: "$ref": "./components/schemas/view_membership_schema_model.yml" View_project_statusModel: "$ref": "./components/schemas/view_project_status_model.yml" - View_time_entries_activityModel: - "$ref": "./components/schemas/view_time_entries_activity_model.yml" - View_time_entryModel: - "$ref": "./components/schemas/view_time_entry_model.yml" View_time_entry_schemaModel: "$ref": "./components/schemas/view_time_entry_schema_model.yml" View_user_schemaModel: diff --git a/docs/api/apiv3/paths/custom_action.yml b/docs/api/apiv3/paths/custom_action.yml index 67a54aec82a..c1ea35a6c41 100644 --- a/docs/api/apiv3/paths/custom_action.yml +++ b/docs/api/apiv3/paths/custom_action.yml @@ -1,67 +1,46 @@ # /api/v3/custom_actions/{id} --- get: + summary: Get a custom action + tags: + - Custom actions + description: Retrieves a custom action by id. + operationId: get_custom_action parameters: - - description: The id of the custom action to fetch - example: '1' - in: path - name: id - required: true - schema: - type: integer + - name: id + description: The id of the custom action to fetch + in: path + required: true + schema: + type: integer + example: 42 responses: '200': + description: OK content: application/hal+json: - examples: - response: - value: - _links: - executeImmediately: - href: "/apiChanges project and type in one go" - method: post - title: Execute Change project and type - self: - href: "/api/v3/custom_actions/2" - title: Change project and type - _type: CustomAction - description: Changes project and type in one go - name: Change project and type schema: - "$ref": "../components/schemas/custom_action_model.yml" - description: OK - headers: {} + $ref: '../components/schemas/custom_action_model.yml' '403': content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission - message: You are not authorized to access this resource. + $ref: '../components/schemas/error_response.yml' + example: + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission + message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit work packages in any project - headers: {} '404': + description: Returned if the custom action does not exist. content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:NotFound - message: The requested resource could not be found. - description: Returned if the custom action does not exist. - headers: {} - tags: - - Custom actions - description: '' - operationId: View_custom_action - summary: View custom action + $ref: '../components/schemas/error_response.yml' + example: + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:NotFound + message: The requested resource could not be found. diff --git a/docs/api/apiv3/paths/time_entries.yml b/docs/api/apiv3/paths/time_entries.yml index b13b5194e2d..5cdb4383d84 100644 --- a/docs/api/apiv3/paths/time_entries.yml +++ b/docs/api/apiv3/paths/time_entries.yml @@ -1,214 +1,138 @@ # /api/v3/time_entries --- get: + summary: List time entries + operationId: list_time_entries + tags: + - Time entries + description: |- + Lists time entries. The time entries returned depend on the filters + provided and also on the permission of the requesting user. parameters: - - description: Page number inside the requested collection. - example: '25' - in: query - name: offset - required: false - schema: - default: 1 - type: integer - - description: Number of elements to display per page. - example: '25' - in: query - name: pageSize - required: false - schema: - type: integer - - description: |- - JSON specifying sort criteria. - Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: - - + id: Sort by primary key - - + hours: Sort by logged hours - - + spent_on: Sort by spent on date - - + created_at: Sort by time entry creation datetime - - + updated_at: Sort by the time the time entry was updated last - example: '[["spent_on", "asc"]]' - in: query - name: sortBy - required: false - schema: - default: '["spent_on", "asc"]' - type: string - - description: |- - JSON specifying filter conditions. - Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: - - + work_package: Filter time entries by work package - - + project: Filter time entries by project - - + user: Filter time entries by users - - + spent_on: Filter time entries by spent on date - - + created_at: Filter time entries by creation datetime - - + updated_at: Filter time entries by the last time they where updated - - + activity: Filter time entries by time entry activity - example: '[{ "work_package": { "operator": "=", "values": ["1", "2"] } }, { "project": - { "operator": "=", "values": ["1"] } }]' - in: query - name: filters - required: false - schema: - type: string + - name: offset + description: Page number inside the requested collection. + example: 25 + in: query + required: false + schema: + default: 1 + type: integer + - name: pageSize + description: Number of elements to display per page. + example: '25' + in: query + required: false + schema: + type: integer + - name: sortBy + description: |- + JSON specifying sort criteria. + Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: + + + id: Sort by primary key + + + hours: Sort by logged hours + + + spent_on: Sort by spent on date + + + created_at: Sort by time entry creation datetime + + + updated_at: Sort by the time the time entry was updated last + example: '[["spent_on", "asc"]]' + in: query + required: false + schema: + default: '["spent_on", "asc"]' + type: string + - name: filters + description: |- + JSON specifying filter conditions. + Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + + + work_package: Filter time entries by work package + + + project: Filter time entries by project + + + user: Filter time entries by users + + + spent_on: Filter time entries by spent on date + + + created_at: Filter time entries by creation datetime + + + updated_at: Filter time entries by the last time they where updated + + + activity: Filter time entries by time entry activity + example: '[{ "work_package": { "operator": "=", "values": ["1", "2"] } }, { "project": { "operator": "=", "values": ["1"] } }]' + in: query + required: false + schema: + type: string responses: '200': - content: - application/hal+json: - examples: - response: - value: - _embedded: - elements: - - _links: - activity: - href: "/api/v3/time_entries/activities/18" - title: Some time entry activity - delete: - href: "/api/v3/time_entries/1" - method: delete - project: - href: "/api/v3/projects/1" - title: Some project - self: - href: "/api/v3/time_entries/1" - updateImmediately: - href: "/api/v3/time_entries/1" - method: patch - user: - href: "/api/v3/users/2" - title: Some user - workPackage: - href: "/api/v3/work_packages/1" - title: Some work package - _type: TimeEntry - comment: - format: plain - html: "Some comment
" - raw: Some comment - createdAt: '2015-03-20T12:56:56Z' - hours: PT5H - id: 5 - spentOn: '2015-03-20' - updatedAt: '2015-03-20T12:56:56Z' - - _links: - activity: - href: "/api/v3/time_entries/activities/14" - title: some other time entry activity - project: - href: "/api/v3/projects/42" - title: Some other project - self: - href: "/api/v3/time_entries/2" - user: - href: "/api/v3/users/6" - title: Some other project - workPackage: - href: "/api/v3/work_packages/541" - title: Some other work package - _type: TimeEntry - comment: - format: plain - html: "Another comment
" - raw: Another comment - createdAt: '2015-03-20T12:56:56Z' - hours: PT7H - id: 10 - spentOn: '2015-03-21' - updatedAt: '2015-03-20T12:56:56Z' - _links: - changeSize: - href: "/api/v3/time_entries?offset=1&pageSize=%7Bsize%7D" - templated: true - createTimeEntry: - href: "/api/v3/time_entries/form" - method: post - createTimeEntryImmediately: - href: "/api/v3/time_entries" - method: post - jumpTo: - href: "/api/v3/time_entries?offset=%7Boffset%7D&pageSize=2" - templated: true - nextByOffset: - href: "/api/v3/time_entries?offset=2&pageSize=2" - self: - href: "/api/v3/time_entries?offset=1&pageSize=2" - _type: Collection - count: 2 - offset: 1 - pageSize: 2 - total: 39 - schema: - "$ref": "../components/schemas/list_time_entries_model.yml" description: OK - headers: {} - '400': - $ref: "../components/responses/invalid_request_body.yml" - '403': content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission - message: You are not authorized to view this resource. + $ref: '../components/schemas/time_entry_collection_model.yml' + '400': + $ref: '../components/responses/invalid_request_body.yml' + '403': description: Returned if the client is not logged in and login is required. - headers: {} - tags: - - Time Entries - description: Lists time entries. The time entries returned depend on the filters - provided and also on the permission of the requesting user. - operationId: List_time_entries - summary: List time entries + content: + application/hal+json: + schema: + $ref: '../components/schemas/error_response.yml' + example: + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission + message: You are not authorized to view this resource. + post: + summary: Create time entry + tags: + - Time entries + description: |- + Creates a new time entry applying the attributes provided in the body. + Please note that while there is a fixed set of attributes, custom fields can extend + a time entries' attributes and are accepted by the endpoint. + operationId: create_time_entry responses: '201': - content: - application/hal+json: - schema: - "$ref": "../components/schemas/view_time_entry_model.yml" description: Created - headers: {} - '400': - $ref: "../components/responses/invalid_request_body.yml" - '403': content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" + $ref: '../components/schemas/time_entry_model.yml' + '400': + $ref: '../components/responses/invalid_request_body.yml' + '403': + description: |- + Returned if the client does not have sufficient permissions. + + **Required permission:** Log time + content: + application/hal+json: + schema: + $ref: '../components/schemas/error_response.yml' examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. - description: |- - Returned if the client does not have sufficient permissions. - - **Required permission:** Log time - headers: {} '406': - $ref: "../components/responses/missing_content_type.yml" + $ref: '../components/responses/missing_content_type.yml' '415': - $ref: "../components/responses/unsupported_media_type.yml" + $ref: '../components/responses/unsupported_media_type.yml' '422': + description: |- + Returned if: + + * a constraint for a property was violated (`PropertyConstraintViolation`) content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" + $ref: '../components/schemas/error_response.yml' examples: response: value: @@ -218,15 +142,3 @@ post: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Work package is invalid. - description: |- - Returned if: - - * a constraint for a property was violated (`PropertyConstraintViolation`) - headers: {} - tags: - - Time Entries - description: Creates a new time entry applying the attributes provided in the body. - Please note that while there is a fixed set of attributes, custom fields can extend - a time entries' attributes and are accepted by the endpoint. - operationId: Create_Time_entry - summary: Create Time entry diff --git a/docs/api/apiv3/paths/time_entries_activity_item.yml b/docs/api/apiv3/paths/time_entries_activity_item.yml deleted file mode 100644 index 55793b38b73..00000000000 --- a/docs/api/apiv3/paths/time_entries_activity_item.yml +++ /dev/null @@ -1,59 +0,0 @@ -# /api/v3/time_entries/activity/{id} ---- -get: - parameters: - - description: Time entries activity id - example: '1' - in: path - name: id - required: true - schema: - type: integer - responses: - '200': - content: - application/hal+json: - examples: - response: - value: - _embedded: - projects...: [] - _links: - projects: - - href: "/api/v3/projects/seeded_project" - title: Seeded Project - - href: "/api/v3/projects/working-project" - title: Working Project - self: - href: "/api/v3/time_entries/activities/18" - title: a autem - _type: TimeEntriesActivity - default: false - id: 18 - name: a autem - position: 10 - schema: - "$ref": "../components/schemas/view_time_entries_activity_model.yml" - description: OK - headers: {} - '404': - content: - application/hal+json: - schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:NotFound - message: The requested resource could not be found. - description: |- - Returned if the activity does not exist or if the user does not have permission to view them. - - **Required permission** `view time entries`, `log time`, `edit time entries`, `edit own time entries` or `manage project activities` in any project - headers: {} - tags: - - Time Entry Activities - description: '' - operationId: View_time_entries_activity - summary: View time entries activity diff --git a/docs/api/apiv3/paths/time_entry.yml b/docs/api/apiv3/paths/time_entry.yml index f60468a7e21..321440e6634 100644 --- a/docs/api/apiv3/paths/time_entry.yml +++ b/docs/api/apiv3/paths/time_entry.yml @@ -1,199 +1,144 @@ # /api/v3/time_entries/{id} --- delete: + summary: Delete time entry + tags: + - Time entries + description: Permanently deletes the specified time entry. + operationId: delete_time_entry parameters: - - description: Time entry id - example: '1' - in: path - name: id - required: true - schema: - type: integer + - name: id + description: Time entry id + example: 1 + in: path + required: true + schema: + type: integer responses: '204': description: Returned if the time entry was deleted successfully. - headers: {} '403': - content: - application/hal+json: - schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission - message: You are not authorized to access this resource. description: Returned if the client does not have sufficient permissions - headers: {} - '404': content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:NotFound - message: The requested resource could not be found. + $ref: '../components/schemas/error_response.yml' + example: + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission + message: You are not authorized to access this resource. + '404': description: |- Returned if the time entry does not exist or if the user does not have sufficient permissions to see the time entry. **Required permission** `view time entries` in the project the time entry is assigned to or `view own time entries` for time entries belonging to the user - headers: {} + content: + application/hal+json: + schema: + $ref: '../components/schemas/error_response.yml' + example: + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:NotFound + message: The requested resource could not be found. '406': - $ref: "../components/responses/missing_content_type.yml" + $ref: '../components/responses/missing_content_type.yml' '415': - $ref: "../components/responses/unsupported_media_type.yml" - tags: - - Time Entries - description: Permanently deletes the specified time entry. - operationId: Delete_time_entry - summary: Delete time entry + $ref: '../components/responses/unsupported_media_type.yml' + get: + summary: Get time entry + tags: + - Time entries + description: Retrieves a single time entry identified by the given id. + operationId: get_time_entry parameters: - - description: time entry id - example: '1' - in: path - name: id - required: true - schema: - type: integer + - name: id + description: time entry id + example: 1 + in: path + required: true + schema: + type: integer responses: '200': - content: - application/hal+json: - examples: - response: - value: - _embedded: - activity...: {} - project...: {} - user...: {} - workPackage...: {} - _links: - activity: - href: "/api/v3/time_entries/activities/18" - title: Some time entry activity - customField4: - href: "/api/v3/users/5" - title: Some other user - delete: - href: "/api/v3/time_entries/1" - method: delete - project: - href: "/api/v3/projects/1" - title: Some project - self: - href: "/api/v3/time_entries/1" - updateImmediately: - href: "/api/v3/time_entries/1" - method: patch - user: - href: "/api/v3/users/2" - title: Some user - workPackage: - href: "/api/v3/work_packages/1" - title: Some work package - _type: TimeEntry - comment: - format: plain - html: "Some text explaining why the time entry was created
" - raw: Some text explaining why the time entry was created - createdAt: '2015-03-20T12:56:56Z' - customField12: 5 - hours: PT5H - id: 1 - spentOn: '2015-03-20' - updatedAt: '2015-03-20T12:56:56Z' - schema: - "$ref": "../components/schemas/view_time_entry_model.yml" description: OK - headers: {} - '404': content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:NotFound - message: The requested resource could not be found. + $ref: '../components/schemas/time_entry_model.yml' + '404': description: |- Returned if the time entry does not exist or if the user does not have permission to view them. - **Required permission** `view time entries` in the project the time entry is assigned to or `view own time entries` for time entries belonging to the user - headers: {} - tags: - - Time Entries - description: '' - operationId: View_time_entry - summary: View time entry + **Required permission** + - `view time entries` in the project the time entry is assigned to or + - `view own time entries` for time entries belonging to the user + content: + application/hal+json: + schema: + $ref: '../components/schemas/error_response.yml' + example: + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:NotFound + message: The requested resource could not be found. + patch: + summary: update time entry + tags: + - Time Entries + description: |- + Updates the given time entry by applying the attributes provided in + the body. Please note that while there is a fixed set of attributes, custom fields + can extend a time entries' attributes and are accepted by the endpoint. + operationId: update_time_entry parameters: - - description: Time entry id - example: '1' - in: path - name: id - required: true - schema: - type: integer + - name: id + description: Time entry id + example: 1 + in: path + required: true + schema: + type: integer responses: '200': - content: - application/hal+json: - schema: - "$ref": "../components/schemas/view_time_entry_model.yml" description: OK - headers: {} - '400': - $ref: "../components/responses/invalid_request_body.yml" - '403': content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission - message: You are not authorized to access this resource. + $ref: '../components/schemas/time_entry_model.yml' + '400': + $ref: '../components/responses/invalid_request_body.yml' + '403': description: |- Returned if the client does not have sufficient permissions. **Required permission:** Edit (own) time entries, depending on what time entry is being modified. - headers: {} - '406': - $ref: "../components/responses/missing_content_type.yml" - '415': - $ref: "../components/responses/unsupported_media_type.yml" - '422': content: application/hal+json: schema: - $ref: "../components/schemas/error_response.yml" - examples: - response: - value: - _embedded: - details: - attribute: workPackage - _type: Error - errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation - message: Work package is invalid. + $ref: '../components/schemas/error_response.yml' + example: + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission + message: You are not authorized to access this resource. + headers: { } + '406': + $ref: '../components/responses/missing_content_type.yml' + '415': + $ref: '../components/responses/unsupported_media_type.yml' + '422': description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) - headers: {} - tags: - - Time Entries - description: Updates the given time entry by applying the attributes provided in - the body. Please note that while there is a fixed set of attributes, custom fields - can extend a time entries' attributes and are accepted by the endpoint. - operationId: Update_Time_entry - summary: Update Time entry + content: + application/hal+json: + schema: + $ref: '../components/schemas/error_response.yml' + example: + _embedded: + details: + attribute: workPackage + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation + message: Work package is invalid. diff --git a/docs/api/apiv3/paths/time_entry_activity.yml b/docs/api/apiv3/paths/time_entry_activity.yml new file mode 100644 index 00000000000..b9fa52016b1 --- /dev/null +++ b/docs/api/apiv3/paths/time_entry_activity.yml @@ -0,0 +1,39 @@ +# /api/v3/time_entries/activity/{id} +--- +get: + summary: View time entries activity + operationId: get_time_entries_activity + tags: + - Time entry activities + description: Fetches the time entry activity resource by the given id. + parameters: + - name: id + description: Time entries activity id + in: path + example: 1 + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/hal+json: + schema: + $ref: '../components/schemas/time_entry_activity_model.yml' + '404': + description: |- + Returned if the activity does not exist or if the user does not have permission to view them. + + **Required permission** `view time entries`, `log time`, `edit time entries`, `edit own time entries` or + `manage project activities` in any project + content: + application/hal+json: + schema: + $ref: '../components/schemas/error_response.yml' + examples: + response: + value: + _type: Error + errorIdentifier: urn:openproject-org:api:v3:errors:NotFound + message: The requested resource could not be found. diff --git a/docs/api/apiv3/tags/time_entries.yml b/docs/api/apiv3/tags/time_entries.yml index 3fdbb7d3785..7fb94478919 100644 --- a/docs/api/apiv3/tags/time_entries.yml +++ b/docs/api/apiv3/tags/time_entries.yml @@ -34,4 +34,4 @@ description: |- | updatedAt | The time the time entry was last updated | DateTime | | READ | | Depending on custom fields defined for time entries, additional properties might exist. -name: Time Entries +name: Time entries diff --git a/docs/api/apiv3/tags/time_entry_activities.yml b/docs/api/apiv3/tags/time_entry_activities.yml index f26fe07282b..f0c6c052ce2 100644 --- a/docs/api/apiv3/tags/time_entry_activities.yml +++ b/docs/api/apiv3/tags/time_entry_activities.yml @@ -21,4 +21,4 @@ description: |- | name | The human readable name chosen for this activity | String | max 30 characters | READ | | | position | The rank the activity has in a list of activities | Date | | READ | | | default | Flag to signal whether this activity is the default activity | Boolean | | READ | | -name: Time Entry Activities +name: Time entry activities