Skip to content
This repository was archived by the owner on Dec 4, 2024. It is now read-only.
André devkcud Albanese edited this page Jul 30, 2024 · 2 revisions

🛡️ Auth

Esta página é dedicada ao grupo de rotas responsável pela implementação e gerenciamento de autenticação de usuários, garantindo o acesso de clientes aos produtos da Swibly.

  • Grupo: /v1/auth
  • Exemplos: /v1/auth/register, /v1/auth/login, ...

Warning

Isso não será explicado novamente: quando houver tipo (string, int etc.) na chave, tal será volátil.
Exemplo:

{
  // Aqui `"string"` será uma chave volátil (poderá mudar, não será fixo). Diferente de `0`, que será seu valor fixo.
  "string": 0
}

Um equivalente em Typescript seria: Record<string, 0> que é o mesmo que { [x: string]: 0 }

POST /register

Body

{
  "firstname": "string",
  "lastname": "string",
  "username": "string",
  "email": "string",
  "password": "string"
}

Retorno

  • Statuses possíveis: 200, 400, 401, 500
{
  "message": "string",
  "token": "string"
}
{
  "error": "string"
}
{
  "error": {
    "string": "string"
  }
}

O "error" pode ser um Object que contenha chave: valor. Onde chave é o campo que foi colocado incorretamente.


Headers Obrigatórios

  • Nenhum

POST /login

Body

{
  "username": "string (opcional)",
  "email": "string (opcional)",
  "password": "string"
}

NOTA: Caso não exista username, nem email, ocorrerá um erro.


Retorno

  • Statuses possíveis: 200, 400, 401, 500
{
  "message": "string",
  "token": "string"
}
{
  "error": "string"
}
{
  "error": {
    "string": "string"
  }
}

O "error" pode ser um Object que contenha chave: valor. Onde chave é o campo que foi colocado incorretamente.


Headers Obrigatórios

  • Nenhum

PATCH /update

Body

{
  "firstname": "string (opcional)",
  "lastname": "string (opcional)",
  "username": "string (opcional)",
  "bio": "string (opcional)",
  "verified": "string (opcional)",
  "email": "string (opcional)",
  "password": "string (opcional)",
  "country": "string (opcional)",
  "language": "string (opcional)"
}

Retorno

  • Statuses possíveis: 200, 400, 401, 500
{
  "message": "string"
}
{
  "error": "string"
}
{
  "error": {
    "string": "string"
  }
}

O "error" pode ser um Object que contenha chave: valor. Onde chave é o campo que foi colocado incorretamente.


Headers Obrigatórios

  • Bearer/Authorization (Autenticação JWT)

DELETE /delete

Body

Não é necessário um body.

Retorno

  • Statuses possíveis: 200, 400, 401, 500
{
  "message": "string"
}
{
  "error": "string"
}
{
  "error": {
    "string": "string"
  }
}

O "error" pode ser um Object que contenha chave: valor. Onde chave é o campo que foi colocado incorretamente.


Headers Obrigatórios

  • Bearer/Authorization (Autenticação JWT)

📬️ Exemplo de Requisição

Caution

Este exemplo NÃO deve ser usado em ambiente de produção devido à sua origem de demonstração e falta de tratamento de erros.

// Para este exemplo, utilizaremos o pacote `axios`
// que pode ser facilmente instalado via `npm`, `yarn`,
// `pnpm`, `bun` ou similar
//
// Exemplo: `bun i axios`
//
// A tipagem de dados se encontra na seção abaixo, desta Wiki: `RegisterBody`, `Return` etc.

import axios from "axios";

// Definimos uma URL base para todas as nossas operações posteriores
const baseURL = "https://api.swibly.com.br/v1/auth";

async function registerUser(newUser: RegisterBody): Promise<string> {
  try {
    // `axios.post` manda uma requisição POST para o URL com o objeto de usuário
    const response = await axios.post(`${baseURL}/register`, newUser);

    const data = response.data as Return;

    // `data.token` seria o token JWT para autenticação
    return data.token!;
  } catch (e: any) {
    if (e.response.data.error) {
      // No mundo real teria uma maior atenção no tratamento de erros,
      // já que, o `e.data.error` pode retornar tanto uma string quanto um objeto
      console.log(e.response.data.error);
    }

    return "";
  }
}

// Para que este tutorial seja mais conciso, não irei colocar todos os métodos possíveis, apenas os relevantes.

async function deleteUser(token: string): Promise<void> {
  try {
    await axios.delete(`${baseURL}/delete`, {
      headers: {
        Authorization: token,
      },
    });
  } catch (e: any) {
    if (e.response.data.error) {
      console.log(e.response.data.error);
    }
  }
}

// ATENÇÃO: Este usuário é usado APENAS para demonstração e não tem utilidade real em nosso banco de dados.
const token = await registerUser({
  firstname: "André",
  lastname: "Albanese",
  username: "devkcud",
  email: "devkcud@swibly.com.br",
  password: "C0mpl3%P@$sW0rd!",
});

await deleteUser(token);

📄 Tipagem Copy-Paste

type RegisterBody = {
  firstname: string;
  lastname: string;
  username: string;
  email: string;
  password: string;
};

type LoginBody = {
  username?: string;
  email?: string;
  password: string;
};

type UpdateBody = {
  firstname?: string;
  lastname?: string;
  username?: string;
  bio?: string;
  verified?: string;
  email?: string;
  password?: string;
  country?: string;
  language?: string;
};

type DeleteBody = {};

type Return = {
  readonly message?: string;
  readonly token?: string;
  readonly error?: string | Record<string, string>;
};

Clone this wiki locally