# Example YAML to get you started quickly.
# Be aware that YAML has indentation based scoping.
# Code completion support is available so start typing for available options.
swagger: '2.0'

# This is your document metadata
info:
  version: "0.0.60"
  title: Api do Aplicativo
#host: app.repasse
host: app.repasse
basePath: /api

# Describe your paths here
paths:
  #get
  "/user/types":
    get:
      description: "Tipos de usuário disponíveis no aplicativo"
      responses:
        200:
          description: Operação efetuada com suceso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                $ref: '#/definitions/ObjetoUserType'


  "/version":
    get:
      description: Recebe a versão corrente do aplicativo
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
      responses:
        200:
          description: Operação efetuada com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                description: Dados da operação
                properties:
                  version:
                    type: string
                    description: Versão do APP
                  info:
                    type: string
                    description: Informações da nova versão
          examples:
            application/json:
              success: true
              data:
                version: '0.0.1'

  "/ratings/status":
    get:
      description: Recebe o status do usuário em relação a avaliação do Aplicativo
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
      responses:
        200:
          description: Operação efetuada com sucesso, retorna is_rated false se o usuario deve ser convidado a avaliar o aplicativo. O usuário será convidado a avaliar o aplicativo se ele não tiver avaliado anteriormente e se ele tiver sido cadastrado a mais de uma semana.
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                description: dados da operação
                properties:
                  is_rated:
                    type: boolean
                    description: Informa s eo usuário deve ser convidado a fazer a valiacao do aplicativo




  "/populate-announce/{type}":
    get:
      description: Recebe dados auxiliares para o preenchimento do anúncio
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: type
          in: path
          required: true
          type: string
          description: "Tipo do veículo (0 para carro, 5 para caminhão e 8 para moto)"
      responses:
        200:
          description: Dados auxiliares para preenchimento do anuncio
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                properties:
                  brands:
                    description: Listagem de marcas
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoBrand'
                  percent:
                    type: string
                    description: Percentual de corte da fipe
                  optional:
                    description: "Opcionais que podem ser usados no cadastro de anúncios"
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoOptional'
                  doors:
                    description: array com a quantidade de portas
                    type: array
                    items:
                      $ref: '#/definitions/ArrayInteger'
                  eixos:
                    description: "Array com os eixos disponíveis no cadastro"
                    type: array
                    items:
                      $ref: '#/definitions/ArrayString'
                  years:
                    description: array com os anos disponiveis para cadastro
                    type: array
                    items:
                      $ref: '#/definitions/ArrayInteger'
                  colors:
                    description: Array com os objetos color para cadastro de cores
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoCor'
          examples:
            application/json:
              success: true
              data:
                brands:
                  -
                percent: 20
                optional:
                  -
                    id: 58,
                    name: "AirBag"
                    description: " "
                    created_at: "2016-05-17 09:29:54"
                    updated_at: "2016-05-17 09:29:54"
                doors:
                  - 2
                  - 3
                  - 4
                  - 5
                eixos:
                  - '1'
                  - '2'
                  - '3'
                  - '4'
                  - '4x2'
                  - '6x2'
                  - '6x4'
                  - '8x2'
                  - '8x4'
                years:
                  - 1984
                  - 1985
                  - 1986
                  - 2017
                colors:
                  -
                    id: 1
                    name: "AMARELO"
                    created_at: "2016-05-05 01:00:00"
                    updated_at: "2016-05-05 01:00:00"

  "/populate-year/{type}/{brand_id}":
    get:
      description: Recebe a lista de anos dos modelos referente a uma marca e um tipo
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: type
          in: path
          required: true
          type: integer
          description: Código da marca
        -
          name: brand_id
          in: path
          required: true
          type: integer
          description: "Marca"
      responses:
        200:
          description: Dados da requisição (uma lista de anos)
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: array
                description: array com os anos de uma determinada marca
                items:
                  type: integer

  "/populate-model/{brand_id}/{year}":
    get:
      description: "Recebe uma lista de modelos a partir de uma marca e um ano"
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: brand_id
          in: path
          required: true
          type: integer
          description: Código da marca
        -
          name: year
          in: path
          required: true
          type: integer
          description: "Ano"
      responses:
        200:
          description: "Lista de modelos da marca e ano selecionados de acordo com a tabela fipe"
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: array
                items:
                  $ref: '#/definitions/ObjetoFipe'
          examples:
            application/json:
              success: true
              data:
                -
                  id: 19951
                  model:  " Teste"
                  brand_id: 88
                  year:  "2012"
                  fuel:  "G"
                  code:  "1"
                  authentication:  "21021"
                  price: 25457
                  created_at:  "-0001-11-30 00:00:00"
                  updated_at:  "-0001-11-30 00:00:00"
        400:
          description: "Um dos parâmetros está faltando"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: "Marca ou ano não informados!"

  "/populate-edit/{car_type}":
    get:
      description: Recebe portas eixos e cores
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: car_type
          in: path
          required: true
          type: string
          description: "Tipo do veículo (0 para carro, 5 para caminhão e 8 para moto)"
      responses:
        200:
          description: Dados auxiliares para preenchimento do anuncio
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                properties:
                  percent:
                    type: string
                    description: Percentual de corte da fipe
                  optional:
                    description: "Opcionais que podem ser usados no cadastro de anúncios"
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoOptional'
                  doors:
                    description: array com a quantidade de portas
                    type: array
                    items:
                      $ref: '#/definitions/ArrayInteger'
                  eixos:
                    description: "Array com os eixos disponíveis no cadastro"
                    type: array
                    items:
                      $ref: '#/definitions/ArrayString'
                  colors:
                    description: Array com os objetos color para cadastro de cores
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoCor'
          examples:
            application/json:
              success: true
              data:
                brands:
                  -
                percent: 20
                optional:
                  -
                    id: 58,
                    name: "AirBag"
                    description: " "
                doors:
                  - 2
                  - 3
                  - 4
                  - 5
                eixos:
                  - '1'
                  - '2'
                  - '3'
                  - '4'
                  - '4x2'
                  - '6x2'
                  - '6x4'
                  - '8x2'
                  - '8x4'
                colors:
                  -
                    id: 1
                    name: "AMARELO"



  "/populate-reason":
    get:
      description: Recebe a lista de motivos para exclusão de um anúncio
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
      responses:
        200:
          description: "Lista de motivos para exclusão de um anúncio"
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: array
                items:
                  $ref: '#/definitions/ObjetoLabelValue'
          examples:
            success: true
            data:
              -
                value: 1
                label: "Vendido pelo aplicativo Repasse"



  "/my-ads/{user_id}/{page}":
    get:
      description: Recebe a lista de anúncios de um usuário a partir do código de usuario limitado pelo numero da pagina
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: user_id
          in: path
          required: true
          type: integer
          description: Código do Usuário
        -
          name: page
          in: path
          required: true
          type: integer
          description: Página
      responses:
        200:
          description: Lista de anuncios de um usuario limitado por página
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                description: Listagem de anúncios
                type: array
                items:
                  $ref: '#/definitions/ObjetoCarroAnuncio'
          examples:
            application/json:
              success: true
              data:
                -
                  id: 419
                  user_id: 586
                  color_id: 1
                  brand_id: 88
                  fipe_id: 19951
                  car_status_id: 3
                  doors: 5
                  status: aberto
                  year: 2012
                  observation: Teste
                  price: 12457.00
                  km: 0
                  created_at: "2016-07-20 20:49:37"
                  updated_at: "2016-07-22 17:24:35"
                  published_at: "2016-07-22 17:24:35"
                  user:
                    id: 586
                    role_id: 2
                    name: Teste
                    email: "teste@gmail.com"
                    dealership: "Teste"
                    document: "987.654.321.00"
                    zipcode: "88117-292"
                    address: "Rua Tal"
                    number: "257"
                    neighborhood: "Centro"
                    city: "Palhoça"
                    state: "SC"
                    phone: "(48) 3035-2121"
                    cell_phone: "(48)9944-2727"
                    photo: "5734cd6faf3aa1463078255.jpg"
                    latitude: "-27.6425893"
                    longitude: "-48.6710633"
                    device_token: "User logged in navigator (PC)"
                    created_at: "-0001-11-30 00:00:00"
                    updated_at: "2016-08-24 17:06:33"
                    is_aprovado: "1"
                    color:
                      id: "1"
                      name: "AMARELO"
                      created_at: "2016-05-05 01:00:00"
                      updated_at: "2016-05-05 01:00:00"
                    brand:
                      id: "88"
                      name": "Teste"
                      created_at": "-0001-11-30 00:00:00"
                      updated_at": "-0001-11-30 00:00:00"
                    fipe:
                      id: "19951"
                      model: " Teste"
                      brand_id: "88"
                      year: "2012"
                      fuel: "G"
                      code: "1"
                      authentication: "21021"
                      price: "25457.00"
                      created_at: "-0001-11-30 00:00:00"
                      updated_at: "-0001-11-30 00:00:00"
                    car_status:
                      id: "3"
                      name: "VENDIDO"
                      created_at: "2016-05-07 01:00:00"
                      updated_at: "2016-05-07 01:00:00"
                    car_negotiations:
                      total: "1"
                    image: '3987296573490867304986.jpg'
                    photos:
                    optionals:
        400:
          description: "Erro no envio falta preencher um dos parâmetros"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: "Código do usuário ou número da página não informado!"
        403:
          description: "O codigo do usuario informado é diferente do usuário informado nas credenciais"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: "O usuário informado é diferente do usuário autorizado"



  "/car-negociando/{id}":
    get:
      description: Marcar um anúncio como negociando (e desmarcar caso esteja negociando)
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: id
          type: integer
          in: path
          required: true
          description: Id do anúncio
      responses:
        200:
          description: Alteração efetuada com sucesso (envia o status atual do carro)
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                properties:
                  status:
                    description: "Status do anuncio (depois da alteração)"
                    type: integer
          examples:
            application/json:
              success: true
              data:
                status: 1
        400:
          description: Falta um campo obrigatório
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'O campo id não foi informado'
        401:
          description: Falha de login (Invalid credentials.)
        403:
          description: Acesso negado (o anúncio não é deste usuário)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'O anúncio que você está tentando alterar não é seu'
        404:
          description: Veículo não encontrado
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Veículo não encontrado'

  "/car-ignore/{id}/{user}":
    get:
      description: Marcar um anúncio como ignorado
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: id
          type: integer
          in: path
          required: true
          description: Id do anúncio (carro)
        -
          name: user
          type: integer
          in: path
          required: true
          description: Id do comprador do veículo
      responses:
        200:
          description: Solicitação efetuada com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: array
                description: Array com as Ids criadas
                items:
                  $ref: '#/definitions/ArrayInteger'
          examples:
            application/json:
              success: true
              data:
                - 1
                - 2
                - 4
        400:
          description: Falta um parâmetro para completar a requisição
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Faltam parâmetros para completar a solicitação'
        401:
          description: Login incorreto (invalid credentials)

  "/car-photo-remove/{id}":
    get:
      description: Remove uma foto de um anúncio
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: id
          type: integer
          in: path
          required: true
          description: ID da foto a ser excluída
      responses:
        200:
          description: Foto removida com sucesso
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: true
              data: "Retorna todas as fotos que ainda estão no anúncio"
        400:
          description: Bad Request
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Falta um parâmetro'
        401:
          description: Falha de login (Invalid credentials.)
        403:
          description: Acesso negado (carro não é do usuário)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Acesso negado'
        404:
          description: Arquivo não existe
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Imagem não encontrada'

  "/car-negotiations/{car_id}":
    get:
      description: Lista as negociações de um anúncio
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: car_id
          type: integer
          in: path
          required: true
          description: ID do anúncio
      responses:
        200:
          description: Listagem de usuários negociando
          schema:
            $ref: '#/definitions/ObjetoNegotiation'
          examples:
            application/json:
              success: true
              data:
                -
                  room_id:  "48"
                  car_id:  "423"
                  user_id:  "589"
                  comprador_id:  "586"
                  vendedor_id: "587"
                  message:  "Jckkcmfkxkx"
                  image:  ""
                  audio:  ""
                  user_send:  "0"
                  created_at:  "2016-08-03 21:49:14"
                  updated_at:  "2016-08-03 21:49:14"
                  client:
                    id:  "586"
                    role_id:  "2"
                    name:  "Teste"
                    email:  "teste@gmail.com"
                    dealership:  "Teste"
                    document:  "987.654.321.00"
                    zipcode:  "88117-292"
                    address:  "Rua Tal"
                    number:  "257"
                    neighborhood:  "Centro"
                    city:  "Palhoça"
                    state:  "SC"
                    phone:  "(48) 3035-2121"
                    cell_phone:  "(48)9944-2727"
                    photo:  "5734cd6faf3aa1463078255.jpg"
                    latitude:  "-27.6428751"
                    longitude:  "-48.6700194"
                    device_token: "APA91bF_FOwHDsvdzIGPmyvhPPOnQmaEw21CJxHFzhP-__nIyjfLisRZAejis-COnwso-Wf5KZT2vi-E1XXBdeiozRLF-RQ4RBx3dcx1mv1iNYZIOWoaR_0"
                    created_at:  "-0001-11-30 00:00:00"
                    updated_at:  "2016-08-04 18:00:41"
                    is_aprovado:  "1"
        400:
          description: Falta parâmetro (bad request)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Parâmetro car_id não informado'
        401:
          description: Falha de login (Invalid credentials.)

  "/negotiations/{car_id}":
    get:
      description: Lista as negociações de um anúncio (sem as conversas)
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: car_id
          type: integer
          in: path
          required: true
          description: ID do anúncio
      responses:
        200:
          description: Listagem de usuários negociando
          schema:
            $ref: '#/definitions/ObjetoLightNegotiation'


  "/info-chat/{car_id}/{client_id}":
    get:
      description: Provê informações a respeito do carro
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: car_id
          type: integer
          in: path
          required: true
          description: ID do anúncio
        -
          name: client_id
          type: integer
          in: path
          required: true
          description: Id do usuário comprador
      responses:
        200:
          description: Solicitação concluída (dados na resposta)
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                $ref: '#/definitions/ObjetoInfoChat'
          examples:
            application/json:
              "success": true
              "data":
                "car":
                  "id": 12
                  "user_id": 616
                  "color_id": 4
                  "brand_id": 350
                  "fipe_id": 53020
                  "car_status_id": 1
                  "doors": 4
                  "eixos": ""
                  "status": "aberto"
                  "year": 2014
                  "observation": "File"
                  "price": 40744
                  "fipe_price": 50930
                  "km": 676767
                  "created_at": "2016-09-16 16:16:37"
                  "updated_at": "2016-09-16 16:16:37"
                  published_at: "2016-07-22 17:24:35"
                  "user":
                    "id": 616
                    "role_id": 2
                    "name": "Rafael Mena Barreto"
                    "email": "rafaelmenabarreto@gmail.com"
                    "dealership": "Rafael Veículos"
                    "document": "987.654.321-00"
                    "zipcode": "88101-440"
                    "address": "rua quinze de novembro"
                    "number": "150"
                    "neighborhood": "Centro"
                    "city": "São Jose"
                    "state": "SC"
                    "phone": "(48) 3241-4747"
                    "cell_phone": "(48) 9914-0044"
                    "photo": "57b5fb52409d31471544146.jpg"
                    "latitude": "-27.5979386"
                    "longitude": "-48.6065914"
                    "chat_token": "bb342d3a-1214-43e7-839a-52f88546ab35"
                    "device_token": "APA91bFhFVyXCagBq_olz-wbc47tfd9ALyqPZvbfhdWDAC97ETP1Q0Z4RXn7ESfFPz-n8F9DjH50OgOOLAAjqVqmD_sPVfJjTVRsiGBw-s-jPSYeFS5iODi0txhFHkGMTlbZN2V69HK"
                    "created_at": "2016-08-18 15:15:47"
                    "updated_at": "2016-09-29 16:09:43"
                    "last_seen": "2016-09-29 16:09:43"
                    "is_aprovado": 1
                  "color":
                    "id": 4
                    "name": "BRANCA"
                    "created_at": "-0001-11-30 00:00:00"
                    "updated_at": "-0001-11-30 00:00:00"
                  "brand":
                    "id": 350
                    "name": "Ford"
                    "created_at": "2016-08-31 10:26:08"
                    "updated_at": "2016-08-31 10:26:08"
                    type: "0"
                  "fipe":
                    "id": 53020
                    "model": "EcoSport FREESTYLE 1.6 16V Flex 5p"
                    "brand_id": 350
                    "year": "2014"
                    "fuel": "Gasolina"
                    "code": "003367-7"
                    "price": 50930
                    "created_at": "2016-08-31 10:26:09"
                    "updated_at": "2016-08-31 10:26:09"
                    "type": "0"
                  "car_status":
                    "id": 1
                    "name": "EM ABERTO"
                    "created_at": "2016-05-07 01:00:00"
                    "updated_at": "2016-05-07 01:00:00"
                  "image": "57dc4539ccf8e1474053433.jpg"
                  "photos":
                    "id": 13
                    "filename": "57dc4539ccf8e1474053433.jpg"
                    "car_id": 12
                    "created_at": "2016-09-16 16:17:14"
                    "updated_at": "2016-09-16 16:17:14"
                  "optionals":
                    -
                      "id": 59
                      "name": "Alarme"
                      "description": " "
                      "created_at": "2016-05-17 09:29:54"
                      "updated_at": "2016-05-17 09:29:54"
                      "type": "0"
                    -
                      "id": 61
                      "name": "Ar-condicionado"
                      "description": " "
                      "created_at": "2016-05-17 09:29:54"
                      "updated_at": "2016-05-17 09:29:54"
                      "type": "0"
                "client":
                  "id": 586
                  "role_id": 2
                  "name": "Teste"
                  "email": "teste@gmail.com"
                  "dealership": "Teste"
                  "document": "987.654.321.00"
                  "zipcode": "88117-292"
                  "address": "Rua Tal"
                  "number": "257"
                  "neighborhood": "Centro"
                  "city": "Palhoça"
                  "state": "SC"
                  "phone": "(48) 3035-2121"
                  "cell_phone": "(48)9944-2727"
                  "photo": "5734cd6faf3aa1463078255.jpg"
                  "latitude": "-27.6427301"
                  "longitude": "-48.6707506"
                  "chat_token": "3b1c37f0-2e88-4777-8571-d7e5c063672e"
                  "device_token": "User logged in navigator (PC)"
                  "created_at": "-0001-11-30 00:00:00"
                  "updated_at": "2016-10-04 09:40:28"
                  "last_seen": "2016-09-28 18:35:50"
                  "is_aprovado": 1
        400:
          description: Falta um parâmetro (bad request)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Parâmetro obrigatório não informado'
        404:
          description: Não localizado (carro ou cliente)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Anúncio informado não encontrado'

  "/states":
    get:
      description: Provê a lista de estados
      responses:
        200:
          description: A lista de estados
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: array
                description: Dados da lista de estados
                items:
                  $ref: '#/definitions/ObjetoState'
          examples:
            application/json:
              success: true
              data:
                -
                  "id": 1
                  "initials": "AC"
                  "name": "Acre"
                -
                  "id": 2
                  "initials": "AL"
                  "name": "Alagoas"
                -
                  "id": 3
                  "initials": "AM"
                  "name": "Amazonas"

  "/cities/{stateId}":
    get:
      description: Provê uma lista de cidades de um estado
      parameters:
        -
          name: stateId
          in: path
          type: integer
          required: true
          description: "Código do estado (informado no endpoint/states)"
      responses:
        200:
          description: A lista de estados
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: array
                description: Listagem de cidades
                items:
                  $ref: '#/definitions/ObjetoCity'
          examples:
            application/json:
              success: true
              data:
                -
                  id: 2
                  name: "XPTONópolis"
                -
                  id: 44
                  name: "Foobarnópolis"

        400:
          description: O parâmetro stateId não foi informado
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Falta um parâmetro'

  "/ddd/{state_id}":
    get:
      description: Informa a lista de DDDs do estado informado
      parameters:
        -
          name: state_id
          type: integer
          in: path
          required: true
          description: ID do estado
      responses:
        200:
          description: A lista de estados por DDD
          schema:
            $ref: '#/definitions/ObjetoDDD'
          examples:
            application/json:
              success: true
              data:
                -
                  id: 54
                  ddd: 47
                  name: "Joinville e Região"
                  label: "47 - Joinville e Região"
                -
                  id: 55
                  ddd: 48
                  name: "Florianópolis e Região"
                  label: "48 - Florianópolis e Região"


  "/get-chat-image/{filename}":
    get:
      description: Retorna uma imagem trocada no chat
      parameters:
        -
          name: filename
          type: string
          in: path
          required: true
          description: Nome do arquivo
      responses:
        200:
          description: a imagem
        404:
          description: Imagem não encontrada

  "/get-chat-audio/{filename}":
    get:
      description: Retorna uma áudio trocada no chat
      parameters:
        -
          name: filename
          type: string
          in: path
          required: true
          description: Nome do arquivo
      responses:
        200:
          description: a imagem
        404:
          description: Imagem não encontrada

  #getprofiles
  "/profile/states":
    get:
      description: Lista os estados que o usuário não cadastrou perfil
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
      responses:
        200:
          description: A lista de estados
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: array
                description: Dados da lista de estados
                items:
                  $ref: '#/definitions/ObjetoState'
          examples:
            application/json:
              success: true
              data:
                -
                  "id": 1
                  "initials": "AC"
                  "name": "Acre"
                -
                  "id": 2
                  "initials": "AL"
                  "name": "Alagoas"
                -
                  "id": 3
                  "initials": "AM"
                  "name": "Amazonas"


  "/profile/list":
    get:
      description: Lista os perfis do usuário
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
      responses:
        200:
          description: Dados da solicitação
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: "Resultado da operação"
              data:
                type: array
                description: Array com os perfis
                items:
                  $ref: '#/definitions/ObjetoProfile'
          examples:
            application/json:
              success: true
              data:
                -
                  id: 3
                  state_id: 24
                  start_year: 2009
                  end_year: 2016
                  user_id: 643
                  updated_at: "2016-10-31 14:44:52"
                  created_at: "2016-10-31 14:44:52"
                  ddds:
                    -
                      id: 54
                      state_id: 24,
                      state_name: "Santa Catarina"
                      ddd: 47
                      name: "Joinville e Região"
                    -
                      id: 55
                      state_id: 24
                      state_name: "Santa Catarina"
                      ddd: 48
                      name: "Florianópolis e Região"
                  types:
                    -
                      id: 0
                      name: "Carro"
                    -
                      id: 5
                      name: "Caminhão"
                -
                  id: 3
                  state_id: 24
                  start_year: 2009
                  end_year: 2016
                  user_id: 643
                  updated_at: "2016-10-31 14:44:52"
                  created_at: "2016-10-31 14:44:52"
                  ddds:
                    -
                      id: 54
                      state_id: 24,
                      state_name: "Santa Catarina"
                      ddd: 47
                      name: "Joinville e Região"
                    -
                      id: 55
                      state_id: 24
                      state_name: "Santa Catarina"
                      ddd: 48
                      name: "Florianópolis e Região"
                  types:
                    -
                      id: 0
                      name: "Carro"
                    -
                      id: 5
                      name: "Caminhão"


  "/profiles/{profile_id}":
    get:
      description: Lista os perfis do usuário
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: profile_id
          type: integer
          in: path
          required: true
          description: "Id do perfil no banco de dados"
      responses:
        200:
          description: Dados da operação
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                items:
                  $ref: '#/definitions/ObjetoProfile'
          examples:
            application/json:
              success: true
              data:
                id: 3
                state_id: 24
                start_year: 2009
                end_year: 2016
                user_id: 643
                updated_at: "2016-10-31 14:44:52"
                created_at: "2016-10-31 14:44:52"
                ddds:
                  -
                    id: 54
                    state_id: 24,
                    state_name: "Santa Catarina"
                    ddd: 47
                    name: "Joinville e Região"
                  -
                    id: 55
                    state_id: 24
                    state_name: "Santa Catarina"
                    ddd: 48
                    name: "Florianópolis e Região"
                types:
                  -
                    id: 0
                    name: "Carro"
                  -
                    id: 5
                    name: "Caminhão"
        400:
          description: Falta um parâmetro obrigatório (profile_id)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Perfil não informado'
        403:
          description: O perfil informado não é do usuário autenticado
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'O Perfil informado não pertence ao seu usuário'
        404:
          description: Perfil informado não existe
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'O Perfil informado não existe'


  "/profile/muted/list":
    get:
      description: "Lista as opções de silenciamento de notificação de novos anúncios"
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
      responses:
        200:
          description: Dados da operação
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                properties:
                  muted_options:
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoLabelValue'
          examples:
            application/json:
              success: true
              data:
                muted_options:
                  -
                    label: 'Duas Horas'
                    value: '2h'
                  -
                    label: 'Oito Horas'
                    value: '8h'

  "/profile/muted/until":
    get:
      description: Recebe as informações de silenciamento de novos anúncios
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
      responses:
        200:
          description: Dados da operação realizada
          schema:
            $ref: '#/definitions/ObjetoMuted'
          examples:
            application/json:
              success: true
              data:
                muted_until: "2016-11-14T10:43:56-02:00"


  "/user/{user_id}":
    get:
      description: Retorna os dados do usuário
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: user_id
          type: integer
          in: path
          required: true
          description: Id do usuário
      responses:
        200:
          description: Dados do usuário
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                items:
                  $ref: '#/definitions/ObjetoUsuario'
          examples:
            application/json:
              success: true
              data:
                id: 643
                role_id: 2,
                name: "Rafael Mena Barreto"
                email: "rafaelmenabarreto@gmail.com"
                dealership: "Rafael Veículos"
                document: "00895813939"
                zipcode: "88101440"
                address: "Rua Quinze de Novembro"
                number: "15."
                neighborhood: "Campinas"
                city: "São José"
                state: "SC"
                phone: "4832414744"
                cell_phone: "4891594114"
                photo: "57f6a70b014d81475782410.jpg"
                latitude: "-27.5985389"
                longitude: "-48.6075843"
                chat_token: "5ea3c401-9c87-4667-90eb-26b59f567da3"
                device_token: null
                created_at: "2016-10-06 16:33:34"
                updated_at: "2016-11-21 15:47:21"
                last_seen: "2016-11-17 15:14:39"
                muted_until: "-0001-11-30 00:00:00"
                is_aprovado: 1

  # pesquisa
  "/search/populate":
    get:
      consumes:
        - application/json
      description: Popula a tela de pesquisa
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
      responses:
        200:
          description: Dados da operação
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                $ref: '#/definitions/ObjetoPopulateSearch'

  "/search/populate/type/{car_type}":
    get:
      consumes:
        - application/json
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: car_type
          type: integer
          in: path
          required: true
          description: Tipo de veículo
      responses:
        200:
          description: Dados da operação
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                properties:
                  brands:
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoBrand'
                  models:
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoModelo'

  "/search/populate/models/{brand_id}":
    get:
      description: Envia uma lista de modelos de acordo com uma marca
      consumes:
        - application/json
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: brand_id
          type: integer
          in: path
          required: true
          description: Marca
      responses:
        200:
          description: Dados da operacao
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: resultado da operação
              data:
                type: object
                properties:
                  models:
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoModelo'


  #post

  "/contact":
    post:
      produces:
        - application/json
      consumes:
        - application/json
      description: Envia os dados do formulário de contato do site
      parameters:
        -
          name: body
          in: body
          required: true
          description: JSON com os dados de contato
          schema:
            $ref: '#/definitions/DadosContato'
      responses:
        200:
          description: Contato registrado com sucesso
        422:
          description: Erro de validação verifique os campos
          schema:
            $ref: '#/definitions/ObjetoValidado'



  "/register":
    post:
      consumes:
        - application/json
      description: Cadastra o novo usuário
      parameters:
        -
          name: body
          in: body
          required: true
          description: JSON com os dados de cadastro
          schema:
            $ref: '#/definitions/DadosCadastro'
      responses:
        200:
          description: Usuário cadastrado com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: "Resultado da operação (true or false)"
              data:
                $ref: '#/definitions/ObjetoUsuario'
          examples:
            application/json:
              success: true
              data:
                id:  "597"
                role_id:  "2"
                name:  "rgerino"
                email:  "teste@rgerino.com"
                dealership:  "Rgerino Motors"
                document:  "987.654.321-00"
                zipcode:  "88117-292"
                address:  "Rua Gerôncio Thives"
                number:  "150"
                neighborhood:  "Centro"
                city:  ""
                state:  ""
                phone:  "(48) 3241-4777"
                cell_phone:  "(48) 9919-4141"
                photo:  "5797aadb429b41469557467.jpg"
                device_token: null
                created_at:  "2016-07-26 18:24:27"
                updated_at:  "2016-07-26 18:24:27"
                is_aprovado:  "0"
        400:
          description: Bad Request um dos campos obrigatórios não foi preenchido
          schema:
            $ref: '#/definitions/ObjetoValidado'
          examples:
            application/json:
              success: false
              msg:
                campo: name
                erro: "Campo não preenchido"
        401:
          description: Usuário cadastrado está com as credenciais incorretas
        409:
          description: "O e-mail informado já está no banco de dados (duplicado)"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: "O email informado está em uso!"

  "/user/update":
    post:
      consumes:
        - application/json
      description: Atualiza os dados de um usuário
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com os dados de cadastro
          schema:
            $ref: '#/definitions/DadosCadastro'
      responses:
        200:
          description: Operação realizada com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                items:
                  $ref: '#/definitions/ObjetoUsuario'
          examples:
            application/json:
              success: true
              data:
                id": 659,
                role_id": 2,
                name": "Fabricio Freitas"
                email": "aaasa@gmail.com"
                dealership": "FF Repasses"
                document": "hhh.654.321-00"
                zipcode": "96880-000"
                address": "rua tiradentes"
                number": "345"
                neighborhood": "Centro"
                city": "vera cruz"
                state": "RS"
                phone": "(51) 99717-9174"
                cell_phone": "(51) 91107-11174"
                photo": "teste"
                latitude": ""
                longitude": ""
                chat_token": "9722f326-fbaa-4a37-9358-910a63757fcd"
                device_token": null
                created_at": "2016-12-01T11:09:39-02:00"
                last_seen": "0000-00-00 00:00:00"
                is_aprovado": 1

  "/user/image/update":
    post:
      consumes:
        - application/json
        - multipart/form-data
      description: Atualiza a imagem do perfil de um usuário
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication

        -
          name: filename
          in: formData
          required: true
          description: Dados para indicar um amigo
          type: file
      responses:
        200:
          description: Arquivo recebido com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resulado da operação
              filename:
                type: string
                description: Nome do arquivo
          examples:
            application/json:
              success: true
              filename: 'fsgfsgr.jpg'
        400:
          description: Falta um parâmetro ou o tipo de arquivo é inválido
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              msg:
                type: string
                description: Mensagem (human-readable) do resultado da operação
          examples:
            application/json:
              success: false
              msg: "Arquivo não enviado ou conteúdo inválido"
        401:
          description: Falha de login (Invalid credentials.)

  "/user/credentials/update":
    post:
      consumes:
        - application/json
      description: Atualiza o email e a senha de um usuário
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com os dados de cadastro
          schema:
            $ref: '#/definitions/DadosLogin'
      responses:
        200:
          description: Dados atualizados com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resulado da operação
              data:
                type: object
                items:
                  $ref: '#/definitions/ObjetoUsuario'
          examples:
            application/json:
              success: true
              msg: ''
        400:
          description: Falta um parâmetro ou o tipo de arquivo é inválido
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              msg:
                type: string
                description: Mensagem (human-readable) do resultado da operação
          examples:
            application/json:
              success: false
              msg: "Arquivo não enviado ou conteúdo inválido"
        401:
          description: Falha de login (Invalid credentials.)

  "/user/type/update":
    post:
      consumes:
        - application/json
      description: Atualiza o tipo de um usuário
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com os dados de cadastro
          schema:
            type: object
            properties:
              user_type:
                type: string
                description: "Tipo de usuário"
      responses:
        200:
          description: Dados atualizados com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resulado da operação
              data:
                type: object
                items:
                  $ref: '#/definitions/ObjetoUsuario'
          examples:
            application/json:
              success: true
              data: ''

  "/login":
    post:
      deprecated: true
      consumes:
        - application/json
      description: Efetua o Login do Usuário
      parameters:
        -
          name: body
          in: body
          required: true
          description: JSON com os dados do contato
          schema:
            $ref: '#/definitions/DadosLogin'
      responses:
        200:
          description: O Login foi efetuado com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: "Resultado da operação (true or false)"
              data:
                $ref: '#/definitions/ObjetoUsuario'
          examples:
            application/json:
              success: "true"
              data:
                id:  "586"
                role_id:  "2"
                name:  "Teste"
                email:  "teste@gmail.com"
                dealership:  "Teste"
                document:  "987.654.321.00"
                zipcode:  "88117-292"
                address:  "Rua Tal"
                number:  "257"
                neighborhood:  "Centro"
                city:  "Palhoça"
                state:  "SC"
                phone:  "(48) 3035-2121"
                cell_phone:  "(48)9944-2727"
                photo:  "5734cd6faf3aa1463078255.jpg"
                latitude:  "-27.6429928"
                longitude:  "-48.6699612"
                device_token:  "x"
                created_at:  "-0001-11-30 00:00:00"
                updated_at:  "2016-07-26 15:10:21"
                is_aprovado:  "1"
                fipePercent:  "20"
        401:
          description: A combinação email/password fornecida não confere
          examples:
            application/json:
              success: "false"
              msg: 'Usuário e/ou senha inválido!'
        403:
          description: O email e a senha conferem mas o usuario está bloqueado
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: "true"
              msg: "AGUARDANDO"

  "/update-token":
    post:
      consumes:
        - application/json
      description: Atualiza o Device Token de um usuário
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com os dados do usuário
          schema:
            $ref: '#/definitions/DadosToken'
      responses:
        200:
          description: Solicitação processada com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: "Resultado da operação (true or false)"
              data:
                type: object
                items:
                  $ref: '#/definitions/ObjetoUsuario'
          examples:
            application/json:
              success: "true"
              data:
                id:  "586"
                role_id:  "2"
                name:  "Teste"
                email:  "teste@gmail.com"
                dealership:  "Teste"
                document:  "987.654.321.00"
                zipcode:  "88117-292"
                address:  "Rua Tal"
                number:  "257"
                neighborhood:  "Centro"
                city:  "Palhoça"
                state:  "SC"
                phone:  "(48) 3035-2121"
                cell_phone:  "(48)9944-2727"
                photo:  "5734cd6faf3aa1463078255.jpg"
                latitude:  "-27.6429928"
                longitude:  "-48.6699612"
                device_token:  "x"
                created_at:  "-0001-11-30 00:00:00"
                updated_at:  "2016-07-26 15:10:21"
                is_aprovado:  "1"
        400:
          description: Um dos parâmetros obrigatórios não foi preenchido
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Faltam parâmetros para concluir a operação'
        401:
          description: "Acesso Negado"
        403:
          description: "O usuário informado é diferente do usuário autorizado"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Usuário autenticado é diferente do usuário da requisição'


  "/ratings/save":
    post:
      consumes:
        - application/json
      description: Sava a avaliação do usuário
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com a avaliação de um usuário
          schema:
            $ref: '#/definitions/DadosAvaliacao'
      responses:
        200:
          description: Avaliação recebida com sucesso
          schema:
            $ref: '#/definitions/ObjetoPadrao'


  "/car":
    post:
      consumes:
        - application/json
      description: Publicar novo anúncio
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com os dados do anúncio
          schema:
            $ref: '#/definitions/DadosAnuncio'
      responses:
        200:
          description: Carro cadastrado com sucesso (também envia push notification)
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da requisição (true or false)
              car_id:
                type: integer
                description: ID do carro (anúncio)
              msg:
                type: string
                description: Mensagem informativa
          examples:
            application/json:
              success: true
              car_id: 515
              msg: 'Anúncio cadastrado com sucesso'
        400:
          description: Um dos campos obrigatórios não foi preenchido
          schema:
            $ref: '#/definitions/ObjetoValidado'
          examples:
            application/json:
              success: false
              msg:
                fipe_id:
                  - "O campo precisa ser preenchido."
        401:
          description: Falha de login
        403:
          description: Acesso negado (o usuário não tem permissão para enviar anúncios)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Usuário não autorizado'

  "/car-edit":
    post:
      consumes:
        - application/json
      description: Editar anúncio
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com os dados do anúncio
          schema:
            $ref: '#/definitions/DadosAtualizar'
      responses:
        200:
          description: Carro atualizado
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da requisição (true or false)
              car_id:
                type: integer
                description: ID do carro (anúncio)
              msg:
                type: string
                description: Mensagem informativa
          examples:
            application/json:
              success: true
              car_id: 515
              msg: 'Anúncio cadastrado com sucesso'
        400:
          description: Um dos campos obrigatórios não foi preenchido
          schema:
            $ref: '#/definitions/ObjetoValidado'
          examples:
            application/json:
              success: false
              msg:
                fipe_id:
                  - "O campo precisa ser preenchido."
        401:
          description: Falha de login
        403:
          description: Acesso negado (o usuário não tem permissão para enviar anúncios)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Usuário não autorizado'

  "/car-publish":
    post:
      consumes:
        -
          application/json
      description: Muda o status do carro de Em cadastro para Em Aberto
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com os dados do anúncio
          schema:
            $ref: '#/definitions/DadosPublicar'
      responses:
        201:
          description: Anúncio publicado com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: "Boolean do resultado da operação (true or false)"
              msg:
                type: string
                description: "Mensagem descritiva do erro"
              car:
                type: object
                properties:
                  schema:
                    $ref: '#/definitions/ObjetoCarroAnuncio'


          examples:
            application/json:
              success: true
              msg: 'Anuncio publicado com sucesso'
        400:
          description: Bad request (faltam parâmetros)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Falta um parâmetro'
        401:
          description: Falha de login (Invalid credentials.)
        403:
          description: "Acesso negado (usuário não é dono do anúncio)"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Acesso negado'
        404:
          description: Anúncio não encontrado
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Anúncio não encontrado!'
        409:
          description: Quantidade de fotos não confere
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'A quantidade de fotos difere da solicitada (entre 4 e 6)'
        412:
          description: Anúncio já foi publicado
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Anúncio já foi publicado'

  "/car-sold":
    post:
      description: Marca um anúncio como vendido
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: JSON com os dados do anúncio
          schema:
            $ref: '#/definitions/DadosCarSold'
      responses:
        200:
          description: Requisição efetuada com sucesso
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: true
              msg: 'Veículo marcado como vendido com sucesso'
        400:
          description: Um dos parâmetros obrigatórios não foi preenchido
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Falta um parâmetro obrigatório'
        401:
          description: Login incorreto (invalid credentials)
        403:
          description: Usuário logado não é o proprietário do veículo
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'O usuário não é o proprietário do carro'
        404:
          description: Carro ou comprador não localizados
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Carro ou comprador não existem'
        409:
          description: Carro está vendido
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Veículo já encontra-se vendido'


  "/car-remove":
    post:
      consumes:
        - application/json
      description: Remove um carro do banco de dados
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: Ids dos veículos a serem removidos
          schema:
            $ref: '#/definitions/DadosEmArray'
      responses:
        200:
          description: Anúncio removido com sucesso
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: true
              msg: "Veículo removido com sucesso"
        400:
          description: "Falha (um dos campos obrigatórios não foi informado)"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Faltam parâmetros para completar a requisição'
        401:
          description: Falha de login (Invalid credentials.)
        403:
          description: 'Acesso negado: Um ou mais veículos não pertence a esse usuario'
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Acesso negado'
        404:
          description: "Um ou mais veículos não foi localizado"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Um dos veículos informados não foi encontrado'
        409:
          description: "Um ou mais veículos não podem ser excluidos"
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Um ou mais veículos estão vendidos'
        500:
          description: Falha interna impede que os dados sejam removidos
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Falha ao excluir veículo'

  "/car-image/{car_id}":
    post:
      consumes:
        - application/json
        - multipart/form-data
      description: Enviar uma imagem relativa a um anúncio
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: car_id
          in: path
          required: true
          type: integer
          description: Id do anúncio
        -
          name: filename
          in: formData
          required: true
          type: file
          description: Arquivo de imagem
        -
          name: order
          in: formData
          required: false
          type: integer
          description: "Ordem da foto no anúncio (para definir a foto principal envie 1)"

      responses:
        200:
          description: Imagem enviada com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: "resultado da operação (true or false)"
              data:
                type: object
                description: "Dados da operação"
                properties:
                  id:
                    type: integer
                    description: Id da imagem enviada
                  filename:
                    type: string
                    description: "Nome do arquivo thumbnail para ser usado no frontend"
          examples:
            application/json:
              success: true
              data:
                id: 10
                filename: "23103210321321.png"
        400:
          description: Bad request, falta algum campo obrigatório
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Campo obrigatório não preenchido'
        401:
          description: Falha de login (invalid credentials)
        403:
          description: Usuário não é o anunciante
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Não autorizado'
        404:
          description: Anúncio não existe
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Anúncio não localizado'

  "/car-ignore":
    post:
      consumes:
        - application/json
      description: Marcar um ou mais anúncios como ignorado
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: Array com Id dos anúncios (carro)
          schema:
            $ref: '#/definitions/DadosEmArray'
      responses:
        200:
          description: Solicitação efetuada com sucesso retorna as ids cadastradas
          schema:
            $ref: '#/definitions/ObjetoArray'
          examples:
            application/json:
              success: true
              data:
                - 2
                - 3
        400:
          description: Faltam parâmetros
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Faltam parâmetros para completar a solicitação'
        401:
          description: Login incorreto (invalid credentials)

  "/user-image":
    post:
      description: envia uma imagem de usuário
      consumes:
        - application/json
        - multipart/form-data
      parameters:
        -
          name: filename
          in: formData
          required: true
          description: Dados para indicar um amigo
          type: file
      responses:
        200:
          description: Arquivo recebido com sucesso
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resulado da operação
              filename:
                type: string
                description: Nome do arquivo
          examples:
            application/json:
              success: true
              filename: 'fsgfsgr.jpg'
        400:
          description: Falta um parâmetro ou o tipo de arquivo é inválido
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              msg:
                type: string
                description: Mensagem (human-readable) do resultado da operação
          examples:
            application/json:
              success: false
              msg: "Arquivo não enviado ou conteúdo inválido"
        401:
          description: Falha de login (Invalid credentials.)

  "/chat-image":
    post:
      description: envia uma imagem de bate-papo
      consumes:
        - application/json
        - multipart/form-data
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: filename
          in: formData
          required: true
          description: Dados para indicar um amigo
          type: file
      responses:
        200:
          description: Mensagem enviada
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resulado da operação
              filename:
                type: string
                description: Nome do arquivo
          examples:
            application/json:
              success: true
              filename: 'fsgfsgr.jpg'
        401:
          description: Falha de login (Invalid credentials.)

  "/chat-audio":
    post:
      description: envia um audio ao bate-papo
      consumes:
        - application/json
        - multipart/form-data
      parameters:
        -
          name: Authorization
          in: header
          required: true
          type: string
          description: Basic Authentication
        -
          name: filename
          in: formData
          required: true
          description: Dados para indicar um amigo
          type: file
      responses:
        200:
          description: Mensagem enviada
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              filename:
                type: string
                description: 'Nome do arquivo'
          examples:
            application/json:
              success: true
              filename: 'gfdrgherhdfhdf.m4a'
        401:
          description: Falha de login (Invalid credentials.)

  "/purchase":
    post:
      consumes:
        - application/json
      description: "Recebe a lista de anúncios com base nas permissoes de anúncios e na lista de ignorados"
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: false
          description: Dados para fazer a requisição
          schema:
            $ref: '#/definitions/DadosPurchase'
      responses:
        200:
          description: Lista de anuncios limitado por página
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              last_request:
                type: string
                description: Data/hora da última requisição
              badge:
                type: integer
                description: Quantidade de anúncios novos
              request:
                type: string
                description: Data/hora desta requisição
              data:
                type: array
                description: Array de anúncios
                items:
                  $ref: '#/definitions/ObjetoCarroAnuncio'
          examples:
            application/json:
              success: true
              request: "2016-08-15 14:05:25"
              data: ""
        400:
          description: Falta um parametro para completar a requisicao
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Código do usuário ou número da página não informado!'
        401:
          description: Login incorreto (invalid credentials)

  "/denounce":
    post:
      consumes:
        - application/json
      description: Denunciar um anúncio
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: false
          description: Dados para fazer a requisição
          schema:
            $ref: '#/definitions/DadosDenuncia'
      responses:
        200:
          description: Denúncia encaminhada
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: true
              msg: "Denúncia efetuada com sucesso"
        400:
          description: Falta um campo obrigatório
          schema:
            $ref: '#/definitions/ObjetoValidado'
          examples:
            application/json:
              success: false
              msg:
                id:
                  - o campo não foi preenchido
                motivo:
                  - o campo não foi preenchido
        401:
          description: Login incorreto (invalid credentials)
        404:
          description: Anúncio não existe
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: "Anúncio não localizado"

  "/recupera-senha":
    post:
      description: Recupera a senha do usuário
      consumes:
        - application/json
      parameters:
        -
          name: body
          in: body
          required: false
          description: Dados para fazer a requisição
          schema:
            $ref: '#/definitions/DadosRecuperaSenha'
      responses:
        200:
          description: Operação realizada com sucesso
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: true
              msg: 'Instruções para o desbloqueio foram enviadas para seu e-mail'
        400:
          description: Paramentro faltando
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: true
              msg: 'Instruções para o desbloqueio foram enviadas para seu e-mail'

  #post search

  "/search":
    post:
      description: Faz uma pesquisa
      consumes:
        - application/json
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: false
          description: Dados para fazer a requisição
          schema:
            $ref: '#/definitions/DadosPesquisa'
      responses:
        200:
          description: Resultados da pesquisa
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              total:
                type: integer
                description: Quantidade de resultados da pesquisa
              data:
                type: array
                items:
                  $ref: '#/definitions/ObjetoCarroAnuncio'


  #post profiles

  "/profile/muted/update":
    post:
      description: "Atualiza a informação de silenciamento de notificações do usuário"
      consumes:
        - application/json
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: false
          description: Dados para salvar a requisição
          schema:
            $ref: '#/definitions/DadosMuted'
      responses:
        200:
          description: Atualização efetuada com sucesso
          schema:
            $ref: '#/definitions/ObjetoMuted'
          examples:
            application/json:
              success: true
              data:
                muted_until: "2016-11-14T10:43:56-02:00"



  "/profile/save":
    post:
      description: "Salva um perfil no banco de dados"
      consumes:
        - application/json
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: false
          description: Dados para salvar a requisição
          schema:
            $ref: '#/definitions/DadosProfile'
      responses:
        200:
          description: Solicitação gravada com sucesso e dados do perfil criado
          schema:
            $ref: '#/definitions/ObjetoProfile'
          examples:
            application/json:
              success: true
              data:
                id: 3
                state_id: 24
                start_year: 2009
                end_year: 2016
                user_id: 643
                updated_at: "2016-10-31 14:44:52"
                created_at: "2016-10-31 14:44:52"
                ddds:
                  -
                    id: 54
                    state_id: 24,
                    state_name: "Santa Catarina"
                    ddd: 47
                    name: "Joinville e Região"
                  -
                    id: 55
                    state_id: 24
                    state_name: "Santa Catarina"
                    ddd: 48
                    name: "Florianópolis e Região"
                types:
                  -
                    id: 0
                    name: "Carro"
                  -
                    id: 5
                    name: "Caminhão"
        400:
          description: Algum dos parâmetros requisitados não foi informado

  "/profile/remove":
    post:
      description: Remove o perfil informado
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: Ids dos perfis a serem removidos
          schema:
            $ref: '#/definitions/DadosEmArray'
      responses:
        200:
          description: Dados da operação
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: true
              msg: 'Perfil removido com sucesso!'
        400:
          description: Falta um parâmetro obrigatório (profile_id)
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Perfil não informado'
        403:
          description: O perfil informado não é do usuário autenticado
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'O Perfil informado não pertence ao seu usuário'
        404:
          description: Perfil informado não existe
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'O Perfil informado não existe'

  "/profile/{profile_id}/update":
    post:
      description: "Salva um perfil no banco de dados"
      consumes:
        - application/json
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: profile_id
          type: integer
          in: path
          required: true
          description: Id do perfil
        -
          name: body
          in: body
          required: false
          description: Dados para salvar a requisição
          schema:
            $ref: '#/definitions/DadosProfile'
      responses:
        200:
          description: Solicitação gravada com sucesso e dados do perfil criado
          schema:
            $ref: '#/definitions/ObjetoProfile'
          examples:
            application/json:
              success: true
              data:
                id: 3
                state_id: 24
                start_year: 2009
                end_year: 2016
                user_id: 643
                updated_at: "2016-10-31 14:44:52"
                created_at: "2016-10-31 14:44:52"
                ddds:
                  -
                    id: 54
                    state_id: 24,
                    state_name: "Santa Catarina"
                    ddd: 47
                    name: "Joinville e Região"
                  -
                    id: 55
                    state_id: 24
                    state_name: "Santa Catarina"
                    ddd: 48
                    name: "Florianópolis e Região"
                types:
                  -
                    id: 0
                    name: "Carro"
                  -
                    id: 5
                    name: "Caminhão"

  "/profile/muted/remove":
    delete:
      description: "Remove a solicitação de silenciar novos anúncios"
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
      responses:
        200:
          description: Solicitação efetuada com sucesso
          schema:
            $ref: '#/definitions/ObjetoMuted'
          examples:
            application/json:
              success: true
              data:
                muted_until: "2016-11-07T18:31:02-02:00"
  # Favoritos:
  "/favorites/{car_id}/change":
    get:
      description: "Altera o status de favorito de um anúncio em relação ao usuário que fez a requisição"
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: car_id
          type: integer
          in: path
          required: true
          description: id do anúncio
      responses:
        200:
          description: Operacao efetuada (retorna dados da operacao
          schema:
            $ref: '#/definitions/ObjetoFavoriteResponse'
          examples:
            application/json:
              success: true
              total: 3
              car_id: 825
              is_favorite: true
        400:
          description: Faltam parâmetros para a operação
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Anúncio não informado!'
        404:
          description: O carro não existe
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Anúncio não encontrado!'
        409:
          description: Anúncio não está aberto a negociação ou não é seu
          schema:
            $ref: '#/definitions/ObjetoPadrao'
          examples:
            application/json:
              success: false
              msg: 'Anúncio não está aberto!'

  "/favorites":
    post:
      description: Lista os favoritos de um usuário
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: false
          description: Dados para salvar a requisição
          schema:
            $ref: '#/definitions/DadosFavorite'
      responses:
        200:
          description: Dados da operação
          schema:
            $ref: '#/definitions/ObjetoFavorites'

  "/leads/new":
    post:
      description: Envia a lead para o sistema
      parameters:
        -
          name: Authorization
          type: string
          in: header
          required: true
          description: Basic Authentication
        -
          name: body
          in: body
          required: true
          description: Dados para salvar a requisição
          schema:
            $ref: '#/definitions/DadosLead'
      responses:
        200:
          description: Operação efetuada comn sucesso



  #rotas de degustação
  "/open/ofertas":
    post:
      consumes:
        - application/json
      description: Ofertas de anúncios abertos a usuários não cadastrados
      parameters:
        -
          name: body
          in: body
          required: true
          description: Dados para efetuar a requisição
          schema:
            $ref: '#/definitions/DadosOfertas'
      responses:
        200:
          description: Operacao efetuada com sucesso (envia os carros de acordo com a requisição porem sem nenhum dado que identifique o anunciante)

  # Rota de site client (store_site)

  "/store_site/{store_id}/cars":
    get:
      description: Faz uma pesquisa na listagem de anúncios do cliente
      tags:
        - store_site
      consumes:
        - application/json
      parameters:
        -
          name: store_id
          type: integer
          in: path
          required: true
          description: id do cliente
        -
          name: car_type
          in: query
          type: integer
          required: false
          description: "Tipo do anúcio (0=carro, 5=caminhão, 8=moto)"
        -
          name: brand_id
          in:  query
          type: integer
          required: false
          description: Marca
        -
          name: model_id
          in: query
          type: integer
          required: false
          description: Modelo
        -
          name: start_year
          in: query
          type: integer
          required: false
          description: "Ano inicial"
        -
          name: end_year
          in: query
          type: integer
          required: false
          description: "Ano Final"
        -
          name: fuel
          in: query
          type: array
          required: false
          description: Combustível
          items:
            type: string
        -
          name: start_price
          type: number
          description: 'Valor inicial do carro'
          in: query
          required: false
        -
          name: end_price
          type: number
          description: 'Valor final do carro'
          in: query
          required: false
        -
          name: doors
          type: array
          description: Array com a quantidade de portas
          in: query
          required: false
          items:
            type: integer
        -
          name: eixos
          type: array
          description: Array com os eixos de caminhão
          in: query
          required: false
          items:
            type: string
        -
          name: color_ids
          type: array
          description: Array com as cores
          in: query
          required: false
          items:
            type: integer
        -
          name: start_km
          type: integer
          description: "Km inicial do veículo"
          in: query
          required: false
        -
          name:  end_km
          type: integer
          description: "Km final do veículo"
          in: query
          required: false
        -
          name: optionals_id
          type: array
          description: Array com os opcionais do veículo
          in: query
          required: false
          items:
            type: integer
        -
          name: state_id
          type: integer
          description: Quando informado filtra os anúncios por estado
          in: query
          required: false
        -
          name: ddds
          type: array
          description: Array com os ddds
          in: query
          required: false
          items:
            type: integer
        -
          name: order_by
          type: string
          description: Ordem da pesquisa (price ou year)
          in: query
          required: false
        -
          name: direction
          type: string
          description: A direção da pesquisa (ASC ou DESC)
          in: query
          required: false
        -
          name: page
          type: integer
          description: A página solicitada
          in: query
          required: false

      responses:
        200:
          description: Resultados da pesquisa
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              total:
                type: integer
                description: Quantidade de resultados da pesquisa
              order_by:
                type: object
                description: "Dados para ordenar o anúncio"
              data:
                type: array
                items:
                  $ref: '#/definitions/ObjetoCarroAnuncio'

  "/store_site/{store_id}/car/{car_id}":
    get:
      description: Faz uma pesquisa na listagem de anúncios do cliente
      tags:
        - store_site
      consumes:
        - application/json
      parameters:
        -
          name: store_id
          type: integer
          in: path
          required: true
          description: id do cliente
        -
          name: car_id
          in: path
          type: integer
          required: true
          description: "Id do anúncio"
      responses:
        200:
          description: Resultados da pesquisa
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                $ref: '#/definitions/ObjetoCarroAnuncio'



  "/store_site/{store_id}/populate/":
    get:
      tags:
        - store_site
      description: "teste"
      parameters:
        -
          name: store_id
          type: integer
          in: path
          required: true
          description: id do cliente
      responses:
        200:
          description: Dados da operação
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                $ref: '#/definitions/ObjetoPopulateSearch'

  "/store_site/{store_id}/populate/type/{car_type}":
    get:
      tags:
        - store_site
      consumes:
        - application/json
      parameters:
        -
          name: store_id
          type: integer
          in: path
          required: true
          description: id do cliente
        -
          name: car_type
          type: integer
          in: path
          required: true
          description: Tipo de veículo
      responses:
        200:
          description: Dados da operação
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: Resultado da operação
              data:
                type: object
                properties:
                  brands:
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoBrand'
                  models:
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoModelo'

  "/store_site/{store_id}/populate/models/{brand_id}":
    get:
      tags:
        - store_site
      description: Envia uma lista de modelos de acordo com uma marca
      consumes:
        - application/json
      parameters:
        -
          name: store_id
          type: integer
          in: path
          required: true
          description: id do cliente
        -
          name: brand_id
          type: integer
          in: path
          required: true
          description: Marca
      responses:
        200:
          description: Dados da operacao
          schema:
            type: object
            properties:
              success:
                type: boolean
                description: resultado da operação
              data:
                type: object
                properties:
                  models:
                    type: array
                    items:
                      $ref: '#/definitions/ObjetoModelo'

  "/store_site/{store_id}/ddd/{state_id}":
    get:
      description: Informa a lista de DDDs do estado informado
      parameters:
        -
          name: store_id
          type: integer
          in: path
          required: true
          description: id do cliente
        -
          name: state_id
          type: integer
          in: path
          required: true
          description: ID do estado
      responses:
        200:
          description: A lista de estados por DDD
          schema:
            $ref: '#/definitions/ObjetoDDD'
          examples:
            application/json:
              success: true
              data:
                -
                  id: 54
                  ddd: 47
                  name: "Joinville e Região"
                  label: "47 - Joinville e Região"
                -
                  id: 55
                  ddd: 48
                  name: "Florianópolis e Região"
                  label: "48 - Florianópolis e Região"


#definitions
definitions:

  DadosContato:
    description: Dados para o formulário de contato do site
    properties:
      profissional:
        type: string
        description: Tipo de usuário (lojista, repassador, particular, corretor de imoveis, concessionária, outros)
      nome:
        type: string
        description: Nome do contato
      sobrenome:
        type: string
        description: Sobrenome do contato
      ddd:
        type: integer
        description: Código DDD do contato
      celular:
        type: string
        description: Telefone do contato
      email:
        type: string
        description: Email do contato
      estado:
        type: string
        description: Estado (UF) do contato
      cidade:
        type: string
        description: Cidade do contato
      mensagem:
        type: string
        description: Mensagem do contato
    required:
      - nome
      - sobrenome
      - ddd
      - celular
      - email
      - estado
      - cidade


  DadosOfertas:
    description: Dados necessários pra montar a tela Ofertas
    properties:
      page:
        type: integer
        description: Número da página solicitada
      size:
        type: integer
        description: Quantidade de anúncios por página (20max)
    required:
      - page
      - size
  DadosDenuncia:
    description: Denuncia
    properties:
      id:
        type: integer
        description: ID do anúncio
      motivo:
        type: string
        description: Motivo da denúncia
      observacao:
        type: string
        description: Observações
    required:
      - id
      - motivo

  DadosAnuncio:
    description: Objeto Anúncio
    properties:
      color_id:
        type: integer
        description: Código da Cor
      doors:
        type: integer
        description: Quantidade de portas (padrão 4)
      eixos:
        type: string
        description: "Informação referente aos eixos (exclusivo para caminhões)"
      brand_id:
        type: integer
        description: Código da marca
      fipe_id:
        type: integer
        description: Código da tabela Fipe
      year:
        type: integer
        description: "Ano de fabricação do veículo"
      observation:
        type: string
        description: Observações
      cost:
        type: number
        description: Preço de custo do carro
      price:
        type: number
        description: 'Valor do carro'
      km:
        type: integer
        description: Quilometragem do carro
      optionals:
        type: array
        items:
          type: integer
    required:
      - color_id
      - brand_id
      - fipe_id
      - year
      - observation
      - price
      - km
      - optionals

  DadosAtualizar:
    description: Objeto Edição
    properties:
      car_id:
        type: integer
        description: Código do anúncio
      color_id:
        type: integer
        description: Código da Cor
      doors:
        type: integer
        description: Quantidade de portas (padrão 4)
      eixos:
        type: string
        description: "Informação referente aos eixos (exclusivo para caminhões)"
      observation:
        type: string
        description: Observações
      cost:
        type: number
        description: Custo do veículo
      price:
        type: number
        description: 'Valor do carro'
      km:
        type: integer
        description: Quilometragem do carro
      optionals:
        type: array
        items:
          type: integer
    required:
      - car_id
      - color_id
      - observation
      - price
      - km
      - optionals

  DadosCadastro:
    description: Objeto Cadastro
    properties:
      user_type:
        type: integer
        description: Tipo de usuário (1 para lojista 2 para repassador 3 para cliente)
      name:
        type: string
        description: Nome do Responsável
      email:
        type: string
        description: Email do Lojista
      password:
        type: string
        description: Senha
      dealership:
        type: string
        description: Nome da Loja
      document:
        type: string
        description: CPF ou CNPJ
      zipcode:
        type: string
        description: CEP
      address:
        type: string
        description: Endereço
      number:
        type: string
        description: Número
      neighborhood:
        type: string
        description: Bairro
      city:
        type: string
        description: Cidade
      state:
        type: string
        description: Estado
      phone:
        type: string
        description: Telefone Fixo
      cell_phone:
        type: string
        description: Telefone Celular
    required:
      - user_type
      - dealership
      - name
      - document
      - email
      - zipcode
      - address
      - number
      - neighborhood
      - state
      - city
      - phone
      - cell_phone
      - password
  DadosLogin:
    description: Objeto Login
    properties:
      email:
        type: string
        description: email do usuário
      password:
        type: string
        description: senha do usuário
      device_token:
        type: string
        description: Token do aparelho
    required:
      - email
      - password
  DadosToken:
    description: Objeto com o device token
    properties:
      device_token:
        type: string
        description: Token do Aparelho do usuário
    required:
      - device_token
  DadosEmArray:
    description: Array de Ids
    properties:
      id:
        type: array
        description: Array de ids a serem excluidas
        items:
          type: integer
    required:
      - id

  DadosPurchase:
    description: Objeto Solicitação
    properties:
      page:
        type: integer
        description: Número da página
      last_request:
        type: string
        description: Datetime da última consulta
    required:
      - page
  DadosRecuperaSenha:
    description: JSON da Solicitação de recuperação de senha
    properties:
      email:
        description: Email
        type: string
    required:
      - email
  DadosPublicar:
    description: JSON da Solicitação de publicação do anúncio
    properties:
      id:
        type: integer
        description: Id do anúncio
      user_types:
        type: array
        description: Tipos de usuário destinatários
        items:
          type: integer
    required:
      - id
      - user_types

  DadosProfile:
    description: JSON da solicitação de criação de perfil
    properties:
      state_id:
        type: integer
        description: Id do estado do DDD (conforme endpoint /states)
      array_ddd:
        type: array
        description: "array com os códigos de ddd (ddd_id)"
        items:
          type: integer
      array_types:
        type: array
        description: "array com os códigos de tipos de carro (ddd_id) como no endpoint /ddd"
        items:
          type: integer
      start_year:
        type: integer
        description: "Ano inicial do perfil"
      end_year:
        type: integer
        description: "Ano final do perfil"
    required:
      - state_id
      - array_ddd
      - array_types
      - start_year
      - end_year

  DadosCarSold:
    description: "Dados enviados quando o carro é marcado como vendido"
    properties:
      car_id:
        type: integer
        description: Id do carro
      reason_id:
        type: integer
        description: Motivo da exclusão conforme endpoint
      buyer_id:
        type: integer
        description: Comprador do carro
    required:
      - car_id
      - reason_id

  DadosMuted:
    description: "informações enviadas para deixar o usuário sem receber notificações de novos anúncios"
    properties:
      time:
        type: string
        description: String com o código de tempo que o usuário vai ficar sem receber notificações

  DadosPesquisa:
    description: Dados enviados ao servidor de pesquisa
    properties:
      stock_id:
        type: integer
        description: Código de usuário (para a tela de estoque)
      car_type:
        type: integer
        description: Tipo do carro
      brand_id:
        type: integer
        description: Marca do caro
      model_id:
        type: integer
        description: Modelo do carro
      start_year:
        type: integer
        description: "Ano inicial do veículo"
      end_year:
        type: integer
        description: "Ano final do veículo"
      fuel:
        type: string
        description: Combustível
      start_price:
        type: number
        description: 'Valor inicial do carro'
      end_price:
        type: number
        description: 'Valor final do carro'
      doors:
        type: array
        description: Array com a quantidade de portas
        items:
          type: integer
      eixos:
        type: array
        description: Array com os eixos de caminhçao
        items:
          type: string
      color_ids:
        type: array
        description: Array com as cores
        items:
          type: integer
      start_km:
        type: integer
        description: "Km inicial do veículo"
      end_km:
        type: integer
        description: "Km final do veículo"
      optionals_id:
        type: array
        description: Array com os opcionais do veículo
        items:
          type: integer
      state_id:
        type: integer
        description: Quando informado filtra os anúncios por estado
      ddds:
        type: array
        description: Array com os ddds
        items:
          type: integer
      user_type:
        type: array
        description: Array com os tipos de usuários
        items:
          type: integer
      order_by:
        type: string
        description: Ordem da pesquisa (price ou year)
      direction:
        type: string
        description: A direção da pesquisa (ASC ou DESC)
      page:
        type: integer
        description: A página solicitada

  DadosFavorite:
    description: Dados enviados quando se pede um favorito
    properties:
      page:
        type: integer
        description: Página

  DadosAvaliacao:
    description: Avaliação enviada pelo usuário
    properties:
      rating:
        type: integer
        description: Nota de 1 a 5
      avaliacao:
        type: string
        description: Comentário que o usuário enviou
      fipe:
        type: integer
        description: 'Valor abaixo da fipe (10%,15%,20% ) que o usuário prefere para anúncios'

  DadosLead:
    description: Dados enviados na requisição
    properties:
      user_id:
        type: integer
        description: Id do usuário que respondeu a pergunta de compra do carro nvoo
      car_id:
        type: integer
        description: Código do carro que foi anunciado


  ObjetoArray:
    description: Objeto com um data array
    properties:
      success:
        type: boolean
        description: Resultado da operação
      data:
        type: array
        description: Array de itens recebidos
        items:
          $ref: '#/definitions/idarray'


  idarray:
    description: Array de itens
    properties:
      id:
        type: integer
        description: Item
  ObjetoPadrao:
    description: "JSON de retorno padrão"
    properties:
      success:
        type: boolean
        description: "Boolean do resultado da operação (true or false)"
      msg:
        type: string
        description: "Mensagem descritiva do erro"
  ObjetoValidado:
    description: "Quando o envio tem vários campos validados este é o retorno detalhado"
    properties:
      success:
        type: boolean
        description: "Boolean do resultado da operação (true or false)"
      msg:
        properties:
          campo:
            type: string
            description: Nome do campo com problema
          erro:
            type: string
            description: Mensagem de erro enviada
  ObjetoUsuario:
    description: Dados do usuário
    properties:
      id:
        type: integer
        description: ID do usuário
      role_id:
        type: string
        description: Role ID do usuário (nível de aceso)
      name:
        type: string
        description: Nome
      email:
        type: string
        description: Email
      dealership:
        type: string
        description: Nome da loja
      document:
        type: string
        description: CPF/CNPJ
      zipcode:
        type: string
        description: CEP
      address:
        type: string
        description: Endereço
      number:
        type: string
        description: Número
      neighborhood:
        type: string
        description: Bairro
      city:
        type: string
        description: Cidade
      state:
        type: string
        description: Estado (UF)
      phone:
        type: string
        description: Telefone
      cell_phone:
        type: string
        description: Telefone Celular
      photo:
        type: string
        description: Endereço público da foto enviada pelo usuário
      latitude:
        type: string
        description: Localização do aparelho celualar (latitude)
      longitude:
        type: string
        description: Localização do aparelho celualar (longitude)
      device_token:
        type: string
        description: Token para enviar notificações ao usuário
      created_at:
        type: string
        description: Data de criação
      is_aprovado:
        type: string
        description: Status do usuário (0 bloqueado 1 aprovado)
      "type":
        $ref: '#/definitions/ObjetoUserType'
  ObjetoCarroAnuncio:
    description: Carro / Anúncio
    properties:
      id:
        type: integer
        description: ID do anúncio
      user_id:
        type: integer
        description: ID do anunciante
      color_id:
        type: integer
        description: ID da cor do carro
      brand_id:
        type: integer
        description: ID da marca
      fipe_id:
        type: integer
        description: Código FIPE do carro (da tabela interna não da fipe)
      car_status_id:
        type: integer
        description: "Status do carro (1 em aberto, 2 negociando, 3 vendido, 4 em cadastro)"
      doors:
        type: integer
        description: Quantidade de portas
      status:
        type: string
        description: Status (pelo código analisado não é utilizado)
      year:
        type: integer
        description: "Ano de fabricação do veículo"
      observation:
        type: string
        description: Campo observações do anúncio
      price:
        type: number
        description: Valor do carro (mudar para decimal)
      km:
        type: integer
        description: Quilometragem do carro
      created_at:
        type: string
        description: Data/hora de criação do anúncio
      published_at:
        type: string
        description: Data de Publicação do Anúncio
      published_to:
        type: array
        items:
          type: integer
      visible_to:
        type: array
        items:
          $ref: '#/definitions/ObjetoUserType'
      user:
        type: object
        items:
          $ref: '#/definitions/ObjetoUsuario'
      color:
        type: object
        items:
          $ref: '#/definitions/ObjetoCor'
      brand:
        type: object
        items:
          $ref: '#/definitions/ObjetoBrand'
      fipe:
        type: object
        items:
          $ref: '#/definitions/ObjetoFipe'
      car_status:
        type: object
        items:
          $ref: '#/definitions/ObjetoCarStatus'
      car_negotiations:
        type: object
        items:
          $ref: '#/definitions/ObjetoCarNegotiations'
      image:
        type: string
        description: "Uma imagem do veículo"
      photos:
        type: array
        items:
          $ref: '#/definitions/ObjetoImagemVeiculo'
      optionals:
        type: array
        items:
          $ref: '#/definitions/ObjetoOptional'
      is_favorite:
        type: boolean
        description: Retorna se o veículo é favorito
      fipe_percent_off:
        type: string
        description: Percentual do veículo abaixo da tabela fipe
      site_url:
        type: string
        description: Site do cliente (para usuários do plano com site)

  ObjetoOptional:
    description: Opcional de um carro
    properties:
      id:
        type: integer
        description: ID do opcional do anúncio
      name:
        type: string
        description: Nome do item Opcional
      description:
        type: string
        description: Descrição do item opcional
      "type":
        type: integer
        description: Tipo do veículo
  ObjetoCor:
    description: Cor de um carro
    properties:
      id:
        type: integer
        description: ID da cor
      name:
        type: string
        description: Nome da cor
      created_at:
        type: string
        description: Data/hora de criação da cor
      updated_at:
        type: string
        description: Data/hora de atualização da cor
  ObjetoBrand:
    description: Marca de um carro
    properties:
      id:
        type: integer
        description: ID da marca
      name:
        type: string
        description: Nome da marca
      type:
        type: integer
        description: Tipo do carro
  ObjetoCarStatus:
    description: Status de um carro
    properties:
      id:
        type: integer
        description: "ID do status (1 em aberto 2 negociando 3 vendido 4 em cadastro)"
      name:
        type: string
        description: Nome do status
  ObjetoFipe:
    description: Objeto Fipe
    properties:
      id:
        type: integer
        description: "ID da fipe no banco"
      model:
        type: string
        description: Nome do Modelo e Versão
      brand_id:
        type: integer
        description: Id da marca
      year:
        type: string
        description: "Ano do modelo"
      fuel:
        type: string
        description: "Combustível"
      code:
        type: string
        description: "Código do veículo na tabela FIPE (oficial)"
      authentication:
        type: string
        description: autenticação aparentemente não serve pra nada
      price:
        type: number
        description: Valor do modelo
  ObjetoImagemVeiculo:
    description: Imagem de um anúncio
    properties:
      id:
        type: integer
        description: ID da imagem
      filename:
        type: string
        description: Nome do arquivo físico
      car_id:
        type: integer
        description: ID do anúncio
      created_at:
        type: string
        description: Data/hora de criação da imagem
      updated_at:
        type: string
        description: Data/hora de atualização da imagem
  ObjetoCarNegotiations:
    description: negociações
    properties:
      total:
        type: integer
        description: Quantidade total de negociações do veiculo
  ObjetoNegotiation:
    description: Objeto representativo de uma negociação
    properties:
      room_id:
        type: integer
        description: ID da sala
      car_id:
        type: integer
        description: ID do carro
      comprador_id:
        type: integer
        description: Id do comprador
      vendedor_id:
        type: integer
        description: ID do anunciante
      message:
        type: string
        description: mensagem
      image:
        type: string
        description: Imagem
      audio:
        type: string
        description: Audio
      created_at:
        type: string
        description: data/hora de criação
      updated_at:
        type: string
        description: data/hora de alteração
      client:
        type: object
        items:
          $ref: '#/definitions/ObjetoUsuario'
  ObjetoState:
    description: Objeto contendo um Estado da Federação (UF)
    properties:
      id:
        type: integer
        description: "ID do estado no banco de dados é utilizado como referência"
      initals:
        type: string
        description: "As iniciais do estado com duas letras (SC, RS)"
      name:
        type: string
        description: "O nome do estado"
  ObjetoCity:
    description: Objeto Cidade
    properties:
      id:
        type: integer
        description: "Id da cidade no banco de dados"
      name:
        type: string
        description: "Nome da cidade"
  ObjetoDDD:
    description: JSON com os dados do DDD
    properties:
      id:
        type: integer
        description: "Id do ddd no banco (usado no cadastro de perfil)"
      ddd:
        type: integer
        description: "Número do DDD usado como refernência nas telas"
      name:
        type: string
        description: "Nome da região que o DDD abrange"
      state_id:
        type: integer
        description: "Código do estado"

  ObjetoProfileDDD:
    description: Dados do DDD dentro do perfil
    properties:
      id:
        type: integer
        description: "Id do ddd no banco de dados"
      state_id:
        type: integer
        description: "Id do estado no banco de dados"
      state_name:
        type: string
        description: "Nome do estado"
      ddd:
        type: integer
        description: "Código DDD da localidade"
      name:
        type: string
        description: "Nome da região que o DDD abrange"

  ObjetoProfileType:
    description: Dados do tipo de veículo dentro do perfil
    properties:
      id:
        type: integer
        description: ID do tipo (0 carro 5 moto 8 caminhão)
      name:
        type: string
        description: Nome do tipo

  ObjetoProfile:
    description: Dados do perfil
    properties:
      id:
        type: integer
        description: "ID do perfil no banco de dados"
      state_id:
        type: integer
        description: "Código do estado"
      start_year:
        type: integer
        description: "Ano inicial do perfil"
      end_year:
        type: integer
        description: "Ano final do perfil"
      user_id:
        type: integer
        description: "ID do usuário no banco"
      updated_at:
        type: string
        description: "Data de atualização do perfil"
      created_at:
        type: string
        description: "Data de criação do perfil"
      ddds:
        type: array
        items:
          $ref: '#/definitions/ObjetoProfileDDD'
      types:
        type: array
        items:
          $ref: '#/definitions/ObjetoProfileType'

  ObjetoMuted:
    description: "Dados retornados ao pedir a informação de silenciamento de novos anúncios"
    properties:
      success:
        type: boolean
        description: Resultado da operação
      data:
        type: object
        description: Informação da operação
        properties:
          muted_until:
            type: string
            description: "Datetime RFC 3339 referente até quando o usuário vai estar mutado"

  ObjetoCarType:
    description: Objeto do tipo do carro
    properties:
      id:
        type: integer
        description: Id do tipo de carro
      name:
        type: string
        description: Nome do tipo de carro
  ObjetoModelo:
    description: Objeto com o tipo de carro
    properties:
      id:
        type: integer
        description: Id do modelo
      name:
        type: string
        description: Nome do modelo
      car_type:
        type: integer
        description: Tipo do veículo
      brand_id:
        type: integer
        description: Id da marca

  ObjetoUserType:
    description: Objeto do tipo de usuário
    properties:
      id:
        type: integer
        description: "Código do usuário"
      name:
        type: string
        description: 'Nome do tipo do usuário'

  ObjetoLabelValue:
    description: Objeto simples com Label e Value para usar nos campos do app
    properties:
      label:
        type: string
        description: Label do campo
      value:
        type: string
        description: Value do campo

  ObjetoPopulateSearch:
    description: Objeto enviado quando o endpoint search/populate é inicializado
    properties:
      car_types:
        type: array
        items:
          $ref: '#/definitions/ObjetoCarType'
      brands:
        type: array
        items:
          $ref: '#/definitions/ObjetoBrand'
      models:
        type: array
        items:
          $ref: '#/definitions/ObjetoModelo'
      optionals:
        type: array
        items:
          $ref: '#/definitions/ObjetoOptional'
      doors:
        type: array
        items:
          type: integer
      eixos:
        type: array
        items:
          type: string
      fuel:
        type: array
        items:
          $ref: '#/definitions/ObjetoLabelValue'
      colors:
        type: array
        items:
          $ref: '#/definitions/ObjetoCor'
      states:
        type: array
        items:
          $ref: '#/definitions/ObjetoState'
      ddds:
        type: array
        items:
          $ref: '#/definitions/ObjetoDDD'
      user_types:
        type: array
        items:
          $ref: '#/definitions/ObjetoUserType'


  ObjetoLightNegotiation:
    description: Negociações do veículo
    properties:
      id:
        type: integer
        description: Código do usuário (para ser usado como buyer_id)
      name:
        type: string
        description: Nome do usuário no aplicativo
      photo:
        type: string
        description: Código da imagem do usuário

  ObjetoFavoriteResponse:
    description: Objeto que é retornado quando um anúncio é marcado como favorito
    properties:
      success:
        type: boolean
        description: Resultado da operação
      total:
        type: integer
        description: Quantidade de anúncios marcados como favorito pelo usuário que fez a requisição
      car_id:
        type: integer
        description: Código do Anúncio
      is_favorite:
        type: boolean
        description: O resultado da requisição

  ObjetoFavorites:
    description: Dados enviados na requisição
    properties:
      success:
        type: boolean
        description: Resultado da operação
      total:
        type: integer
        description: Quantidade de anúncios marcados como favorito pelo usuário que fez a requisição
      page:
        type: integer
        description: Página solicitada na requisição
      data:
        type: array
        items:
          $ref: '#/definitions/ObjetoCarroAnuncio'



  ArrayInteger:
    description: array simples
    items:
      type: integer
  ArrayString:
    description: array simples
    items:
      type: string
  ObjetoInfoChat:
    properties:
      car:
        type: object
        items:
          $ref: '#/definitions/ObjetoCarroAnuncio'
      client:
        type: object
        items:
          $ref: '#/definitions/ObjetoUsuario'



