From d6494b4935e2341925d304e649d1072e330ad5fd Mon Sep 17 00:00:00 2001 From: David Holub <74815577+Corpratespaz@users.noreply.github.com> Date: Wed, 22 Mar 2023 08:52:14 +0700 Subject: [PATCH 1/6] OSMT-25: OpenAPI spec file to match current API --- docs/int/openapi.yaml | 1546 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1546 insertions(+) create mode 100644 docs/int/openapi.yaml diff --git a/docs/int/openapi.yaml b/docs/int/openapi.yaml new file mode 100644 index 000000000..1ace98ed1 --- /dev/null +++ b/docs/int/openapi.yaml @@ -0,0 +1,1546 @@ +openapi: 3.0.0 + +info: + title: OSMT API + description: API for the Open Skills Management Toolset + termsOfService: TODO + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 2.5.0 + +paths: + /api/collections: + get: + summary: Get all collections + description: Returns all collections + tags: + - Collections + parameters: + - $ref: '#/components/parameters/PaginationSizeQueryRequired' + - $ref: '#/components/parameters/PaginationFromQueryRequired' + - $ref: '#/components/parameters/PublishStatusQueryRequired' + - $ref: '#/components/parameters/SortOrderQuery' + responses: + '200': + description: OK + headers: + X-Total-Count: + $ref: '#/components/headers/XTotalCount' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CollectionDoc' + post: + summary: Define a collection + description: Create a new collection in OSMT + tags: + - Collections + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CollectionUpdate' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Collection' + '400': + $ref: '#/components/responses/BadRequest' + + /api/collections/{uuid}: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Retrieve a collection + description: Retrieve all the information about a collection + tags: + - Collections + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Collection' + + /api/collections/{uuid}/csv: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Request a collection export + description: Request all the information about a collection to be exported + tags: + - Collections + responses: + '200': + description: OK + content: + text/csv: + schema: + type: string + example: >- + id,type,author,skillName,skillStatement,alignments,keywords,category,occupations + https://osmt.example.com/skills/9cd84455-2086-4f41-bcac-6d518beeb6ac,RichSkillDescriptor,"https://osmt.example.com/organization","Document Saving","The learner copies and saves documents to their local machine.","https://skillsource.example.com/base-skills/simple-compuhacking","documents, file operations, computer basics","Productivity Software","13-0000, 13-2000, 13-2010, 13-2030, 13-2040, 13-2060, 13-2080" + + /api/collections/{uuid}/log: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Retrieve a collection log + description: Retrieve the audit log entries of a collection + tags: + - Collections + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AuditLog' + + /api/collections/{uuid}/remove: + parameters: + - $ref: '#/components/parameters/UuidPath' + delete: + summary: Remove a collection + description: Delete a collection from OSMT + tags: + - Collections + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + + /api/collections/{uuid}/skills: + parameters: + - $ref: '#/components/parameters/UuidPath' + post: + summary: Retrieve the skills in a collection + description: Retrieve paginated summaries of skills that belong to the collection + tags: + - Collections + parameters: + - $ref: '#/components/parameters/PaginationSizeQuery' + - $ref: '#/components/parameters/PaginationFromQuery' + - $ref: '#/components/parameters/PublishStatusQuery' + - $ref: '#/components/parameters/SortOrderQuery' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Search' + responses: + '200': + description: OK + headers: + X-Total-Count: + $ref: '#/components/headers/XTotalCount' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SkillDoc' + + /api/collections/{uuid}/update: + parameters: + - $ref: '#/components/parameters/UuidPath' + post: + summary: Update a collection + description: Update an existing collection + tags: + - Collections + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionUpdate' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Collection' + '400': + $ref: '#/components/responses/BadRequest' + + /api/collections/{uuid}/updateSkills: + parameters: + - $ref: '#/components/parameters/UuidPath' + post: + summary: Add or remove skills from a collection + description: Add or remove one or more skills from an existing collection + tags: + - Collections + parameters: + - $ref: '#/components/parameters/PublishStatusQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SkillListUpdate' + responses: + '202': + description: Accepted + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + links: + UpdateSkillsBatchResults: + operationRef: '/api/results/batch/{uuid}' + parameters: + uuid: '$response.body#/uuid' + + /api/collections/publish: + post: + summary: Publish, Archive, or Unarchive multiple collections + description: Publish, Archive, or Unarchive one or more collections + tags: + - Collections + parameters: + - name: newStatus + in: query + required: false + schema: + type: string + default: Published + enum: + - Published + - Archived + - Draft + - name: filterByStatus + in: query + required: false + schema: + type: array + default: + - Draft + - Published + items: + $ref: '#/components/schemas/PublishStatus' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Search' + responses: + '202': + description: Accepted + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + links: + PublishCollectionsBatchResults: + operationRef: '/api/results/batch/{uuid}' + parameters: + uuid: '$response.body#/uuid' + + /api/export/library: + get: + summary: Export OSMT RSD library + description: Export all RSDs contained in OSMT + tags: + - Export + responses: + '202': + description: Accepted + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + links: + PublishLibraryTextResults: + operationRef: '/api/results/text/{uuid}' + parameters: + uuid: '$response.body#/uuid' + + /api/export/skills: + post: + summary: Export RSDs + description: Export one or more RSDs + tags: + - Export + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: string + format: uuid + responses: + '202': + description: Accepted + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + links: + PublishLibraryTextResults: + operationRef: '/api/results/text/{uuid}' + parameters: + uuid: '$response.body#/uuid' + + /api/results/batch/{uuid}: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Retrieve the results of a batch task + description: Return the results of a previously requested batch task + tags: + - Export + responses: + '200': + description: OK + content: + application/json: + schema: + type: string + '404': + description: NOT READY + + /api/results/skills/{uuid}: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Retrieve an RSD + description: Retrieve all the information about a Rich Skill Descriptor + tags: + - Export + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Skill' + + /api/results/text/{uuid}: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Retrieve the results of a CSV task + description: Return the results of a previously requested csv task + tags: + - Export + responses: + '200': + description: OK + content: + text/csv: + schema: + type: string + '404': + description: NOT READY + + /api/search/collections: + post: + summary: Search for collections using filters + description: Return summaries of collections that match the provided query + tags: + - Search + parameters: + - $ref: '#/components/parameters/PaginationSizeQuery' + - $ref: '#/components/parameters/PaginationFromQuery' + - $ref: '#/components/parameters/PublishStatusQuery' + - $ref: '#/components/parameters/SortOrderQuery' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Search' + responses: + '200': + description: OK + headers: + X-Total-Count: + $ref: '#/components/headers/XTotalCount' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CollectionDoc' + + /api/search/jobcodes: + get: + summary: Search for job codes (occupations) + description: Return job codes (occupations) that match the provided query + tags: + - Search + parameters: + - name: query + in: query + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/JobCode' + + /api/search/keywords: + get: + summary: Search for keyword like objects + description: Return matching or partially matching keywords + tags: + - Search + parameters: + - name: query + in: query + required: true + schema: + type: string + - name: type + in: query + required: true + schema: + $ref: '#/components/schemas/KeywordType' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/NamedReference' + + /api/search/skills: + post: + summary: Search for skills + description: Return summaries for skills that match the provided query + tags: + - Search + parameters: + - $ref: '#/components/parameters/PaginationSizeQuery' + - $ref: '#/components/parameters/PaginationFromQuery' + - $ref: '#/components/parameters/PublishStatusQuery' + - $ref: '#/components/parameters/SortOrderQuery' + - name: collectionId + in: query + schema: + type: string + format: uri + description: Limit skills to those associated with given collection id + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Search' + responses: + '200': + description: OK + headers: + X-Total-Count: + $ref: '#/components/headers/XTotalCount' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SkillDoc' + + /api/search/skills/similarities: + post: + summary: Check skill multiple statements for similar statements on existing skills + description: Returns indicators that signify whether duplicates are found for each submitted statement + tags: + - Search + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Similarity' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + type: boolean + + /api/search/skills/similarity: + post: + summary: Check a skills statement for similar statements on existing skills + description: Returns skills which have a similar skills statement to the queried skills statement + tags: + - Search + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Similarity' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SkillSummary' + + /api/skills: + get: + summary: Get all RSDs + description: Returns all Rich Skill Descriptors (RSDs) + tags: + - Skills + parameters: + - $ref: '#/components/parameters/PaginationSizeQueryRequired' + - $ref: '#/components/parameters/PaginationFromQueryRequired' + - $ref: '#/components/parameters/PublishStatusQueryRequired' + - $ref: '#/components/parameters/SortOrderQuery' + responses: + '200': + description: OK + headers: + X-Total-Count: + $ref: '#/components/headers/XTotalCount' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SkillDoc' + post: + summary: Define an RSD + description: Create a new Rich Skill Descriptor (RSD) in OSMT + tags: + - Skills + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SkillUpdate' + responses: + '202': + description: Accepted + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + links: + CreateSkillResults: + operationRef: '/api/results/skills/{uuid}' + parameters: + uuid: '$response.body#/uuid' + '400': + $ref: '#/components/responses/BadRequest' + + /api/skills/{uuid}/log: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Retrieve a Rich Skill Descriptor (RSD) log + description: Retrieve the audit log entries of a Rich Skill Descriptor (RSD) + tags: + - Skills + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AuditLog' + + /api/skills/{uuid}/update: + parameters: + - $ref: '#/components/parameters/UuidPath' + post: + summary: Update a Rich Skill Descriptor (RSD) + description: Update an existing Rich Skill Descriptor (RSD) + tags: + - Skills + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SkillUpdate' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Skill' + '400': + $ref: '#/components/responses/BadRequest' + + /api/skills/filter: + post: + summary: Advanced filtered search for Rich Skill Descriptors (RSDs) + description: Return list of Rich Skill Descriptors (RSDs) that match the provided query + tags: + - Skills + parameters: + - $ref: '#/components/parameters/PaginationSizeQueryRequired' + - $ref: '#/components/parameters/PaginationFromQueryRequired' + - $ref: '#/components/parameters/PublishStatusQueryRequired' + - $ref: '#/components/parameters/SortOrderQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Search' + responses: + '202': + description: Ok + headers: + X-Total-Count: + $ref: '#/components/headers/XTotalCount' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SkillDoc' + '400': + $ref: '#/components/responses/BadRequest' + + /api/skills/publish: + post: + summary: Publish, Archive, or Unarchive multiple Rich Skill Descriptors (RSDs) + description: Publish, Archive, or Unarchive one or more Rich Skill Descriptors (RSDs) + tags: + - Skills + parameters: + - name: newStatus + in: query + required: false + schema: + type: string + default: Published + enum: + - Draft + - Published + - name: filterByStatus + in: query + required: false + schema: + type: array + default: + - Draft + - Published + items: + $ref: '#/components/schemas/PublishStatus' + - $ref: 'components/parameters/UuidReference' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Search' + responses: + '202': + description: Accepted + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + links: + PublishBatchResults: + operationRef: '/api/results/batch/{uuid}' + parameters: + uuid: '$response.body#/uuid' + + /api/workspace: + get: + summary: Retrieve user workspace + description: Retrieves or initializes the user's workspace + tags: + - Workspace + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Collection' + +components: + schemas: + AdvancedSearch: + type: object + properties: + skillName: + type: string + collectionName: + type: string + category: + type: string + skillStatement: + type: string + author: + type: string + keywords: + type: array + items: + type: string + occupations: + type: array + items: + type: string + standards: + type: array + items: + $ref: '#/components/schemas/NamedReference' + certifications: + type: array + items: + $ref: '#/components/schemas/NamedReference' + employers: + type: array + items: + $ref: '#/components/schemas/NamedReference' + alignments: + type: array + items: + $ref: '#/components/schemas/NamedReference' + + Alignment: + type: object + properties: + id: + type: string + format: uri + skillName: + type: string + isPartOf: + $ref: '#/components/schemas/NamedReference' + + AlignmentListUpdate: + type: object + properties: + add: + type: array + items: + $ref: '#/components/schemas/Alignment' + remove: + type: array + items: + $ref: '#/components/schemas/Alignment' + + AuditLog: + type: object + required: + - creationDate + - operationType + - user + - changedFields + properties: + creationDate: + type: string + format: date-time + operationType: + type: string + enum: + - Insert + - Update + - PublishStatusChange + user: + type: string + changedFields: + type: array + items: + $ref: '#/components/schemas/Change' + + Change: + type: object + required: + - fieldName + properties: + fieldName: + type: string + old: + type: string + new: + type: string + + Collection: + type: object + required: + - id + - uuid + - name + properties: + id: + type: string + format: uri + uuid: + type: string + format: uuid + name: + type: string + description: + type: string + creator: + type: string + format: uri + status: + $ref: '#/components/schemas/PublishStatus' + creationDate: + type: string + format: date-time + updateDate: + type: string + format: date-time + publishDate: + type: string + format: date-time + archiveDate: + type: string + format: date-time + author: + type: string + skills: + type: array + items: + $ref: '#/components/schemas/SkillSummary' + + CollectionDoc: + type: object + required: + - uuid + - name + - status + properties: + uuid: + type: string + format: uuid + name: + type: string + description: + type: string + status: + $ref: '#/components/schemas/PublishStatus' + skillCount: + type: integer + publishDate: + type: string + format: date-time + archiveDate: + type: string + format: date-time + workspaceOwner: + type: string + + CollectionUpdate: + type: object + properties: + name: + type: string + description: + type: string + status: + $ref: '#/components/schemas/PublishStatus' + author: + type: string + skills: + $ref: '#/components/schemas/StringListUpdate' + + ErrorResult: + type: object + required: + - errors + properties: + message: + type: string + errors: + type: array + items: + $ref: '#/components/schemas/FieldError' + + FieldError: + type: object + required: + - field + - message + properties: + field: + type: string + message: + type: string + rowNumber: + type: number + + FilteredSearch: + type: object + properties: + categories: + type: array + items: + type: string + keywords: + type: array + items: + type: string + standards: + type: array + items: + type: string + certifications: + type: array + items: + type: string + alignments: + type: array + items: + type: string + jobcodes: + type: array + items: + type: string + employers: + type: array + items: + type: string + authors: + type: array + items: + type: string + occupations: + type: array + items: + type: string + + JobCode: + type: object + required: + - code + properties: + code: + type: string + targetNode: + type: string + targetNodeName: + type: string + frameworkName: + type: string + level: + $ref: '#/components/schemas/JobCodeLevel' + parents: + type: array + items: + $ref: '#/components/schemas/JobCode' + + JobCodeLevel: + type: string + enum: + - onet + - detailed + - broad + - minor + - major + + KeywordType: + type: string + enum: + - category + - keyword + - standard + - certification + - alignment + - employer + - author + + NamedReference: + type: object + properties: + id: + type: string + format: uri + name: + type: string + + PublishStatus: + type: string + enum: + - Unarchived + - Deleted + - Workspace + - Published + - Archived + - Draft + + ReferenceListUpdate: + type: object + properties: + add: + type: array + items: + $ref: '#/components/schemas/NamedReference' + remove: + type: array + items: + $ref: '#/components/schemas/NamedReference' + + Search: + type: object + properties: + query: + type: string + advanced: + $ref: '#/components/schemas/AdvancedSearch' + filtered: + $ref: '#/components/schemas/FilteredSearch' + uuids: + type: array + items: + type: string + + Similarity: + type: object + required: + - statement + properties: + statement: + type: string + + Skill: + type: object + required: + - context + - type + - creator + - creationDate + - updateDate + - skillName + - skillStatement + - keywords + - id + - uuid + - certifications + - standards + - alignments + - occupations + - employers + - collections + properties: + '@context': + type: string + format: uri + type: + type: string + default: RichSkillDescriptor + creator: + type: string + format: uri + author: + type: string + status: + $ref: '#/components/schemas/PublishStatus' + creationDate: + type: string + format: date-time + updateDate: + type: string + format: date-time + publishDate: + type: string + format: date-time + archiveDate: + type: string + format: date-time + skillName: + type: string + skillStatement: + type: string + keywords: + type: array + items: + type: string + category: + type: string + id: + type: string + format: uri + uuid: + type: string + format: uuid + certifications: + type: array + items: + $ref: '#/components/schemas/NamedReference' + standards: + type: array + items: + $ref: '#/components/schemas/Alignment' + alignments: + type: array + items: + $ref: '#/components/schemas/Alignment' + occupations: + type: array + items: + $ref: '#/components/schemas/JobCode' + employers: + type: array + items: + $ref: '#/components/schemas/NamedReference' + collections: + type: array + items: + $ref: '#/components/schemas/UuidReference' + example: + '@context': 'https://rsd.openskillsnetwork.org/context-v1.json' + type: RichSkillDescriptor + creator: 'https://credentialengineregistry.org/resources/ce-036d082d-d80e-41a7-99a0-2d63a4ad3a4a' + author: Western Governors University + status: published + creationDate: '2023-02-27T21:02:59.918235Z' + updateDate: '2023-03-14T14:38:15.945775Z' + publishDate: '2023-03-14T14:38:15.946228Z' + archiveDate: null + skillName: Network Connection Design + skillStatement: Design network connections between a core network and an internet service provider. + keywords: + - design + - Access Network + - 'WGUSID: 10407' + category: Access Network + id: '-http://localhost:8080/api/skills/cad699ef-64b9-40ee-81db-b5de69a90558' + uuid: cad699ef-64b9-40ee-81db-b5de69a90558 + certifications: + - name: '300-420_ENSLD' + standards: [] + alignments: + - id: 'https://skills.emsidata.com/skills/KS1203M5X6LQVSRTW88J' + - skillName: Access Network + occupations: + - code: '15-0000' + targetNodeName: Computer and Mathematical Occupations + frameworkName: bls + parents: + - code: '15-0000' + targetNodeName: Computer and Mathematical Occupations + level: Major + - code: '15-1200' + targetNodeName: Computer Occupations + frameworkName: bls + parents: + - code: '15-0000' + targetNodeName: Computer and Mathematical Occupations + level: Major + - code: '15-1200' + targetNodeName: Computer Occupations + level: Minor + - code: '15-1230' + targetNodeName: Computer Support Specialists + frameworkName: bls + parents: + - code: '15-0000' + targetNodeName: Computer and Mathematical Occupations + level: Major + - code: '15-1200' + targetNodeName: Computer Occupations + level: Minor + - code: '15-1230' + targetNodeName: Computer Support Specialists + level: Broad + - code: '15-1231' + targetNodeName: Computer Network Support Specialists + frameworkName: bls + parents: + - code: '15-0000' + targetNodeName: Computer and Mathematical Occupations + level: Major + - code: '15-1200' + targetNodeName: Computer Occupations + level: Minor + - code: '15-1230' + targetNodeName: Computer Support Specialists + level: Broad + - code: '15-1231' + targetNodeName: Computer Network Support Specialists + level: Detailed + employers: [] + collections: + - uuid: '79914f33-0ef2-43a1-b5b0-e1fc70d5173c' + name: IT field + - uuid: '42d882da-aec3-4e0d-9582-c8559912a9c6' + name: I.T Network + + SkillDoc: + type: object + required: + - uuid + - id + - skillName + - skillStatement + - publishStatus + - keywords + - occupations + - standards + properties: + uuid: + type: string + format: uuid + id: + type: string + format: uri + skillName: + type: string + skillStatement: + type: string + category: + type: string + author: + type: string + status: + $ref: '#/components/schemas/PublishStatus' + keywords: + type: array + items: + type: string + occupations: + type: array + items: + $ref: '#/components/schemas/JobCode' + standards: + type: array + items: + type: string + publishDate: + type: string + format: date-time + archiveDate: + type: string + format: date-time + + SkillListUpdate: + type: object + properties: + add: + $ref: '#/components/schemas/Search' + remove: + $ref: '#/components/schemas/Search' + + SkillSummary: + type: object + required: + - id + - uuid + - status + - skillName + - skillStatement + - keywords + - occupations + properties: + id: + type: string + format: uri + uuid: + type: string + format: uuid + status: + $ref: '#/components/schemas/PublishStatus' + publishDate: + type: string + format: date-time + archiveDate: + type: string + format: date-time + skillName: + type: string + skillStatement: + type: string + category: + type: string + keywords: + type: array + items: + type: string + occupations: + type: array + items: + $ref: '#/components/schemas/JobCode' + + SkillUpdate: + type: object + properties: + skillName: + type: string + skillStatement: + type: string + status: + $ref: '#/components/schemas/PublishStatus' + category: + type: string + collections: + $ref: '#/components/schemas/StringListUpdate' + author: + type: string + keywords: + $ref: '#/components/schemas/StringListUpdate' + certifications: + $ref: '#/components/schemas/ReferenceListUpdate' + standards: + $ref: '#/components/schemas/AlignmentListUpdate' + alignments: + $ref: '#/components/schemas/AlignmentListUpdate' + employers: + $ref: '#/components/schemas/ReferenceListUpdate' + occupations: + $ref: '#/components/schemas/StringListUpdate' + example: + skillName: "New Skill Name" + keywords: + add: + - "Collaboration" + remove: + - "Medical Assistant" + occupations: + add: + - 11-9013 + + SortOrder: + type: string + enum: + - name.asc + - name.desc + - skill.asc + - skill.desc + + StringListUpdate: + type: object + properties: + add: + type: array + items: + type: string + remove: + type: array + items: + type: string + + TaskResult: + type: object + required: + - uuid + - content-type + - status + - apiResultPath + properties: + uuid: + type: string + format: uuid + content-type: + type: string + status: + type: string + enum: + - Processing + - Ready + apiResultPath: + type: string + format: uri + example: + uuid: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + content-type: 'text/csv' + apiResultPath: '/results/batch/3fa85f64-5717-4562-b3fc-2c963f66afa6' + status: Processing + + UuidReference: + type: object + required: + - uuid + - name + properties: + uuid: + type: string + format: uuid + name: + type: string + + responses: + BadRequest: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResult' + + parameters: + PaginationFromQuery: + name: from + in: query + description: Zero-indexed offset from beginning of records + required: false + schema: + type: integer + default: 0 + + PaginationFromQueryRequired: + name: from + in: query + description: Zero-indexed offset from beginning of records + required: true + schema: + type: integer + + PaginationSizeQuery: + name: size + in: query + description: Number of skills to return per page + required: false + schema: + type: integer + default: 50 + + PaginationSizeQueryRequired: + name: size + in: query + description: Number of skills to return per page + required: true + schema: + type: integer + + PublishStatusQuery: + name: status + in: query + required: false + schema: + type: array + default: + - Draft + - Published + items: + $ref: '#/components/schemas/PublishStatus' + + PublishStatusQueryRequired: + name: status + in: query + required: true + schema: + type: array + items: + $ref: '#/components/schemas/PublishStatus' + + SortOrderQuery: + name: sort + in: query + required: false + schema: + $ref: '#/components/schemas/SortOrder' + + UuidPath: + name: uuid + in: path + description: uuid of a resource + required: true + schema: + type: string + format: uuid + + headers: + Link: + description: | + Links to related resources in + [RFC 5988](https://tools.ietf.org/html/rfc5988#section-5) format. + This will include a link with relation type `next` or `prev` if present. + schema: + type: string + + XTotalCount: + schema: + type: string + description: | + The total number of records returned on all pages for this request. + + XRateLimit: + schema: + type: number + description: | + The number of requests permitted to make per hour. + + XRateRemaining: + schema: + type: number + description: | + The number of requests remaining in the current rate limit window. + + XRateReset: + schema: + type: string + description: | + The time at which the current rate limit window resets in UTC epoch seconds. + + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT + +security: + - bearerAuth: [] + +tags: + - name: Collections + description: Collections of RSDs + - name: Export + description: Export OSMT data + - name: Search + description: Search for OSMT resources + - name: Skills + description: Rich Skill Descriptors (RSDs) + - name: Workspace + description: User workspace for staging OSMT edits + From 8f27a176a8c7c20bf8d892f5b822202039342c9c Mon Sep 17 00:00:00 2001 From: David Holub <74815577+Corpratespaz@users.noreply.github.com> Date: Tue, 28 Mar 2023 02:19:20 +0700 Subject: [PATCH 2/6] OSMT-64: Backup of initial auth --- api/src/test/postman/okta_preauth.js | 97 ++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 api/src/test/postman/okta_preauth.js diff --git a/api/src/test/postman/okta_preauth.js b/api/src/test/postman/okta_preauth.js new file mode 100644 index 000000000..5fa418074 --- /dev/null +++ b/api/src/test/postman/okta_preauth.js @@ -0,0 +1,97 @@ +/** + * This file is a backup of the OSMT Postman API Collection's pre-request script. + */ + +// Wrapper to chain async requests in Postman pre-request sandbox +const _dummy = setInterval(() => {}, 300000); +function sendRequest(req) { + return new Promise((resolve, reject) => { + pm.sendRequest(req, (err, res) => { + return resolve(res); + }); + }); +}; + +(async function main() { + // Per Okta endpoints documented at https://developer.okta.com/docs/reference/api/oidc + + // Get Okta Session Token for API access + let authSessionUrl = pm.environment.get("oktaUrl") + "/api/v1/authn"; + console.log(`Get Okta Session Token...`); + let result = await sendRequest({ + url: authSessionUrl, + method: 'POST', + header: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: { + mode: 'raw', + raw: JSON.stringify({ + username: `${pm.environment.get("oktaUsername")}`, + password: `${pm.environment.get("oktaPassword")}`, + options: { + multiOptionalFactorEnroll: false, + warnBeforePasswordExpired: true + } + }) + } + }); + console.log(result.json()); + pm.environment.set("oktaSessionToken", result.json().sessionToken); + + // Get state information from OSMT app + let authUrl = pm.environment.get("baseUrl") + "/oauth2/authorization/okta"; + console.log(`Obtain state information from OSMT app...`); + result = await sendRequest({ + url: authUrl, + method: 'GET', + header: { + 'Accept': 'application/json', + } + }); + console.log("Information from OSMT app:"); + console.log(result); + let authResponseHeaders = result.headers; + let location = result.headers.get('Location'); + console.log(`location: ${location}`); + + // Obtain Okta authorization grant + console.log(`Obtain Okta authorization grant...`); + location = location + "&prompt=none" + "&sessionToken=" + pm.environment.get("oktaSessionToken"); + result = await sendRequest({ + url: location, + method: 'GET', + header: authResponseHeaders + }); + console.log("Result from Okta authorization:"); + console.log(result); + let grantResponseHeaders = result.headers; + location = result.headers.get('Location'); + + // Register access token (bearerToken) with OSMT Spring app using code value + console.log(`Exchange Okta access token for OSMT bearer token...`); + result = await sendRequest({ + url: location, + method: 'GET', + header: grantResponseHeaders + }); + console.log("Result from OSMT token exchange:"); + console.log(result); + location = result.headers.get('Location'); + parts = location.split('?'); + let osmtLink = parts[0]; + query = parts[1].split('&'); + parameters = {}; + query.forEach((entry) => { + let p = entry.split('='); + parameters[p[0]] = p[1]; + }); + let bearerToken = parameters.token; + + // Set the bearerToken for OSMT access + console.log(`bearerToken: ${bearerToken}`); + pm.environment.set("bearerToken", bearerToken); + + clearInterval(_dummy); +})(); From 6da8d189b3c65126c61b8cc0db082321fc6ecbbb Mon Sep 17 00:00:00 2001 From: David Holub <74815577+Corpratespaz@users.noreply.github.com> Date: Thu, 30 Mar 2023 22:30:46 +0700 Subject: [PATCH 3/6] OSMT-64: Okta session token shell script --- api/src/test/postman/api_dev_test.env | 3 ++ api/src/test/postman/okta_preauth.sh | 51 +++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 api/src/test/postman/api_dev_test.env create mode 100644 api/src/test/postman/okta_preauth.sh diff --git a/api/src/test/postman/api_dev_test.env b/api/src/test/postman/api_dev_test.env new file mode 100644 index 000000000..acfd84034 --- /dev/null +++ b/api/src/test/postman/api_dev_test.env @@ -0,0 +1,3 @@ +OKTA_URL=https://dev-35483543.okta.com +OKTA_USERNAME=david.holub@wgu.edu +OKTA_PASSWORD=L9@6nDrjYgDEGCY diff --git a/api/src/test/postman/okta_preauth.sh b/api/src/test/postman/okta_preauth.sh new file mode 100644 index 000000000..e2f6a9d5d --- /dev/null +++ b/api/src/test/postman/okta_preauth.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +declare project_dir; +project_dir="." +declare api_dev_test="${project_dir}/api_dev_test.env" + +if [[ ! -f "${api_dev_test}" || ! -r "${api_dev_test}" ]]; then + echo "Can not access ${api_dev_test}. Script terminating." + exit 1 +fi + +echo "Sourcing ${api_dev_test}" +set -o allexport +source "${api_dev_test}" +set +o allexport + +echo "Using Okta endpoint: \"${OKTA_URL}\"" +echo "Using Okta username: \"${OKTA_USERNAME}\"" +echo "Attempting authentication..." + +declare response=$(curl -sSL -w "\n%{http_code}" \ +--location "${OKTA_URL}/api/v1/authn" \ +--header 'Accept: application/json' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "username": "'"${OKTA_USERNAME}"'", + "password": "'"${OKTA_PASSWORD}"'", + "options": { + "multiOptionalFactorEnroll": false, + "warnBeforePasswordExpired": true + } +}') + +echo +response=(${response[@]}) +declare code=${response[-1]} +declare body=${response[@]::${#response[@]}-1} + +echo "Status: ${code}" +echo "Response:" +echo "${body}" + +if [[ "${code}" =~ ^2 ]]; then + echo + echo "Token:" + declare token=$(echo ${body} | sed "s/{.*\"sessionToken\":\"\([^\"]*\).*}/\1/g") + echo "${token}" +else + echo "Failed to acquire Okta sesion token." + exit 1 +fi From db93cffd61cb0bb2c8b3f05717e967ddbe44496e Mon Sep 17 00:00:00 2001 From: David Holub <74815577+Corpratespaz@users.noreply.github.com> Date: Wed, 26 Apr 2023 05:21:24 +0700 Subject: [PATCH 4/6] OSMT-64: Updated OpenApi spec per recent merges --- api/src/test/postman/api_dev_test.env | 3 - api/src/test/postman/okta_preauth.js | 97 ----------- api/src/test/postman/okta_preauth.sh | 51 ------ docs/int/openapi.yaml | 221 +++++++++++++++++++++----- 4 files changed, 185 insertions(+), 187 deletions(-) delete mode 100644 api/src/test/postman/api_dev_test.env delete mode 100644 api/src/test/postman/okta_preauth.js delete mode 100644 api/src/test/postman/okta_preauth.sh diff --git a/api/src/test/postman/api_dev_test.env b/api/src/test/postman/api_dev_test.env deleted file mode 100644 index acfd84034..000000000 --- a/api/src/test/postman/api_dev_test.env +++ /dev/null @@ -1,3 +0,0 @@ -OKTA_URL=https://dev-35483543.okta.com -OKTA_USERNAME=david.holub@wgu.edu -OKTA_PASSWORD=L9@6nDrjYgDEGCY diff --git a/api/src/test/postman/okta_preauth.js b/api/src/test/postman/okta_preauth.js deleted file mode 100644 index 5fa418074..000000000 --- a/api/src/test/postman/okta_preauth.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * This file is a backup of the OSMT Postman API Collection's pre-request script. - */ - -// Wrapper to chain async requests in Postman pre-request sandbox -const _dummy = setInterval(() => {}, 300000); -function sendRequest(req) { - return new Promise((resolve, reject) => { - pm.sendRequest(req, (err, res) => { - return resolve(res); - }); - }); -}; - -(async function main() { - // Per Okta endpoints documented at https://developer.okta.com/docs/reference/api/oidc - - // Get Okta Session Token for API access - let authSessionUrl = pm.environment.get("oktaUrl") + "/api/v1/authn"; - console.log(`Get Okta Session Token...`); - let result = await sendRequest({ - url: authSessionUrl, - method: 'POST', - header: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: { - mode: 'raw', - raw: JSON.stringify({ - username: `${pm.environment.get("oktaUsername")}`, - password: `${pm.environment.get("oktaPassword")}`, - options: { - multiOptionalFactorEnroll: false, - warnBeforePasswordExpired: true - } - }) - } - }); - console.log(result.json()); - pm.environment.set("oktaSessionToken", result.json().sessionToken); - - // Get state information from OSMT app - let authUrl = pm.environment.get("baseUrl") + "/oauth2/authorization/okta"; - console.log(`Obtain state information from OSMT app...`); - result = await sendRequest({ - url: authUrl, - method: 'GET', - header: { - 'Accept': 'application/json', - } - }); - console.log("Information from OSMT app:"); - console.log(result); - let authResponseHeaders = result.headers; - let location = result.headers.get('Location'); - console.log(`location: ${location}`); - - // Obtain Okta authorization grant - console.log(`Obtain Okta authorization grant...`); - location = location + "&prompt=none" + "&sessionToken=" + pm.environment.get("oktaSessionToken"); - result = await sendRequest({ - url: location, - method: 'GET', - header: authResponseHeaders - }); - console.log("Result from Okta authorization:"); - console.log(result); - let grantResponseHeaders = result.headers; - location = result.headers.get('Location'); - - // Register access token (bearerToken) with OSMT Spring app using code value - console.log(`Exchange Okta access token for OSMT bearer token...`); - result = await sendRequest({ - url: location, - method: 'GET', - header: grantResponseHeaders - }); - console.log("Result from OSMT token exchange:"); - console.log(result); - location = result.headers.get('Location'); - parts = location.split('?'); - let osmtLink = parts[0]; - query = parts[1].split('&'); - parameters = {}; - query.forEach((entry) => { - let p = entry.split('='); - parameters[p[0]] = p[1]; - }); - let bearerToken = parameters.token; - - // Set the bearerToken for OSMT access - console.log(`bearerToken: ${bearerToken}`); - pm.environment.set("bearerToken", bearerToken); - - clearInterval(_dummy); -})(); diff --git a/api/src/test/postman/okta_preauth.sh b/api/src/test/postman/okta_preauth.sh deleted file mode 100644 index e2f6a9d5d..000000000 --- a/api/src/test/postman/okta_preauth.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -declare project_dir; -project_dir="." -declare api_dev_test="${project_dir}/api_dev_test.env" - -if [[ ! -f "${api_dev_test}" || ! -r "${api_dev_test}" ]]; then - echo "Can not access ${api_dev_test}. Script terminating." - exit 1 -fi - -echo "Sourcing ${api_dev_test}" -set -o allexport -source "${api_dev_test}" -set +o allexport - -echo "Using Okta endpoint: \"${OKTA_URL}\"" -echo "Using Okta username: \"${OKTA_USERNAME}\"" -echo "Attempting authentication..." - -declare response=$(curl -sSL -w "\n%{http_code}" \ ---location "${OKTA_URL}/api/v1/authn" \ ---header 'Accept: application/json' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "username": "'"${OKTA_USERNAME}"'", - "password": "'"${OKTA_PASSWORD}"'", - "options": { - "multiOptionalFactorEnroll": false, - "warnBeforePasswordExpired": true - } -}') - -echo -response=(${response[@]}) -declare code=${response[-1]} -declare body=${response[@]::${#response[@]}-1} - -echo "Status: ${code}" -echo "Response:" -echo "${body}" - -if [[ "${code}" =~ ^2 ]]; then - echo - echo "Token:" - declare token=$(echo ${body} | sed "s/{.*\"sessionToken\":\"\([^\"]*\).*}/\1/g") - echo "${token}" -else - echo "Failed to acquire Okta sesion token." - exit 1 -fi diff --git a/docs/int/openapi.yaml b/docs/int/openapi.yaml index 1ace98ed1..8363ea414 100644 --- a/docs/int/openapi.yaml +++ b/docs/int/openapi.yaml @@ -78,8 +78,8 @@ paths: parameters: - $ref: '#/components/parameters/UuidPath' get: - summary: Request a collection export - description: Request all the information about a collection to be exported + summary: Request a collection export as a CSV + description: Request all the information about a collection to be exported as a CSV tags: - Collections responses: @@ -90,9 +90,26 @@ paths: schema: type: string example: >- - id,type,author,skillName,skillStatement,alignments,keywords,category,occupations + id,type,authors,skillName,skillStatement,alignments,keywords,categories,occupations https://osmt.example.com/skills/9cd84455-2086-4f41-bcac-6d518beeb6ac,RichSkillDescriptor,"https://osmt.example.com/organization","Document Saving","The learner copies and saves documents to their local machine.","https://skillsource.example.com/base-skills/simple-compuhacking","documents, file operations, computer basics","Productivity Software","13-0000, 13-2000, 13-2010, 13-2030, 13-2040, 13-2060, 13-2080" + /api/collections/{uuid}/xlsx: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Request a collection export as an Excel Workbook + description: Request all the information about a collection to be exported as an Excel Workbook + tags: + - Collections + responses: + '200': + description: OK + content: + application/vnd.ms-excel: + schema: + type: string + format: binary + /api/collections/{uuid}/log: parameters: - $ref: '#/components/parameters/UuidPath' @@ -262,10 +279,10 @@ paths: parameters: uuid: '$response.body#/uuid' - /api/export/library: + /api/export/library/csv: get: - summary: Export OSMT RSD library - description: Export all RSDs contained in OSMT + summary: Export OSMT RSD library as a CSV + description: Export all RSDs contained in OSMT as a CSV tags: - Export responses: @@ -281,21 +298,39 @@ paths: parameters: uuid: '$response.body#/uuid' - /api/export/skills: + /api/export/library/xlsx: + get: + summary: Export OSMT RSD library as an Excel Workbook + description: Export all RSDs contained in OSMT as an Excel Workbook + tags: + - Export + responses: + '202': + description: Accepted + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + links: + PublishLibraryTextResults: + operationRef: '/api/results/media/{uuid}' + parameters: + uuid: '$response.body#/uuid' + + /api/export/skills/csv: post: - summary: Export RSDs - description: Export one or more RSDs + summary: Export RSDs as a CSV + description: Export one or more RSDs as a CSV tags: - Export + parameters: + - $ref: '#/components/parameters/PublishStatusQueryRequired' requestBody: required: true content: application/json: schema: - type: array - items: - type: string - format: uuid + $ref: '#/components/schemas/Search' responses: '202': description: Accepted @@ -309,6 +344,33 @@ paths: parameters: uuid: '$response.body#/uuid' + /api/export/skills/xlsx: + post: + summary: Export RSDs as an Excel Workbook + description: Export one or more RSDs as an Excel Workbook + tags: + - Export + parameters: + - $ref: '#/components/parameters/PublishStatusQueryRequired' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Search' + responses: + '202': + description: Accepted + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResult' + links: + PublishLibraryTextResults: + operationRef: '/api/results/media/{uuid}' + parameters: + uuid: '$response.body#/uuid' + /api/results/batch/{uuid}: parameters: - $ref: '#/components/parameters/UuidPath' @@ -327,6 +389,25 @@ paths: '404': description: NOT READY + /api/results/media/{uuid}: + parameters: + - $ref: '#/components/parameters/UuidPath' + get: + summary: Retrieve the results of an Excel Workbook task + description: Return the results of a previously requested Excel Workbook task + tags: + - Export + responses: + '200': + description: OK + content: + application/vnd.ms-excel: + schema: + type: string + format: binary + '404': + description: NOT READY + /api/results/skills/{uuid}: parameters: - $ref: '#/components/parameters/UuidPath' @@ -724,12 +805,16 @@ components: type: string collectionName: type: string - category: - type: string + categories: + type: array + items: + type: string skillStatement: type: string - author: - type: string + authors: + type: array + items: + type: string keywords: type: array items: @@ -818,12 +903,22 @@ components: type: object required: - id + - context + - type - uuid - name + - creator + - creationDate + - updateDate + - skills + - skillKeywords properties: id: type: string format: uri + '@context': + type: string + format: uri uuid: type: string format: uuid @@ -854,6 +949,37 @@ components: type: array items: $ref: '#/components/schemas/SkillSummary' + skillKeywords: + type: object + properties: + Alignment: + type: array + items: + $ref: '#/components/schemas/KeywordCount' + Author: + type: array + items: + $ref: '#/components/schemas/KeywordCount' + Category: + type: array + items: + $ref: '#/components/schemas/KeywordCount' + Certification: + type: array + items: + $ref: '#/components/schemas/KeywordCount' + Employer: + type: array + items: + $ref: '#/components/schemas/KeywordCount' + Keyword: + type: array + items: + $ref: '#/components/schemas/KeywordCount' + Standard: + type: array + items: + $ref: '#/components/schemas/KeywordCount' CollectionDoc: type: object @@ -990,16 +1116,28 @@ components: - minor - major + KeywordCount: + type: object + properties: + keyword: + oneOf: + - type: string + - $ref: '#/components/schemas/Alignment' + - $ref: '#/components/schemas/NamedReference' + count: + type: number + + KeywordType: type: string enum: - - category + - categories - keyword - standard - certification - alignment - employer - - author + - authors NamedReference: type: object @@ -1083,8 +1221,10 @@ components: creator: type: string format: uri - author: - type: string + authors: + type: array + items: + type: string status: $ref: '#/components/schemas/PublishStatus' creationDate: @@ -1107,8 +1247,10 @@ components: type: array items: type: string - category: - type: string + categories: + type: array + items: + type: string id: type: string format: uri @@ -1143,7 +1285,8 @@ components: '@context': 'https://rsd.openskillsnetwork.org/context-v1.json' type: RichSkillDescriptor creator: 'https://credentialengineregistry.org/resources/ce-036d082d-d80e-41a7-99a0-2d63a4ad3a4a' - author: Western Governors University + authors: + - Western Governors University status: published creationDate: '2023-02-27T21:02:59.918235Z' updateDate: '2023-03-14T14:38:15.945775Z' @@ -1155,7 +1298,8 @@ components: - design - Access Network - 'WGUSID: 10407' - category: Access Network + categories: + - Access Network id: '-http://localhost:8080/api/skills/cad699ef-64b9-40ee-81db-b5de69a90558' uuid: cad699ef-64b9-40ee-81db-b5de69a90558 certifications: @@ -1240,10 +1384,14 @@ components: type: string skillStatement: type: string - category: - type: string - author: - type: string + categories: + type: array + items: + type: string + authors: + type: array + items: + type: string status: $ref: '#/components/schemas/PublishStatus' keywords: @@ -1302,8 +1450,10 @@ components: type: string skillStatement: type: string - category: - type: string + categories: + type: array + items: + type: string keywords: type: array items: @@ -1322,12 +1472,12 @@ components: type: string status: $ref: '#/components/schemas/PublishStatus' - category: - type: string collections: $ref: '#/components/schemas/StringListUpdate' - author: - type: string + authors: + $ref: '#/components/schemas/StringListUpdate' + categories: + $ref: '#/components/schemas/StringListUpdate' keywords: $ref: '#/components/schemas/StringListUpdate' certifications: @@ -1543,4 +1693,3 @@ tags: description: Rich Skill Descriptors (RSDs) - name: Workspace description: User workspace for staging OSMT edits - From cbcac1effb51bf8390dda7ae6b657e2ec978f022 Mon Sep 17 00:00:00 2001 From: David Holub <74815577+Corpratespaz@users.noreply.github.com> Date: Wed, 26 Apr 2023 05:23:20 +0700 Subject: [PATCH 5/6] OSMT-64: Depreciated legacy api spec files --- docs/int/{ => archive}/osmt-v0.5.x-openapi3.yaml | 0 docs/int/{ => archive}/osmt-v1.0.x-openapi3.yaml | 0 docs/int/{ => archive}/osmt-v2.x-openapi3.yaml | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename docs/int/{ => archive}/osmt-v0.5.x-openapi3.yaml (100%) rename docs/int/{ => archive}/osmt-v1.0.x-openapi3.yaml (100%) rename docs/int/{ => archive}/osmt-v2.x-openapi3.yaml (100%) diff --git a/docs/int/osmt-v0.5.x-openapi3.yaml b/docs/int/archive/osmt-v0.5.x-openapi3.yaml similarity index 100% rename from docs/int/osmt-v0.5.x-openapi3.yaml rename to docs/int/archive/osmt-v0.5.x-openapi3.yaml diff --git a/docs/int/osmt-v1.0.x-openapi3.yaml b/docs/int/archive/osmt-v1.0.x-openapi3.yaml similarity index 100% rename from docs/int/osmt-v1.0.x-openapi3.yaml rename to docs/int/archive/osmt-v1.0.x-openapi3.yaml diff --git a/docs/int/osmt-v2.x-openapi3.yaml b/docs/int/archive/osmt-v2.x-openapi3.yaml similarity index 100% rename from docs/int/osmt-v2.x-openapi3.yaml rename to docs/int/archive/osmt-v2.x-openapi3.yaml From 78b8a91b322af9edb832a51642593897766c970d Mon Sep 17 00:00:00 2001 From: David Holub <74815577+Corpratespaz@users.noreply.github.com> Date: Wed, 26 Apr 2023 05:46:13 +0700 Subject: [PATCH 6/6] OSMT-64: Converted tabs to spaces --- docs/int/openapi.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/int/openapi.yaml b/docs/int/openapi.yaml index 8363ea414..57fc2f1f7 100644 --- a/docs/int/openapi.yaml +++ b/docs/int/openapi.yaml @@ -1295,9 +1295,9 @@ components: skillName: Network Connection Design skillStatement: Design network connections between a core network and an internet service provider. keywords: - - design - - Access Network - - 'WGUSID: 10407' + - design + - Access Network + - 'WGUSID: 10407' categories: - Access Network id: '-http://localhost:8080/api/skills/cad699ef-64b9-40ee-81db-b5de69a90558'