import type { Specification } from "../../3.0"; export const linkExample: Specification = { openapi: "3.0.0", info: { title: "Link Example", version: "1.0.0", }, paths: { "/2.0/users/{username}": { get: { operationId: "getUserByName", parameters: [ { name: "username", in: "path", required: true, schema: { type: "string", }, }, ], responses: { "200": { description: "The User", content: { "application/json": { schema: { $ref: "#/components/schemas/user", }, }, }, links: { userRepositories: { $ref: "#/components/links/UserRepositories", }, }, }, }, }, }, "/2.0/repositories/{username}": { get: { operationId: "getRepositoriesByOwner", parameters: [ { name: "username", in: "path", required: true, schema: { type: "string", }, }, ], responses: { "200": { description: "repositories owned by the supplied user", content: { "application/json": { schema: { type: "array", items: { $ref: "#/components/schemas/repository", }, }, }, }, links: { userRepository: { $ref: "#/components/links/UserRepository", }, }, }, }, }, }, "/2.0/repositories/{username}/{slug}": { get: { operationId: "getRepository", parameters: [ { name: "username", in: "path", required: true, schema: { type: "string", }, }, { name: "slug", in: "path", required: true, schema: { type: "string", }, }, ], responses: { "200": { description: "The repository", content: { "application/json": { schema: { $ref: "#/components/schemas/repository", }, }, }, links: { repositoryPullRequests: { $ref: "#/components/links/RepositoryPullRequests", }, }, }, }, }, }, "/2.0/repositories/{username}/{slug}/pullrequests": { get: { operationId: "getPullRequestsByRepository", parameters: [ { name: "username", in: "path", required: true, schema: { type: "string", }, }, { name: "slug", in: "path", required: true, schema: { type: "string", }, }, { name: "state", in: "query", schema: { type: "string", enum: ["open", "merged", "declined"], }, }, ], responses: { "200": { description: "an array of pull request objects", content: { "application/json": { schema: { type: "array", items: { $ref: "#/components/schemas/pullrequest", }, }, }, }, }, }, }, }, "/2.0/repositories/{username}/{slug}/pullrequests/{pid}": { get: { operationId: "getPullRequestsById", parameters: [ { name: "username", in: "path", required: true, schema: { type: "string", }, }, { name: "slug", in: "path", required: true, schema: { type: "string", }, }, { name: "pid", in: "path", required: true, schema: { type: "string", }, }, ], responses: { "200": { description: "a pull request object", content: { "application/json": { schema: { $ref: "#/components/schemas/pullrequest", }, }, }, links: { pullRequestMerge: { $ref: "#/components/links/PullRequestMerge", }, }, }, }, }, }, "/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge": { post: { operationId: "mergePullRequest", parameters: [ { name: "username", in: "path", required: true, schema: { type: "string", }, }, { name: "slug", in: "path", required: true, schema: { type: "string", }, }, { name: "pid", in: "path", required: true, schema: { type: "string", }, }, ], responses: { "204": { description: "the PR was successfully merged", }, }, }, }, }, components: { links: { UserRepositories: { operationId: "getRepositoriesByOwner", parameters: { username: "$response.body#/username", }, }, UserRepository: { operationId: "getRepository", parameters: { username: "$response.body#/owner/username", slug: "$response.body#/slug", }, }, RepositoryPullRequests: { operationId: "getPullRequestsByRepository", parameters: { username: "$response.body#/owner/username", slug: "$response.body#/slug", }, }, PullRequestMerge: { operationId: "mergePullRequest", parameters: { username: "$response.body#/author/username", slug: "$response.body#/repository/slug", pid: "$response.body#/id", }, }, }, schemas: { user: { type: "object", properties: { username: { type: "string", }, uuid: { type: "string", }, }, }, repository: { type: "object", properties: { slug: { type: "string", }, owner: { $ref: "#/components/schemas/user", }, }, }, pullrequest: { type: "object", properties: { id: { type: "integer", }, title: { type: "string", }, repository: { $ref: "#/components/schemas/repository", }, author: { $ref: "#/components/schemas/user", }, }, }, }, }, };