swagger: "2.0"
host: festivals.tech
basePath: /api
info:
  version: 1.0.0
  title: festivals
tags:
  - name: news
    description: Operation about news
  - name: festivals
    description: Operation about festivals
  - name: festivals-events
    description: Operation about festival events
  - name: festivals-categories
    description: Operation about festival categories
  - name: festivals-places
    description: Operation about festival places
  - name: festivals-news
    description: Operation about festival news
schemes:
  - https
produces:
  - application/vnd.festivals.v1+json
  - application/vnd.festivals.v1+xml
security:
  - oauth2token:
    - public
paths:
  /news:
    get:
      tags:
        - news
      summary: Find news
      description: Get news collection
      operationId: getNewsCollection
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - news:get
      parameters:
        - name: name
          description: name
          required: false
          type: string
          in: query
        - name: updatedAt
          description: updatedAt
          required: false
          type: string
          in: query
        - name: limit
          description: limit
          required: false
          type: integer
          in: query
          default: 100
        - name: offset
          description: offset
          required: false
          type: integer
          in: query
        - name: country
          description: country
          required: false
          type: string
          in: query
        - name: sort
          description: sort
          required: false
          type: string
          in: query
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/NewsCollectionResponse"
    post:
      tags:
        - news
      summary: Create news
      description: Create news
      operationId: createNews
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - news:create
      parameters:
        - in: body
          name: newsRequest
          description: News object
          required: true
          schema:
            $ref: "#/definitions/NewsRequest"
      responses:
        "201":
          description: successful operation
          schema:
            $ref: "#/definitions/NewsResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/news/{news.id}":
    get:
      tags:
        - news
      summary: Get news
      description: Get news
      operationId: getNews
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - news:get
      parameters:
        - name: id
          in: path
          description: News id
          required: true
          type: string
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/NewsResponse"
        "404":
          description: News not found
    delete:
      tags:
        - news
      summary: Delete news
      description: Delete news
      operationId: deleteNews
      security:
        - oauth2token:
          - news:delete
      parameters:
        - name: id
          in: path
          description: News id
          required: true
          type: string
      responses:
        "204":
          description: successful operation
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: News not found
    put:
      tags:
        - news
      summary: Update news
      description: Update news
      operationId: updateNews
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - news:update
      parameters:
        - name: id
          in: path
          description: News id
          required: true
          type: string
        - in: body
          name: newsRequest
          description: News object
          required: true
          schema:
            $ref: "#/definitions/NewsRequest"
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/NewsResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: News not found
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  /festivals:
    get:
      tags:
        - festivals
      summary: Find festivals
      description: Get festivals collection
      operationId: getFestivals
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - festivals:get
      parameters:
        - name: name
          description: name
          required: false
          type: string
          in: query
        - name: description
          description: description
          required: false
          type: string
          in: query
        - name: type
          description: type
          required: false
          type: string
          default: FANTASY
          enum:
            - FANTASY
            - WOODSTOCK
            - MUSIC
          in: query
        - name: tag
          description: tag
          required: false
          type: string
          in: query
        - name: dateFrom
          description: dateFrom
          required: false
          type: string
          in: query
        - name: dateTo
          description: dateTo
          required: false
          type: string
          in: query
        - name: location.country
          description: location country
          required: false
          type: string
          in: query
        - name: location.name
          description: location name
          required: false
          type: string
          in: query
        - name: location.city
          description: location city
          required: false
          type: string
          in: query
        - name: location.state
          description: location state
          required: false
          type: string
          in: query
        - name: updatedAt
          description: updatedAt
          required: false
          type: string
          in: query
        - name: limit
          description: limit
          required: false
          type: integer
          in: query
          default: 100
        - name: offset
          description: offset
          required: false
          type: integer
          in: query
        - name: sort
          description: sort
          required: false
          type: string
          in: query
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/FestivalsCollectionResponse"
    post:
      tags:
        - festivals
      summary: Create festival
      description: Create festival
      operationId: createFestival
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - festivals:create
      parameters:
        - in: body
          name: festivalRequest
          description: Festival object
          required: true
          schema:
            $ref: "#/definitions/FestivalRequest"
      responses:
        "201":
          description: successful operation
          schema:
            $ref: "#/definitions/FestivalResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}":
    get:
      tags:
        - festivals
      summary: Get festival
      description: Get festival
      operationId: getFestival
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - festivals:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/FestivalResponse"
        "404":
          description: Festival not found
    delete:
      tags:
        - festivals
      summary: Delete festival
      description: Delete festival
      operationId: deleteFestival
      security:
        - oauth2token:
          - festivals:delete
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
      responses:
        "204":
          description: successful operation
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
    put:
      tags:
        - festivals
      summary: Update festival
      description: Update festival
      operationId: updateFestival
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - festivals:update
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - in: body
          name: festivalRequest
          description: Festival object
          required: true
          schema:
            $ref: "#/definitions/FestivalRequest"
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/FestivalResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Festival not found
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}/events":
    get:
      tags:
        - festivals-events
      summary: Get festival events
      description: Get festival events collection
      operationId: getFestivalEvents
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - events:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: name
          description: name
          required: false
          type: string
          in: query
        - name: description
          description: description
          required: false
          type: string
          in: query
        - name: place.name
          description: place name
          required: false
          type: string
          in: query
        - name: category.name
          description: category name
          required: false
          type: string
          in: query
        - name: dateFrom
          description: dateFrom
          required: false
          type: string
          in: query
        - name: dateTo
          description: dateTo
          required: false
          type: string
          in: query
        - name: author.name
          description: author name
          required: false
          type: string
          in: query
        - name: author.organization
          description: author organization
          required: false
          type: string
          in: query
        - name: updatedAt
          description: updatedAt
          required: false
          type: string
          in: query
        - name: limit
          description: limit
          required: false
          type: integer
          in: query
          default: 100
        - name: offset
          description: offset
          required: false
          type: integer
          in: query
        - name: sort
          description: sort
          required: false
          type: string
          in: query
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/EventsCollectionResponse"
        "404":
          description: Not found
    post:
      tags:
        - festivals-events
      summary: Create festival events
      description: Create festival events
      operationId: createFestivalEvent
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - events:create
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - in: body
          name: festivalEventRequest
          description: Festival event object
          required: true
          schema:
            $ref: "#/definitions/EventRequest"
      responses:
        "201":
          description: successful operation
          schema:
            $ref: "#/definitions/EventResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Festival not found
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}/events/{event.id}":
    get:
      tags:
        - festivals-events
      summary: Get festival event
      description: Get festival event collection
      operationId: getFestivalEvent
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - events:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: event.id
          in: path
          description: Event id
          required: true
          type: string
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/EventResponse"
    delete:
      tags:
        - festivals-events
      summary: Delete festival event
      description: Delete festival events
      operationId: deleteFestivalEvent
      security:
        - oauth2token:
          - events:delete
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: event.id
          in: path
          description: Event id
          required: true
          type: string
      responses:
        "204":
          description: successful operation
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
    put:
      tags:
        - festivals-events
      summary: Update festival events
      description: Update festival events
      operationId: updateFestivalEvent
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - events:update
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: event.id
          in: path
          description: Event id
          required: true
          type: string
        - in: body
          name: festivalEventRequest
          description: Festival event object
          required: true
          schema:
            $ref: "#/definitions/EventRequest"
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/EventResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}/categories":
    get:
      tags:
        - festivals-categories
      summary: Get festival categories
      description: Get festival categories collection
      operationId: getFestivalCategories
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - categories:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: updatedAt
          description: updatedAt
          required: false
          type: string
          in: query
        - name: parent.id
          description: category parent id
          required: false
          type: string
          in: query
        - name: name
          description: name
          required: false
          type: string
          in: query
        - name: limit
          description: limit
          required: false
          type: integer
          in: query
          default: 100
        - name: offset
          description: offset
          required: false
          type: integer
          in: query
        - name: sort
          description: sort
          required: false
          type: string
          in: query
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/CategoriesCollectionResponse"
        "404":
          description: Festival not found
    post:
      tags:
        - festivals-categories
      summary: Create festival category
      description: Create festival category
      operationId: createFestivalCategory
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - categories:create
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - in: body
          name: festivalCategoryRequest
          description: Festival category object
          required: true
          schema:
            $ref: "#/definitions/CategoryRequest"
      responses:
        "201":
          description: successful operation
          schema:
            $ref: "#/definitions/CategoryResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Festival not found
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}/categories/{category.id}":
    get:
      tags:
        - festivals-categories
      summary: Get festival category
      description: Get festival category
      operationId: getFestivalCategory
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - categories:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: category.id
          in: path
          description: Category id
          required: true
          type: string
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/CategoryResponse"
        "404":
          description: Not found
    delete:
      tags:
        - festivals-categories
      summary: Delete festival category
      description: Delete festival category
      operationId: deleteFestivalCategory
      security:
        - oauth2token:
          - categories:delete
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: category.id
          in: path
          description: Category id
          required: true
          type: string
      responses:
        "204":
          description: successful operation
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
    put:
      tags:
        - festivals-categories
      summary: Update festival category
      description: Update festival category
      operationId: updateFestivalCategory
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - categories:update
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: category.id
          in: path
          description: Category id
          required: true
          type: string
        - in: body
          name: festivalCategoryRequest
          description: Festival category object
          required: true
          schema:
            $ref: "#/definitions/CategoryRequest"
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/CategoryResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}/places":
    get:
      tags:
        - festivals-places
      summary: Get festival places
      description: Get festival places collection
      operationId: getFestivalPlaces
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - places:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: updatedAt
          description: updatedAt
          required: false
          type: string
          in: query
        - name: parent.id
          description: place parent id
          required: false
          type: string
          in: query
        - name: name
          description: name
          required: false
          type: string
          in: query
        - name: limit
          description: limit
          required: false
          type: integer
          in: query
          default: 100
        - name: offset
          description: offset
          required: false
          type: integer
          in: query
        - name: sort
          description: sort
          required: false
          type: string
          in: query
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/PlacesCollectionResponse"
        "404":
          description: Festival not found
    post:
      tags:
        - festivals-places
      summary: Create festival place
      description: Create festival place
      operationId: createFestivalPlace
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - places:create
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - in: body
          name: festivalPlaceRequest
          description: Festival place object
          required: true
          schema:
            $ref: "#/definitions/PlaceRequest"
      responses:
        "201":
          description: successful operation
          schema:
            $ref: "#/definitions/PlaceResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}/places/{place.id}":
    get:
      tags:
        - festivals-places
      summary: Get festival place
      description: Get festival place
      operationId: getFestivalPlace
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - places:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: place.id
          in: path
          description: Place id
          required: true
          type: string
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/PlaceResponse"
        "404":
          description: Festival not found
    delete:
      tags:
        - festivals-places
      summary: Delete festival place
      description: Delete festival place
      operationId: deleteFestivalPlace
      security:
        - oauth2token:
          - places:delete
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: place.id
          in: path
          description: Place id
          required: true
          type: string
      responses:
        "204":
          description: successful operation
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
    put:
      tags:
        - festivals-places
      summary: Update festival place
      description: Update festival place
      operationId: updateFestivalPlace
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - places:update
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: place.id
          in: path
          description: Place id
          required: true
          type: string
        - in: body
          name: festivalPlaceRequest
          description: Festival place object
          required: true
          schema:
            $ref: "#/definitions/PlaceRequest"
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/PlaceResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}/news":
    get:
      tags:
        - festivals-news
      summary: Find festival news
      description: Get festival news collection
      operationId: getFestivalNewsCollection
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - news:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: name
          description: name
          required: false
          type: string
          in: query
        - name: updatedAt
          description: updatedAt
          required: false
          type: string
          in: query
        - name: limit
          description: limit
          required: false
          type: integer
          in: query
          default: 100
        - name: offset
          description: offset
          required: false
          type: integer
          in: query
        - name: sort
          description: sort
          required: false
          type: string
          in: query
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/NewsCollectionResponse"
    post:
      tags:
        - festivals-news
      summary: Create festival news
      description: Create festival news
      operationId: createFestivalNews
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - news:create
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - in: body
          name: newsRequest
          description: News object
          required: true
          schema:
            $ref: "#/definitions/NewsRequest"
      responses:
        "201":
          description: successful operation
          schema:
            $ref: "#/definitions/NewsResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
  "/festivals/{id}/news/{news.id}":
    get:
      tags:
        - festivals-news
      summary: Get festival news
      description: Get festival news
      operationId: getFestivalNews
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - news:get
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: news.id
          in: path
          description: News id
          required: true
          type: string
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/NewsResponse"
        "404":
          description: News not found
    delete:
      tags:
        - festivals-news
      summary: Delete festival news
      description: Delete festival news
      operationId: deleteFestivalNews
      security:
        - oauth2token:
          - news:delete
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: news.id
          in: path
          description: News id
          required: true
          type: string
      responses:
        "204":
          description: successful operation
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: News not found
    put:
      tags:
        - festivals-news
      summary: Update festival news
      description: Update festival news
      operationId: updateFestivalNews
      consumes:
        - application/vnd.festivals.v1+json
      produces:
        - application/vnd.festivals.v1+json
      security:
        - oauth2token:
          - news:update
      parameters:
        - name: id
          in: path
          description: Festival id
          required: true
          type: string
        - name: news.id
          in: path
          description: News id
          required: true
          type: string
        - in: body
          name: newsRequest
          description: News object
          required: true
          schema:
            $ref: "#/definitions/NewsRequest"
      responses:
        "200":
          description: successful operation
          schema:
            $ref: "#/definitions/NewsResponse"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: News not found
        "406":
          description: The request you made is not acceptable
        "422":
          description: Invalid parameter value
