1
0
Fork 0

feat(api): create schema for api

This commit is contained in:
Vojtěch Mareš 2024-09-21 17:37:17 +02:00
parent 182d8f6282
commit f8d189a799
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D
2 changed files with 282 additions and 0 deletions

282
api/openapi.yaml Normal file
View file

@ -0,0 +1,282 @@
openapi: "3.0.3"
info:
title: "Backoffice API"
version: "0.1.0"
license:
name: Proprietary
contact:
name: Vojtěch Mareš
email: vojtech@mares.cz
url: https://www.mares.cz
servers:
- url: http://localhost:8080/
description: Local development server
- url: https://staging.backoffice.vmdevel.cz/api
description: Backoffice staging server
- url: https://backoffice.mareshq.com/api
description: Backoffice production server
paths:
/v0/trainings:
get:
summary: List all trainings
operationId: listTrainings
tags:
- Trainings
parameters:
- name: limit
in: query
description: Maximum number of trainings to return
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 10
- name: offsetID
in: query
description: ID of the training to start from
required: false
schema:
type: integer
minimum: 1
responses:
"200":
$ref: "#/components/responses/ListTrainingsResponse"
"500":
$ref: "#/components/responses/InternalError"
post:
summary: Create a new training
operationId: createTraining
tags:
- Trainings
requestBody:
$ref: "#/components/requestBodies/CreateTrainingRequest"
responses:
"201":
$ref: "#/components/responses/CreateTrainingResponse"
"400":
$ref: "#/components/responses/InvalidInputError"
"500":
$ref: "#/components/responses/InternalError"
/v0/trainings/{trainingID}:
get:
summary: Get a training by ID
operationId: getTrainingByID
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
responses:
"200":
$ref: "#/components/responses/GetTrainingResponse"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
/v0/trainings/by-slug/{trainingSlug}:
get:
summary: Get a training by training slug
operationId: getTrainingBySlug
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingSlug"
responses:
"200":
$ref: "#/components/responses/GetTrainingResponse"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
/v0/trainings/{trainingID}/publish:
put:
summary: Publish a training
operationId: publishTraining
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
responses:
"204":
description: Training published
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
/v0/trainings/{trainingID}/unpublish:
put:
summary: Unpublish a training
operationId: unpublishTraining
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
responses:
"204":
description: Training unpublished
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
/v0/trainings/{trainingID}/retire:
put:
summary: Retire a training
operationId: retireTraining
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
responses:
"204":
description: Training retired
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
components:
parameters:
TrainingID:
name: trainingID
in: path
required: true
description: ID of the training
schema:
$ref: "#/components/schemas/TrainingID"
TrainingSlug:
name: trainingSlug
in: path
required: true
description: Slug of the training
schema:
type: string
# Models
schemas:
TrainingID:
type: integer
minimum: 1
x-go-type: training.ID
x-go-type-import:
path: gitlab.mareshq.com/hq/backoffice/backoffice-api/internal/training
NewTraining:
type: object
properties:
title:
type: string
slug:
type: string
description:
type: string
days:
type: integer
minimum: 1
maximum: 5
default: 1
required:
- title
- description
- days
Training:
allOf:
- $ref: "#/components/schemas/NewTraining"
- type: object
properties:
id:
$ref: "#/components/schemas/TrainingID"
published:
type: boolean
retired:
type: boolean
required:
- id
- slug
- published
- retired
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
# Response objects including content types
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"
ListTrainingsResponse:
description: Response containing a list of trainings
content:
application/json:
schema:
type: object
properties:
trainings:
type: array
description: List of trainings
items:
$ref: "#/components/schemas/Training"
CreateTrainingResponse:
description: Response containing a newly created training
content:
application/json:
schema:
$ref: "#/components/schemas/Training"
GetTrainingResponse:
description: Response containing a single training
content:
application/json:
schema:
$ref: "#/components/schemas/Training"
# Request body objects for creating or updating resources
requestBodies:
CreateTrainingRequest:
content:
application/json:
schema:
type: object
properties:
training:
$ref: "#/components/schemas/NewTraining"
UpdateTrainingRequest:
content:
application/json:
schema:
type: object
properties:
training:
$ref: "#/components/schemas/NewTraining"