Autenticação

Registro de Usuário

POST /api/v1/register

Autenticação: Não requerida

Entradas (body):

{
  "name": "João Silva",
  "email": "joao@example.com",
  "password": "12345678",
  "password_confirmation": "12345678"
}
Campo Tipo Obrigatório Observações
name string sim Nome completo do usuário
email string sim Email válido, deve ser único
password string sim Senha mínima de 6 caracteres
password_confirmation string sim Deve ser igual ao campo password

Retorno (201 Created):

{
  "token": "1|klsjdf9834jkl2349u23kljdf",
  "user": {
    "id": 1,
    "name": "João Silva",
    "email": "joao@example.com",
    "created_at": "2025-08-16T15:00:00.000000Z",
    "updated_at": "2025-08-16T15:00:00.000000Z"
  }
}

Erros:

422 Unprocessable Entity:
{
  "message": "The given data was invalid.",
  "errors": {
    "email": ["O email já foi registrado."],
    "password": ["A confirmação da senha não corresponde."]
  }
}

Login

POST /api/v1/login

Autenticação: Não requerida

Entradas (body):

{
  "email": "usuario@email.com",
  "password": "minhaSenhaSegura"
}

Retorno (200 OK):

{
  "token": "string",
  "user": { ...dados do usuário... }
}

Erros:

422 Unprocessable Entity: campos obrigatórios ausentes ou inválidos
401 Unauthorized: credenciais inválidas

Logout 🛡️

POST /api/v1/logout

Controller: AuthController@logout

Autenticação: Bearer {token}

Entradas:

Nenhuma

Retorno (200 OK):

{
  "message": "Token revogado com sucesso"
}

Erros:

401 Unauthorized: token inválido ou ausente

Usuário Autenticado 🛡️

GET /api/v1/user

Autenticação: Bearer {token}

Entradas:

Nenhuma

Retorno (200 OK):

{
  "id": 1,
  "name": "Usuário Exemplo",
  "email": "user@email.com"
}

Erros:

401 Unauthorized: token inválido ou ausente

Postos

Listar Postos 🛡️

GET /api/v1/accounts

Autenticação: Bearer {token}

Retorno (200 OK):

[
  {
    "id": 1,
    "name": "Minha Conta",
    "login_user": "user",
    "login_password": "********"
  }
]

Erros:

401 Unauthorized: token inválido ou ausente

Criar Posto 🛡️

POST /api/v1/accounts

Autenticação: Bearer {token}

Entradas (body):

{
  "name": "Conta Principal",
  "login_user": "meuLogin",
  "login_password": "minhaSenha"
}

Retorno (201 Created):

{
  "id": 2,
  "name": "Conta Principal",
  "login_user": "meuLogin",
  "login_password": "********"
}

Erros:

422 Unprocessable Entity: dados inválidos ou campos obrigatórios ausentes
409 Conflict: nome de conta já existe
401 Unauthorized: token inválido ou ausente

Atualizar Postos 🛡️

PUT /api/v1/accounts/{account}

Autenticação: Bearer {token}

Entradas (body):

{
  "name": "Conta Atualizada",
  "login_user": "novoLogin",
  "login_password": "novaSenha"
}

Retorno (200 OK):

{
  "id": 2,
  "name": "Conta Atualizada",
  "login_user": "novoLogin",
  "login_password": "********"
}

Erros:

404 Not Found: conta não encontrada
422 Unprocessable Entity: dados inválidos
401 Unauthorized: token inválido ou ausente

Scraper

Iniciar Processo de Scraping 🛡️

POST /api/v1/scraping/run-now/{posto}/{fabricante}

Autenticação: (Bearer {token})

Dispara o processo de scraping em segundo plano para o posto escolhido e para o fabricante escolhido. A operação é assíncrona e os jobs são enviados para uma fila.

Parametros (Opcional):

?startDate=17/08/2025 14:30

Define o inicio do intervalo da data de abertura de OS.

Corpo da Requisição:

Nenhum

Retorno (202 Accepted):

{
  "message": "Job de scraping foi despachado para a fila. Posto: {posto}. Fabricante: {fabricante}. Intervalo: {startDate/Ultima Requisiçao para aquele fabricante e posto} - {dateTime atual}",
  "uuid": {id da requisição de scraping - usado no body da rota /api/v1/scrape/latest-result}
}

Erros:

404 Not Found:
{
  "message": "A empresa '{company}' não é um fabricante válido. Os valores aceitos são: 'Newmaq', 'New.Up!', 'Mueller', 'Libell', 'Colormaq'"
}

401 Unauthorized:
{
  "message": "Unauthenticated."
}
403 Forbidden:
{
  "message": "Conta não encontrada ou não pertence a este usuário"
}

Listar Todos os Resultados (UUIDs) 🛡️

GET /api/v1/scrape/all

Autenticação: (Bearer {token})

Retorna todos os resultados de scraping associados ao usuário autenticado, contendo apenas `uuid` e `created_at`.

Corpo da Requisição:

Nenhum

Retorno (200 OK):

[
  {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "created_at": "2025-08-17T20:34:15.000000Z"
  },
  {
    "uuid": "223e4567-e89b-12d3-a456-426614174001",
    "created_at": "2025-08-17T20:40:22.000000Z"
  }
]

Buscar Resultado Específico por UUID 🛡️

POST /api/v1/scrape/latest-results

Autenticação: (Bearer {token})

Retorna o último resultado de scraping para uma uuid específica, associado ao usuário autenticado.

Corpo da Requisição:

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000"
}

Retorno (200 OK):

{
  "data_os": {
    "field1": "valor",
    "field2": "valor"
  }
}

Erros:

404 Not Found:
{
  "message": "Nenhum resultado encontrado."
}
401 Unauthorized:
{
  "message": "Unauthenticated."
}

Erros de Scraper (em geral)

400 Bad Request: parâmetros inválidos na requisição
503 Service Unavailable: falha de conexão com o serviço de scraping externo