Todas as rotas (exceto testes locais) exigem autenticação via Firebase Authentication.
Header obrigatório em todas as rotas protegidas:
Authorization: Bearer <idToken>
Você pode obter esse token fazendo login com e-mail e senha na API REST do Firebase.
Registra um novo usuário.
{
"email": "usuario@email.com",
"password": "senha123",
"name": "Usuário Teste",
"phone_number": "81912345678"
}- Todos os campos são obrigatórios.
- O campo
phone_numberdeve conter apenas números.
{
"uid": "abc123xyz",
"idToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Realiza o login de um usuário existente.
{
"email": "usuario@email.com",
"password": "senha123"
}- Ambos os campos são obrigatórios.
{
"id_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "AEu4IL2..."
}Renova o token de autenticação.
{
"refreshToken": "AEu4IL2..."
}- O campo
refreshTokené obrigatório.
{
"idToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "AEu4IL2...",
"expiresIn": "3600"
}Retorna os dados do usuário autenticado.
{
"uid": "abc123xyz",
"email": "usuario@email.com",
"name": "Usuário Teste",
"phone_number": "81912345678",
"picture": "avatar_2"
}Atualiza o perfil do usuário autenticado.
{
"name": "João da Silva",
"phone_number": "11912341234",
"picture": "avatar_3"
}- O campo
namedeve ser uma string não vazia. - O campo
phone_numberdeve conter apenas números. - O campo
picturedeve ser um ID válido no formatoavatar_1,avatar_2, ...,avatar_5.
200 OK
Retorna todas as tarefas do usuário autenticado, incluindo tarefas compartilhadas com ele.
[
{
"id": "123abc",
"title": "Estudar React Native",
"description": "Finalizar desafio",
"deadline": "13/04/2025",
"priority": 2,
"done": false,
"createdAt": "2025-04-13T14:20:00.000Z",
"subtasks": [
{ "title": "Ler documentação", "done": true },
{ "title": "Codar exemplo", "done": false }
],
"tags": ["estudo", "react-native"],
"sharedWith": ["outro@email.com"]
}
]Cria uma nova tarefa.
{
"title": "Nova tarefa",
"description": "Descrição opcional",
"done": false,
"deadline": "15/04/2025",
"priority": 3,
"subtasks": [
{ "title": "Subtarefa 1", "done": false },
{ "title": "Subtarefa 2", "done": true }
],
"tags": ["tag1", "tag2"]
}titleé obrigatório e deve ser uma string não vazia.descriptioné opcional.deadlineé obrigatório e deve estar no formatodd/mm/yyyy.priorityé opcional e deve ser um número entre 1 (alta) e 3 (baixa). O padrão é 3.subtasksé opcional. Se enviado, deve ser um array de objetos comtitle(string) edone(boolean).tagsé opcional. Se enviado, deve ser um array de strings com no máximo 5 itens.
{
"id": "123abc"
}Atualiza uma tarefa existente (somente pelo criador).
{
"title": "Título atualizado",
"description": "Nova descrição",
"deadline": "20/04/2025",
"priority": 1,
"done": true,
"subtasks": [
{ "title": "Item 1", "done": true },
{ "title": "Item 2", "done": false }
],
"tags": ["tag1", "tag3"]
}title, se enviado, deve ser uma string não vazia.description, se enviado, é opcional.deadline, se enviado, deve estar no formatodd/mm/yyyy.priority, se enviado, deve ser um número entre 1 (alta) e 3 (baixa).done, se enviado, deve ser um booleano.subtasks, se enviado, deve ser um array de objetos comtitle(string) edone(boolean).tags, se enviado, deve ser um array de strings com no máximo 5 itens.- Apenas o criador da tarefa (
uid) pode atualizá-la.
200 OK
Compartilha a tarefa com outros usuários informando seus e-mails.
{
"sharedWith": ["email1@exemplo.com", "email2@exemplo.com"]
}- Apenas o criador da tarefa pode compartilhá-la.
- A lista deve conter e-mails válidos em formato de string.
- Caso algum e-mail não exista no banco de dados, a resposta incluirá os e-mails inválidos.
{
"error": "Os seguintes e-mails não existem na base de dados",
"invalidEmails": ["email_invalido@exemplo.com"]
}Busca usuários pelo e-mail.
{
"query": "parte_do_email"
}- O campo
querydeve ser uma string não vazia. - Retorna no máximo 10 resultados.
[
{
"email": "usuario@email.com",
"picture": "avatar_1",
"name": "Usuário Teste"
}
]Adiciona um comentário a uma tarefa específica.
{
"taskId": "abc123",
"content": "Ótimo progresso!"
}taskIddeve ser o ID de uma tarefa existente.contentdeve ser uma string não vazia.
201 Created
Lista os comentários de uma tarefa.
[
{
"id": "comment123",
"author": "usuario@exemplo.com",
"content": "Boa ideia!",
"createdAt": "2025-04-14T12:34:56.789Z"
}
]Remove uma tarefa do usuário (somente pelo criador).
200 OK
Remove a conta do usuário autenticado.
200 OK
- Node.js
- Express
- Typescript
- Jest
- Firebase Admin SDK
- Firestore
- JWT (via Firebase Auth)
- DOCKER
- Subir este backend em uma instância EC2 da AWS
- Utilizar
dockerpara manter o servidor rodando - Configurar porta (ex: 3000) e liberar via Security Group
📘 Desafio proposto por: Gabriel Santos