securityDefinitions:
  oauth2token:
    type: oauth2
    flow: implicit
    authorizationUrl: https://vehicle-history.io/oauth/authorization
    scopes:
      public: public API scope
      news:update: permission to update news
      news:delete: permission to delete news
      news:get: permission to get news
      news:create: permission to create news
      places:update: permission to update places
      places:delete: permission to delete places
      places:get: permission to get places
      places:create: permission to create places
      categories:update: permission to update categories
      categories:delete: permission to delete categories
      categories:get: permission to get categories
      categories:create: permission to create categories
      events:update: permission to update events
      events:delete: permission to delete events
      events:get: permission to get events
      events:create: permission to create events
      festivals:update: permission to update festivals
      festivals:delete: permission to delete festivals
      festivals:get: permission to get festivals
      festivals:create: permission to create festivals
definitions:
  CoordinatesRequest:
    properties:
      lat:
        type: number
        format: double
        description: lat
      lon:
        type: number
        format: double
        description: lon
    description: Geo coordinates
    required:
      - lat
      - lon
  CoordinatesResponse:
    properties:
      lat:
        type: number
        format: double
        description: lat
      lon:
        type: number
        format: double
        description: lon
    description: Geo coordinates
    required:
      - lat
      - lon
  AuthorResponse:
    properties:
      name:
        type: string
        description: name
      organization:
        type: string
        description: organization
    description: Author
    required:
      - name
      - organization
  AuthorRequest:
    properties:
      name:
        type: string
        description: name
      organization:
        type: string
        description: organization
    description: Author
    required:
      - name
      - organization
  DurationResponse:
    properties:
      startAt:
        type: string
        description: start at
      finishAt:
        type: string
        description: finish at
      periodMs:
        type: integer
        description: periodMs
    description: Duration response
    required:
      - startAt
      - finishAt
      - periodMs
  DurationRequest:
    properties:
      startAt:
        type: string
        description: start at
      finishAt:
        type: string
        description: finish at
    description: Duration request
    required:
      - startAt
      - finishAt
  LocationResponse:
    properties:
      name:
        type: string
        description: Location name
      state:
        type: string
        description: Location state
      country:
        type: integer
        description: Location country
      street:
        type: string
        description: Location street
      city:
        type: string
        description: Location city
      zip:
        type: string
        description: Location zip
      openingTimes:
        type: array
        description: Location opening times
        items:
          $ref: "#/definitions/DurationResponse"
      coordinates:
        $ref: "#/definitions/CoordinatesResponse"
        description: Coordinates
    description: Festival response
    required:
      - name
      - state
      - country
      - street
      - openingTimes
  LocationRequest:
    properties:
      name:
        type: string
        description: Location name
      state:
        type: string
        description: Location state
      country:
        type: integer
        description: Location country
      street:
        type: string
        description: Location street
      city:
        type: string
        description: Location city
      zip:
        type: string
        description: Location zip
      openingTimes:
        type: array
        description: Location opening times
        items:
          $ref: "#/definitions/DurationRequest"
      coordinates:
        $ref: "#/definitions/CoordinatesRequest"
        description: Coordinates
    description: Festival response
    required:
      - name
      - state
      - country
      - street
      - openingTimes
  MainImageResponse:
    properties:
      small:
        type: string
        description: Image small url
      medium:
        type: string
        description: Image medium url
      large:
        type: string
        description: Image large url
    description: Festival response
  ImageRequest:
    properties:
      url:
        type: string
        description: Image url
      content:
        type: string
        description: Image content
      order:
        type: integer
        description: Image order
    description: Festival response
    required:
      - order
  PlaceResponse:
    properties:
      id:
        type: string
        description: Festival place id
      name:
        type: string
        description: Festival place name
      parent:
        type: string
        description: Festival place parent
      openingTimes:
        type: array
        description: Festival place opening times
        items:
          $ref: "#/definitions/DurationResponse"
      coordinates:
        $ref: "#/definitions/CoordinatesResponse"
        description: Coordinates
      mainImage:
        $ref: "#/definitions/MainImageResponse"
        description: Event main image
      createdAt:
        type: string
        description: Festival place createdAt
      updatedAt:
        type: string
        description: Festival place updatedAt
    description: Festival response
    required:
      - id
      - name
      - parent
      - openingTimes
      - createdAt
      - updatedAt
  PlaceRequest:
    properties:
      name:
        type: string
        description: Festival place name
      parent:
        type: string
        description: Festival place parent
      openingTimes:
        type: array
        description: Festival place opening times
        items:
          $ref: "#/definitions/DurationRequest"
      coordinates:
        $ref: "#/definitions/CoordinatesRequest"
        description: Coordinates
      images:
        type: array
        items:
          $ref: "#/definitions/ImageRequest"
        description: Images
    description: Festival response
    required:
      - name
      - parent
      - openingTimes
      - images
  EventPlaceResponse:
    properties:
      id:
        type: string
        description: Place id
      name:
        type: string
        description: Place name
      breadcrumbs:
        type: array
        description: Place breadcrumbs
        items:
          $ref: "#/definitions/PlaceResponse"
      openingTimes:
        type: array
        description: Place opening times
        items:
          $ref: "#/definitions/DurationResponse"
      coordinates:
        $ref: "#/definitions/CoordinatesResponse"
        description: Coordinates
    description: Festival response
    required:
      - id
      - name
      - breadcrumbs
      - openingTimes
  CategoryRequest:
    properties:
      parent:
        type: string
        description: Festival category parent id
      name:
        type: string
        description: Festival category name
    description: Festival category request
    required:
      - parent
      - name
  CategoryResponse:
    properties:
      id:
        type: string
        description: Category id
      name:
        type: string
        description: Category name
      parent:
        type: string
        description: Category parent
      createdAt:
        type: string
        description: Category createdAt
      updatedAt:
        type: string
        description: Category updatedAt
    description: Festival category response
    required:
      - id
      - name
      - parent
      - createdAt
      - updatedAt
  EventCategoryResponse:
    properties:
      id:
        type: string
        description: Event category id
      name:
        type: string
        description: Event category name
      breadcrumbs:
        type: array
        description: Event category breadcrumbs
        items:
          $ref: "#/definitions/CategoryResponse"
    description: Festival category response
    required:
      - id
      - name
      - breadcrumbs
  EventRequest:
    properties:
      name:
        type: string
        description: Event name
      description:
        type: string
        description: Event description
      tags:
        type: array
        items:
          type: string
        description: Event tags
      status:
        type: string
        description: Status of event
        default: CREATED
        enum:
          - CREATED
          - PUBLISHED
          - CANCELED
          - MOVED
      metadata:
        type: array
        items:
          type: string
        description: Event metadata
      images:
        type: array
        items:
          $ref: "#/definitions/ImageRequest"
        description: Event images
      duration:
        $ref: "#/definitions/DurationRequest"
        description: Event duration
      place:
        type: string
        description: Event place
      category:
        type: string
        description: Event category
      authors:
        type: array
        items:
          $ref: "#/definitions/AuthorRequest"
        description: Event authors
    description: Event request
    required:
      - name
      - description
      - duration
      - place
      - category
  EventResponse:
    properties:
      id:
        type: string
        description: Event id
      name:
        type: string
        description: Event name
      description:
        type: string
        description: Event description
      tags:
        type: array
        items:
          type: string
        description: Event tags
      status:
        type: string
        description: Status of event
        default: CREATED
        enum:
          - CREATED
          - PUBLISHED
          - CANCELED
          - MOVED
      mainImage:
        $ref: "#/definitions/MainImageResponse"
        description: Event main image
      duration:
        $ref: "#/definitions/DurationResponse"
        description: Event duration
      place:
        $ref: "#/definitions/EventPlaceResponse"
        description: Event place
      category:
        $ref: "#/definitions/EventCategoryResponse"
        description: Event category
      authors:
        type: array
        items:
          $ref: "#/definitions/AuthorResponse"
        description: Event authors
      publishedAt:
        type: string
        description: Event publishedAt
      createdAt:
        type: string
        description: Event createdAt
      updatedAt:
        type: string
        description: Event updatedAt
    description: Event response
    required:
      - id
      - name
      - description
      - duration
      - place
      - category
      - publishedAt
      - createdAt
      - updatedAt
  FestivalResponse:
    properties:
      id:
        type: string
        description: Festival id
      name:
        type: string
        description: Festival name
      description:
        type: string
        description: Festival description
      type:
        type: string
        description: Festival type
        enum:
          - FANTASY
          - WOODSTOCK
          - MUSIC
      status:
        type: string
        description: Status of festival
        enum:
          - CREATED
          - PUBLISHED
          - CANCELED
      tags:
        type: array
        items:
          type: string
        description: Festival tags
      mainImage:
        $ref: "#/definitions/MainImageResponse"
        description: Festival main image
      duration:
        $ref: "#/definitions/DurationResponse"
        description: Festival duration
      locations:
        type: array
        description: Festival locations
        items:
          $ref: "#/definitions/LocationResponse"
      publishedAt:
        type: string
        description: Festival publishedAt
      createdAt:
        type: string
        description: Festival createdAt
      updatedAt:
        type: string
        description: Festival updatedAt
    description: Festival response
    required:
      - id
      - name
      - description
      - type
      - status
      - locations
      - duration
      - publishedAt
      - createdAt
      - updatedAt
  FestivalRequest:
    properties:
      name:
        type: string
        description: Festival name
      description:
        type: string
        description: Festival description
      type:
        type: string
        description: Festival type
        default: FANTASY
        enum:
          - FANTASY
          - WOODSTOCK
          - MUSIC
      status:
        type: string
        description: Status of festival
        default: CREATED
        enum:
          - CREATED
          - PUBLISHED
          - CANCELED
      tags:
        type: array
        items:
          type: string
        description: Festival tags
      images:
        type: array
        items:
          $ref: "#/definitions/ImageRequest"
        description: Festival images
      duration:
        $ref: "#/definitions/DurationRequest"
        description: Festival duration
      locations:
        type: array
        description: Festival locations
        items:
          $ref: "#/definitions/LocationRequest"
    description: Festival request
    required:
      - name
      - description
      - type
      - duration
      - locations
  FestivalsCollectionResponse:
    properties:
      total:
        type: integer
        description: Total festivals
      festivals:
        type: array
        items:
          $ref: "#/definitions/FestivalResponse"
    description: Festivals collection
    required:
      - total
      - festivals
  EventsCollectionResponse:
    properties:
      total:
        type: integer
        description: Total festival events
      events:
        type: array
        items:
          $ref: "#/definitions/EventResponse"
    description: Events collection
    required:
      - total
      - events
  CategoriesCollectionResponse:
    properties:
      total:
        type: integer
        description: Total festival categories
      categories:
        type: array
        items:
          $ref: "#/definitions/CategoryResponse"
    description: Festival categories collection
    required:
      - total
      - categories
  PlacesCollectionResponse:
    properties:
      total:
        type: integer
        description: Total festival places
      places:
        type: array
        items:
          $ref: "#/definitions/PlaceResponse"
    description: Festival places collection
    required:
      - total
      - places
  NewsResponse:
    properties:
      id:
        type: string
        description: News id
      name:
        type: string
        description: News name
      description:
        type: string
        description: News description
      status:
        type: string
        description: Status of news
        default: CREATED
        enum:
          - CREATED
          - PUBLISHED
          - CANCELED
      mainImage:
        $ref: "#/definitions/MainImageResponse"
        description: Main image
      authors:
        type: array
        items:
          $ref: "#/definitions/AuthorResponse"
        description: Event authors
      tags:
        type: array
        items:
          type: string
        description: News tags
      publishedAt:
        type: string
        description: News publishedAt
      createdAt:
        type: string
        description: News createdAt
      updatedAt:
        type: string
        description: News updatedAt
    description: News response
    required:
      - id
      - name
      - description
      - status
      - mainImage
      - tags
      - createdAt
      - updatedAt
  NewsRequest:
    properties:
      name:
        type: string
        description: News name
      description:
        type: string
        description: News description
      status:
        type: string
        description: Status of event
        default: CREATED
        enum:
          - CREATED
          - PUBLISHED
          - CANCELED
      images:
        type: array
        items:
          $ref: "#/definitions/ImageRequest"
        description: Images
      authors:
        type: array
        items:
          $ref: "#/definitions/AuthorRequest"
        description: Event authors
      tags:
        type: array
        items:
          type: string
        description: News tags
    description: News request
    required:
      - name
      - description
      - images
      - tags
  NewsCollectionResponse:
    properties:
      total:
        type: integer
        description: Total news collection
      news:
        type: array
        items:
          $ref: "#/definitions/NewsResponse"
    description: News collection
    required:
      - total
      - news
