1
0
Fork 0

feat: add openapi spec

This commit is contained in:
Vojtěch Mareš 2024-05-03 21:58:20 +02:00
parent 2acfb39ca5
commit ecdf67f371
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D

218
api/v1/openapi.yaml Normal file
View file

@ -0,0 +1,218 @@
openapi: "3.1.0"
info:
version: "0.1.0"
title: MaresHQ API
license:
name: Proprietary
contact:
name: Vojtěch Mareš
email: iam@vojtechmares.com
url: https://www.vojtechmares.com
paths:
/trainings:
get:
summary: List all trainings
operationId: listTrainings
tags:
- Trainings
responses:
"200":
description: A list of trainings
content:
application/json:
schema:
$ref: "#/components/schemas/ListTrainingsResponse"
"500":
$ref: "#/components/responses/InternalError"
post:
summary: Create a new training
operationId: createTraining
tags:
- Trainings
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateTrainingRequest"
responses:
"201":
description: Training created
content:
application/json:
schema:
$ref: "#/components/schemas/CreateTrainingResponse"
"400":
$ref: "#/components/responses/InvalidInputError"
"500":
$ref: "#/components/responses/InternalError"
/trainings/{trainingID}:
get:
summary: Get a training by ID
operationId: getTraining
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
responses:
"200":
description: A training
content:
application/json:
schema:
$ref: "#/components/schemas/GetTrainingResponse"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
put:
summary: Update a training by ID
operationId: updateTraining
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateTrainingRequest"
responses:
"200":
description: Training updated
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateTrainingResponse"
"400":
$ref: "#/components/responses/InvalidInputError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
delete:
summary: Delete a training by ID
operationId: deleteTraining
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
responses:
"204":
description: Training deleted
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
components:
parameters:
TrainingID:
in: path
name: trainingID
required: true
schema:
type: string
format: uuid
description: Training ID
schemas:
CreateTrainingRequest:
$ref: "#/components/schemas/NewTraining"
CreateTrainingResponse:
$ref: "#/components/schemas/Training"
ListTrainingsResponse:
type: array
items:
$ref: "#/components/schemas/Training"
GetTrainingResponse:
$ref: "#/components/schemas/Training"
UpdateTrainingRequest:
$ref: "#/components/schemas/NewTraining"
UpdateTrainingResponse:
$ref: "#/components/schemas/Training"
NewTraining:
type: object
properties:
name:
type: string
days:
type: integer
format: int32
required:
- name
- days
Training:
allOf:
- $ref: "#/components/schemas/NewTraining"
- type: object
- properties:
id:
type: string
format: uuid
- required:
- id
ProblemDetails:
type: object
description: >
Schema that carries the details of an error in an HTTP response.
See https://datatracker.ietf.org/doc/html/rfc7807 for more information.
properties:
type:
type: string
description: A URI reference that identifies the problem type.
title:
type: string
description: A human-readable summary of the problem type.
status:
type: integer
description: The HTTP status code generated by the origin server for this occurrence of the problem.
detail:
type: string
description: A human-readable explanation specific to this occurrence of the problem.
instance:
type: string
description: A URI reference that identifies the specific occurrence of the problem.
required:
- type
- title
- status
- detail
- instance
responses:
InvalidInputError:
description: Invalid input error
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
InternalError:
description: Internal error
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
NotFoundError:
description: Not found error
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"