Cookest
API BackendEndpoints

Autenticação e Ingredientes

Endpoints de autenticação e pesquisa de ingredientes

Autenticação e Ingredientes

POST /api/auth/register

Criar uma nova conta de utilizador.

MétodoCaminhoAutenticaçãoNível
POST/api/auth/registerNenhumaFree

Corpo do pedido

{
  "email": "user@example.com",
  "password": "securepassword",
  "name": "Alice"
}

Resposta 201 Created

{
  "id": "uuid",
  "email": "user@example.com",
  "name": "Alice"
}

POST /api/auth/login

Autenticar e receber tokens.

MétodoCaminhoAutenticaçãoNível
POST/api/auth/loginNenhumaFree

Corpo do pedido

{
  "email": "user@example.com",
  "password": "securepassword"
}

Resposta 200 OK

{
  "access_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 900
}

O refresh_token é definido como cookie httpOnly (Set-Cookie: refresh_token=...).


POST /api/auth/refresh

Obter um novo token de acesso usando o cookie de atualização.

MétodoCaminhoAutenticaçãoNível
POST/api/auth/refreshCookieFree

Não envia corpo. O browser/Dio cookie jar reencaminha o cookie de atualização automaticamente.

Resposta 200 OK

{
  "access_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 900
}
EstadoSignificado
401Token de atualização em falta, expirado ou revogado

POST /api/auth/logout

Revogar o token de atualização.

MétodoCaminhoAutenticaçãoNível
POST/api/auth/logoutJWT BearerFree

Nenhum corpo necessário. Elimina o token de atualização da base de dados. O cookie httpOnly também é limpo.

Resposta 200 OK

{ "message": "Logged out successfully" }

POST /api/auth/onboarding

Completar o perfil do utilizador após o registo.

MétodoCaminhoAutenticaçãoNível
POST/api/auth/onboardingJWT BearerFree

Corpo do pedido

{
  "household_size": 2,
  "dietary_restrictions": ["vegetarian"],
  "allergies": ["nuts"],
  "health_goals": ["weight_loss"],
  "cooking_skill": "intermediate"
}

Valores de cooking_skill: beginner | intermediate | advanced

Resposta 200 OK

Devolve o objeto de utilizador atualizado.


POST /api/me/change-password

Alterar a palavra-passe do utilizador autenticado.

MétodoCaminhoAutenticaçãoNível
POST/api/me/change-passwordJWT BearerFree

Corpo do pedido

{
  "current_password": "oldpassword",
  "new_password": "newpassword"
}

Resposta 200 OK

{ "message": "Password changed successfully" }
EstadoSignificado
400Palavra-passe atual incorreta

DELETE /api/me

Eliminar permanentemente a conta do utilizador autenticado e todos os dados associados.

MétodoCaminhoAutenticaçãoNível
DELETE/api/meJWT BearerFree

Esta ação é irreversível. Todos os dados do utilizador, incluindo receitas, planos de refeições, inventário e histórico de conversas, são eliminados permanentemente.

Resposta 204 No Content


GET /api/ingredients

Pesquisar o catálogo de ingredientes.

MétodoCaminhoAutenticaçãoNível
GET/api/ingredientsNenhumaFree

Parâmetros de consulta

ParâmetroTipoDescrição
qstringConsulta de pesquisa (usa correspondência difusa pg_trgm)
limitintegerMáximo de resultados (padrão: 20)
offsetintegerDeslocamento de paginação

Resposta 200 OK

[
  {
    "id": 1,
    "name": "Chicken Breast",
    "category": "meat",
    "calories_per_100g": 165,
    "protein_per_100g": 31.0,
    "carbs_per_100g": 0.0,
    "fat_per_100g": 3.6
  }
]

GET /api/ingredients/:id

Obter detalhes completos do ingrediente, incluindo micronutrientes e tamanhos de porção.

MétodoCaminhoAutenticaçãoNível
GET/api/ingredients/:idNenhumaFree

Resposta 200 OK

{
  "id": 1,
  "name": "Chicken Breast",
  "category": "meat",
  "calories_per_100g": 165,
  "protein_per_100g": 31.0,
  "carbs_per_100g": 0.0,
  "fat_per_100g": 3.6,
  "nutrients": {
    "fiber": 0,
    "sugar": 0,
    "sodium": 74,
    "vitamin_c": 0,
    "calcium": 11,
    "iron": 0.9
  },
  "portion_sizes": [
    { "name": "1 breast", "grams": 174 },
    { "name": "100g", "grams": 100 }
  ]
}
EstadoSignificado
404Ingrediente não encontrado

On this page