{"info":{"_postman_id":"4f523b31-6612-42e7-807f-ebc03dbf8df7","name":"Task-Manager","description":"<html><head></head><body><h2 id=\"visão-geral\"><strong>Visão Geral</strong></h2>\n<ul>\n<li><p><em>Sistema completo de gerenciamento de usuários e tarefas;</em></p>\n</li>\n<li><p><code>Base URL:</code><a href=\"http://localhost:5000/api/tasks\">http://localhost:5000/api/tasks</a>;</p>\n</li>\n<li><p><code>Base URL:</code><a href=\"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks\">https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks</a></p>\n</li>\n<li><p><em>Autenticação: Bearer Token.</em></p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"19569624","collectionId":"4f523b31-6612-42e7-807f-ebc03dbf8df7","publishedId":"2sB2qWH4Yv","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-05-21T23:43:33.000Z"},"item":[{"name":"1. Documentação da API para desenvolvimento Local (Postgres)","item":[{"name":"1. Autenticação & Usuários","item":[{"name":"auth/register","event":[{"listen":"test","script":{"id":"f07b78eb-80ea-4a1e-b102-f0ec40f5eed2","exec":["var template = `\r","<style type=\"text/css\">\r","    .tftable {font-size:14px;color:#333333;width:100%;border-width: 1px;border-color: #87ceeb;border-collapse: collapse;}\r","    .tftable th {font-size:18px;background-color:#87ceeb;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;text-align:left;}\r","    .tftable tr {background-color:#ffffff;}\r","    .tftable td {font-size:14px;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;}\r","    .tftable tr:hover {background-color:#e0ffff;}\r","</style>\r","\r","<table class=\"tftable\" border=\"1\">\r","    <tr>\r","        <th>Message</th>\r","        <th>Stack</th>\r","    </tr>\r","    <tr>\r","        <td>{{response.message}}</td>\r","        <td>{{response.stack}}</td>\r","    </tr>\r","</table>\r","`;\r","\r","function constructVisualizerPayload() {\r","    return { response: pm.response.json() }\r","}\r","\r","pm.visualizer.set(template, constructVisualizerPayload());"],"type":"text/javascript","packages":{}}}],"id":"394f44b8-bd2b-4f55-abc1-943f4d9f50ca","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"username\":\"nome-usuario\",  \r\n   \"email\": \"usuario@exemplo.com\",\r\n  \"password\": \"SuaSenhaSuperSegura123!\"\r\n}  ","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/auth/register","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário existente se cadastre no sistema fornecendo seu username, email e senha. Em caso de sucesso, retorna os dados do usuário e um token de acesso para ser utilizado em requisições subsequentes que exigem autenticação.</p>\n</li>\n<li><p><strong>Método: POST</strong></p>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n<ul>\n<li><p>{</p>\n<ul>\n<li><p>\"username\": \"nome-usuario\",</p>\n</li>\n<li><p>\"email\": \"<a href=\"https://mailto:usuario@example.com/\">usuario@example.com</a>\",</p>\n</li>\n<li><p>\"password\": \"SuaSenhaSuperSegura123!\"</p>\n</li>\n</ul>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n<p><strong>4. Respostas Possíveis:</strong></p>\n<p><strong>4.1 Sucesso na Autenticação:</strong></p>\n<ul>\n<li><p><strong>Descrição:</strong> Autenticação bem-sucedida. O corpo da resposta contém os dados do usuário e o token de acesso.</p>\n</li>\n<li><p><strong>Código de status:</strong> <strong>201 OK.</strong></p>\n</li>\n<li><p><strong>Corpo da Resposta (Exemplo):</strong></p>\n<ul>\n<li><p>{<br />  \"id\": \"a1b2c3d4-e5f6-7890-1234-567890abcdef\",<br />  \"username\": \"nome_do_usuario\",<br />  \"email\": \"<a href=\"https://mailto:usuario@exemplo.com/\">usuario@exemplo.com</a>\",<br />  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikp\"</p>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>4.<strong>2 Erro: Interno do Servidor</strong></p>\n<ul>\n<li><p><strong>Código de status:</strong> Erro interno do servidor 500.</p>\n</li>\n<li><p><strong>Descrição:</strong> Ocorreu um erro inesperado no servidor.</p>\n</li>\n<li><p><strong>Corpo da resposta (Exemplo):</strong></p>\n<ul>\n<li><p>{</p>\n<ul>\n<li><p>\"success\": false,</p>\n</li>\n<li><p>\"message\": \"Erro no servidor!\",</p>\n</li>\n<li><p>\"error\": \"Validation error: Validation isEmail on email failed\"</p>\n</li>\n</ul>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"5000","path":["api","auth","register"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"394f44b8-bd2b-4f55-abc1-943f4d9f50ca"},{"name":"/auth/login","id":"c77eff36-7035-4af0-a517-8845cd649298","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n \"email\": \"usuario@exemplo.com\",\r\n \"password\": \"SuaSenhaSuperSegura123!\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/auth/login","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário existente se autentique no sistema fornecendo seu email e senha. Em caso de sucesso, retorna os dados do usuário e um token de acesso para ser utilizado em requisições subsequentes que exigem autenticação.</p>\n</li>\n<li><p><strong>Método: POST</strong></p>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n<ul>\n<li><p>{</p>\n<ul>\n<li><p>\"email\": \"<a href=\"https://mailto:usuario@example.com/\">usuario@example.com</a>\",</p>\n</li>\n<li><p>\"password\": \"SuaSenhaSuperSegura123!\"</p>\n</li>\n</ul>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n<p><strong>4. Respostas Possíveis:</strong></p>\n<p><strong>4.1 Sucesso na Autenticação:</strong></p>\n<ul>\n<li><p><strong>Descrição:</strong> Autenticação bem-sucedida. O corpo da resposta contém os dados do usuário e o token de acesso.</p>\n</li>\n<li><p><strong>Campos da Resposta de Sucesso:</strong></p>\n<ul>\n<li><p><strong>Código de status:</strong> <strong>201 OK.</strong></p>\n<ul>\n<li>{<br />  \"id\": \"a1b2c3d4-e5f6-7890-1234-567890abcdef\",<br />  \"username\": \"nome_do_usuario\",<br />  \"email\": \"<a href=\"https://mailto:usuario@exemplo.com\">usuario@exemplo.com</a>\",<br />  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikp\"<br />  }</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>4.<strong>2 Credenciais Inválidas</strong></p>\n<ul>\n<li><p><strong>Código de status:</strong> 401 Não autorizado.</p>\n</li>\n<li><p><strong>Descrição:</strong> Email ou senha incorretos.</p>\n</li>\n<li><p><strong>Corpo da resposta (Exemplo):</strong></p>\n<ul>\n<li><p>{</p>\n<ul>\n<li>\"Invalid email or password!\",</li>\n</ul>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"5000","path":["api","auth","login"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"c77eff36-7035-4af0-a517-8845cd649298"}],"id":"8d66bc63-c31a-4c06-809b-785034e90702","description":"<h2 id=\"criar-cadastro-e-validar-login\"><em><strong>Criar Cadastro e Validar Login</strong></em></h2>\n","_postman_id":"8d66bc63-c31a-4c06-809b-785034e90702"},{"name":"2. Gerenciamento de Tarefas","item":[{"name":"/tasks","id":"e3141211-251e-4cf8-9b33-89c8c826fd72","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"title\": \"Primeira Tarefa\",\r\n  \"description\": \"Caminhada\",\r\n  \"taskDate\": \"2025-05-28\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/tasks","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado crie uma nova tarefa. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: POST</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>201 OK: Sucesso.</strong></p>\n</li>\n<li><p>400 Bad Request: \"Título é obrigatório\".</p>\n</li>\n<li><p>500: Erro interno do servidor.</p>\n</li>\n</ol>\n</li>\n</ol>\n<p><strong>4. Corpo da requisição:</strong></p>\n","urlObject":{"protocol":"http","port":"5000","path":["api","tasks"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"e4ec7fd2-bc51-4218-916e-170c4b1bfc6f","name":"/tasks","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"title\": \"Primeira Tarefa\",\r\n  \"description\": \"Caminhada\",\r\n  \"taskDate\": \"2025-05-28\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/tasks"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"91"},{"key":"ETag","value":"W/\"5b-hCnXZ3I77nEaY6uswBB7gB1WQhk\""},{"key":"Date","value":"Tue, 27 May 2025 21:05:54 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"title\": \"Primeira Tarefa\",\n    \"status\": \"pending\",\n    \"taskDate\": \"2025-05-28T00:00:00.000Z\"\n}"}],"_postman_id":"e3141211-251e-4cf8-9b33-89c8c826fd72"},{"name":"/tasks","id":"8ea04937-2585-4168-a726-16923c53fcd2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:5000/api/tasks","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado liste suas tarefas. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: GET</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>200 OK: Sucesso.</strong></p>\n</li>\n<li><p><strong>404 Not Found: \"Tarefa não encontrada\".</strong></p>\n</li>\n</ol>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n","urlObject":{"protocol":"http","port":"5000","path":["api","tasks"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"af8b7515-ffad-4210-a651-b97af4715fd0","name":"/tasks","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000/api/tasks"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"419"},{"key":"ETag","value":"W/\"1a3-d353sG7kB6kONHvyjB04X0vNPQs\""},{"key":"Date","value":"Tue, 27 May 2025 21:07:42 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"title\": \"Primeira Tarefa\",\n        \"description\": \"Caminhada\",\n        \"status\": \"pending\",\n        \"taskDate\": \"2025-05-28T00:00:00.000Z\",\n        \"userId\": 1,\n        \"createdAt\": \"2025-05-27T21:05:54.802Z\",\n        \"updatedAt\": \"2025-05-27T21:05:54.802Z\"\n    },\n    {\n        \"id\": 2,\n        \"title\": \"Segunda Tarefa\",\n        \"description\": \"Preparar Café\",\n        \"status\": \"pending\",\n        \"taskDate\": \"2025-05-28T00:00:00.000Z\",\n        \"userId\": 1,\n        \"createdAt\": \"2025-05-27T21:07:32.972Z\",\n        \"updatedAt\": \"2025-05-27T21:07:32.972Z\"\n    }\n]"}],"_postman_id":"8ea04937-2585-4168-a726-16923c53fcd2"},{"name":"tasks/{id}","id":"4ad35c8c-f0e3-4f6c-a813-37f8368f29ef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/tasks/1","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado liste sua tarefa existente por Id. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: GET{id}</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>200 OK: Sucesso.</strong></p>\n</li>\n<li><p>400 Bad Request: \"<strong>ID inválido\"</strong>.</p>\n</li>\n<li><p><strong>404 Not Found: \"Tarefa não encontrada\".</strong></p>\n</li>\n</ol>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n","urlObject":{"protocol":"http","port":"5000","path":["api","tasks","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"a19119bd-6b35-4bf6-8ad6-6c0077f253c0","name":"tasks/{id}","originalRequest":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/tasks/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"206"},{"key":"ETag","value":"W/\"ce-jlpeqU5EOJ86QCVakHUnPTE39MM\""},{"key":"Date","value":"Tue, 27 May 2025 21:10:40 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"title\": \"Primeira Tarefa\",\n    \"description\": \"Caminhada\",\n    \"status\": \"pending\",\n    \"taskDate\": \"2025-05-28T00:00:00.000Z\",\n    \"userId\": 1,\n    \"createdAt\": \"2025-05-27T21:05:54.802Z\",\n    \"updatedAt\": \"2025-05-27T21:05:54.802Z\"\n}"}],"_postman_id":"4ad35c8c-f0e3-4f6c-a813-37f8368f29ef"},{"name":"/tasks/{id}","id":"9312d137-9421-4058-94e4-0856a9179fd2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"title\": \"Primeira Tarefa\",\r\n    \"description\": \"Caminhada\",\r\n    \"status\": \"completed\",\r\n    \"taskDate\": \"2025-05-28\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/tasks/1","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado atualize sua tarefa existente por Id e principalmente de <strong>\"pendente\" para \"concluída\"</strong>. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: PUT{id}</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>200 OK: Sucesso.</strong></p>\n</li>\n<li><p><strong>404 Not Found: \"Tarefa não encontrada\".</strong></p>\n</li>\n</ol>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n","urlObject":{"protocol":"http","port":"5000","path":["api","tasks","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"6c9261be-0e4a-45e3-87ee-474fbf3f1afc","name":"/tasks/{id}","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"title\": \"Primeira Tarefa\",\r\n    \"description\": \"Caminhada\",\r\n    \"status\": \"completed\",\r\n    \"taskDate\": \"2025-05-28\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/tasks/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"208"},{"key":"ETag","value":"W/\"d0-R5TpC3SnXZ32raHn33Kub9RWRBA\""},{"key":"Date","value":"Tue, 27 May 2025 21:12:49 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"title\": \"Primeira Tarefa\",\n    \"description\": \"Caminhada\",\n    \"status\": \"completed\",\n    \"taskDate\": \"2025-05-28T00:00:00.000Z\",\n    \"userId\": 1,\n    \"createdAt\": \"2025-05-27T21:05:54.802Z\",\n    \"updatedAt\": \"2025-05-27T21:12:49.652Z\"\n}"}],"_postman_id":"9312d137-9421-4058-94e4-0856a9179fd2"},{"name":"/tasks/{id}","id":"e4de6f47-c41f-4c3e-9bf5-19a551f29554","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://localhost:5000/api/tasks/2","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado exclua sua tarefa existente por Id. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: DELETE{id}</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>204 No Content: Sucesso.</strong></p>\n</li>\n<li><p><strong>404 Not Found: \"Tarefa não encontrada\".</strong></p>\n</li>\n</ol>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n","urlObject":{"protocol":"http","port":"5000","path":["api","tasks","2"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"a120a837-0fc9-451a-9bd5-a8b460e68506","name":"/tasks/{id}","originalRequest":{"method":"DELETE","header":[],"url":"http://localhost:5000/api/tasks/2"},"status":"No Content","code":204,"_postman_previewlanguage":"plain","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Date","value":"Tue, 27 May 2025 21:14:27 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"e4de6f47-c41f-4c3e-9bf5-19a551f29554"}],"id":"2fbebfc5-d8a0-4368-aba4-1fd718d8bdc2","description":"<h2 id=\"criar-tarefa\"><em><strong>Criar Tarefa</strong></em></h2>\n<ul>\n<li><p>**Autorização do Tipo:**Token do Portador</p>\n<ul>\n<li><p>Formato: Bearer Token</p>\n<ul>\n<li>O token é obtido após o processo de login/autenticação do usuário (normalmente fornecido no momento do cadastro ou login bem-sucedido).</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n","_postman_id":"2fbebfc5-d8a0-4368-aba4-1fd718d8bdc2"}],"id":"02d020d8-9f20-4021-a4e2-eac37a46f557","description":"<h3 id=\"nesta-versão-a-api-foi-estruturada-para-interagir-com-um-banco-de-dados-postgresql-por-meio-do-módulo-dbjs-responsável-por-gerenciar-conexões-e-executar-operações-no-banco-a-aplicação-oferece-endpoints-restful-padronizados-para-operações-crud-create-read-update-delete-seguindo-boas-práticas-de-design-de-apis\">Nesta versão, a API foi estruturada para interagir com um banco de dados PostgreSQL por meio do módulo <code>db.js</code>, responsável por gerenciar conexões e executar operações no banco. A aplicação oferece endpoints RESTful padronizados para operações CRUD (<em>Create, Read, Update, Delete</em>), seguindo boas práticas de design de APIs.</h3>\n","_postman_id":"02d020d8-9f20-4021-a4e2-eac37a46f557"},{"name":"2. Documentação da API para produção para Produção (Postgres-Render)","item":[{"name":"2. Gerenciamento de Tarefas","item":[{"name":"/tasks","id":"6d968170-7903-48fe-9590-460f9f625e54","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"title\": \"Primeira Tarefa\",\r\n  \"description\": \"Caminhada\",\r\n  \"taskDate\": \"2025-05-28\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado crie uma nova tarefa. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: POST</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>201 OK: Sucesso.</strong></p>\n</li>\n<li><p>400 Bad Request: \"Título é obrigatório\".</p>\n</li>\n<li><p>500: Erro interno do servidor.</p>\n</li>\n</ol>\n</li>\n</ol>\n<p><strong>4. Corpo da requisição:</strong></p>\n","urlObject":{"protocol":"https","path":["api","tasks"],"host":["taskflow-gerenciador-de-tarefas","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"4ed88185-0e11-4db9-860f-9942dfbb432e","name":"/tasks","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"title\": \"Primeira Tarefa\",\r\n  \"description\": \"Caminhada\",\r\n  \"taskDate\": \"2025-05-28\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 27 May 2025 14:58:11 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"83"},{"key":"Connection","value":"keep-alive"},{"key":"access-control-allow-credentials","value":"true"},{"key":"Content-Encoding","value":"br"},{"key":"etag","value":"W/\"5b-hCnXZ3I77nEaY6uswBB7gB1WQhk\""},{"key":"rndr-id","value":"3a0c8d55-8246-4a95"},{"key":"vary","value":"Origin"},{"key":"vary","value":"Accept-Encoding"},{"key":"x-powered-by","value":"Express"},{"key":"x-render-origin-server","value":"Render"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"94665e705870ae4a-GRU"},{"key":"alt-svc","value":"h3=\":443\"; ma=86400"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"title\": \"Primeira Tarefa\",\n    \"status\": \"pending\",\n    \"taskDate\": \"2025-05-28T00:00:00.000Z\"\n}"}],"_postman_id":"6d968170-7903-48fe-9590-460f9f625e54"},{"name":"/tasks","id":"f8bae2f3-bf21-4f51-816b-82c7b72d20eb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado liste suas tarefas. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: GET</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>200 OK: Sucesso.</strong></p>\n</li>\n<li><p><strong>404 Not Found: \"Tarefa não encontrada\".</strong></p>\n</li>\n</ol>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n","urlObject":{"protocol":"https","path":["api","tasks"],"host":["taskflow-gerenciador-de-tarefas","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"f4c8233f-4a38-41d7-8276-a6178f58b1ea","name":"/tasks","originalRequest":{"method":"GET","header":[],"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 27 May 2025 17:07:43 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"188"},{"key":"Connection","value":"keep-alive"},{"key":"access-control-allow-credentials","value":"true"},{"key":"Content-Encoding","value":"br"},{"key":"etag","value":"W/\"19d-05+X1ONC0rUdihxHSfDmX6Iuu3g\""},{"key":"rndr-id","value":"14bba4e8-3be1-4604"},{"key":"vary","value":"Origin"},{"key":"vary","value":"Accept-Encoding"},{"key":"x-powered-by","value":"Express"},{"key":"x-render-origin-server","value":"Render"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"94671c31edd4139e-GRU"},{"key":"alt-svc","value":"h3=\":443\"; ma=86400"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"title\": \"Primeira Tarefa\",\n        \"description\": \"Caminhada\",\n        \"status\": \"pending\",\n        \"taskDate\": \"2025-05-28T00:00:00.000Z\",\n        \"userId\": 1,\n        \"createdAt\": \"2025-05-27T14:58:11.054Z\",\n        \"updatedAt\": \"2025-05-27T14:58:11.054Z\"\n    },\n    {\n        \"id\": 2,\n        \"title\": \"Segunda Tarefa\",\n        \"description\": \"Reunião\",\n        \"status\": \"pending\",\n        \"taskDate\": \"2025-05-28T00:00:00.000Z\",\n        \"userId\": 1,\n        \"createdAt\": \"2025-05-27T16:11:43.528Z\",\n        \"updatedAt\": \"2025-05-27T16:11:43.528Z\"\n    }\n]"}],"_postman_id":"f8bae2f3-bf21-4f51-816b-82c7b72d20eb"},{"name":"tasks/{id}","id":"f6abd028-e47a-4b03-84ff-6fcc3e1e5bf9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks/1","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado liste sua tarefa existente por Id. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: GET{id}</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>200 OK: Sucesso.</strong></p>\n</li>\n<li><p>400 Bad Request: \"<strong>ID inválido\"</strong>.</p>\n</li>\n<li><p><strong>404 Not Found: \"Tarefa não encontrada\".</strong></p>\n</li>\n</ol>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n","urlObject":{"protocol":"https","path":["api","tasks","1"],"host":["taskflow-gerenciador-de-tarefas","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"d9a7d176-936e-4bac-81e3-3d12d9efdfbe","name":"tasks/{id}","originalRequest":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 27 May 2025 17:08:24 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"142"},{"key":"Connection","value":"keep-alive"},{"key":"access-control-allow-credentials","value":"true"},{"key":"Content-Encoding","value":"br"},{"key":"etag","value":"W/\"ce-I+RZrvTxAoOWn3aO5Bh1Ev1eoSo\""},{"key":"rndr-id","value":"b0d07831-a10c-43e7"},{"key":"vary","value":"Origin"},{"key":"vary","value":"Accept-Encoding"},{"key":"x-powered-by","value":"Express"},{"key":"x-render-origin-server","value":"Render"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"94671d2c386b139e-GRU"},{"key":"alt-svc","value":"h3=\":443\"; ma=86400"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"title\": \"Primeira Tarefa\",\n    \"description\": \"Caminhada\",\n    \"status\": \"pending\",\n    \"taskDate\": \"2025-05-28T00:00:00.000Z\",\n    \"userId\": 1,\n    \"createdAt\": \"2025-05-27T14:58:11.054Z\",\n    \"updatedAt\": \"2025-05-27T14:58:11.054Z\"\n}"}],"_postman_id":"f6abd028-e47a-4b03-84ff-6fcc3e1e5bf9"},{"name":"/tasks/{id}","id":"18ef38eb-b2ad-4d52-b680-c611d2b1c886","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"Primeira Tarefa\",\r\n    \"description\": \"Caminhada\",\r\n    \"status\": \"completed\",\r\n    \"taskDate\": \"2025-05-28\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks/1","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado atualize sua tarefa existente por Id e principalmente de <strong>\"pendente\" para \"concluída\"</strong>. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: PUT{id}</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>200 OK: Sucesso.</strong></p>\n</li>\n<li><p><strong>404 Not Found: \"Tarefa não encontrada\".</strong></p>\n</li>\n</ol>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n","urlObject":{"protocol":"https","path":["api","tasks","1"],"host":["taskflow-gerenciador-de-tarefas","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"dfdc5a86-65c8-40c1-a2d9-55deea49b88e","name":"/tasks/{id}","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"Primeira Tarefa\",\r\n    \"description\": \"Caminhada\",\r\n    \"status\": \"completed\",\r\n    \"taskDate\": \"2025-05-28\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 27 May 2025 17:14:31 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"148"},{"key":"Connection","value":"keep-alive"},{"key":"access-control-allow-credentials","value":"true"},{"key":"Content-Encoding","value":"br"},{"key":"etag","value":"W/\"d0-rqKrwYCz652C/aV0VlFOrdCs5tw\""},{"key":"rndr-id","value":"ee0d97d9-707f-4952"},{"key":"vary","value":"Origin"},{"key":"vary","value":"Accept-Encoding"},{"key":"x-powered-by","value":"Express"},{"key":"x-render-origin-server","value":"Render"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"946726264a730292-GRU"},{"key":"alt-svc","value":"h3=\":443\"; ma=86400"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"title\": \"Primeira Tarefa\",\n    \"description\": \"Caminhada\",\n    \"status\": \"completed\",\n    \"taskDate\": \"2025-05-28T00:00:00.000Z\",\n    \"userId\": 1,\n    \"createdAt\": \"2025-05-27T14:58:11.054Z\",\n    \"updatedAt\": \"2025-05-27T17:14:31.310Z\"\n}"}],"_postman_id":"18ef38eb-b2ad-4d52-b680-c611d2b1c886"},{"name":"/tasks/{id}","id":"9372592a-3803-4a9d-8313-8ad95d77c6d8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks/2","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário autenticado exclua sua tarefa existente por Id. Para utilizar este endpoint, o usuário deve estar previamente autenticado no sistema e fornecer um token de acesso válido.</p>\n</li>\n<li><p><strong>Método: DELETE{id}</strong></p>\n</li>\n<li><p><strong>Resposta:</strong></p>\n<ol>\n<li><p><strong>204 No Content: Sucesso.</strong></p>\n</li>\n<li><p><strong>404 Not Found: \"Tarefa não encontrada\".</strong></p>\n</li>\n</ol>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n","urlObject":{"protocol":"https","path":["api","tasks","2"],"host":["taskflow-gerenciador-de-tarefas","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"15f91351-79c5-4321-8cfa-420a594eed3e","name":"/tasks/{id}","originalRequest":{"method":"DELETE","header":[],"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/tasks/2"},"status":"No Content","code":204,"_postman_previewlanguage":"plain","header":[{"key":"Date","value":"Tue, 27 May 2025 17:19:15 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"access-control-allow-credentials","value":"true"},{"key":"rndr-id","value":"06ae35f6-cc79-4802"},{"key":"vary","value":"Origin"},{"key":"x-powered-by","value":"Express"},{"key":"x-render-origin-server","value":"Render"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"94672d17fec602f7-GRU"},{"key":"alt-svc","value":"h3=\":443\"; ma=86400"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"9372592a-3803-4a9d-8313-8ad95d77c6d8"}],"id":"8508a973-3c81-4e73-be16-c1f83976358f","description":"<h2 id=\"criar-tarefa\"><em><strong>Criar Tarefa</strong></em></h2>\n<ul>\n<li><p>**Autorização do Tipo:**Token do Portador</p>\n<ul>\n<li><p>Formato: Bearer Token</p>\n<ul>\n<li>O token é obtido após o processo de login/autenticação do usuário (normalmente fornecido no momento do cadastro ou login bem-sucedido).</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n","_postman_id":"8508a973-3c81-4e73-be16-c1f83976358f"},{"name":"1. Autenticação & Usuários","item":[{"name":"auth/register","event":[{"listen":"test","script":{"id":"f07b78eb-80ea-4a1e-b102-f0ec40f5eed2","exec":["var template = `\r","<style type=\"text/css\">\r","    .tftable {font-size:14px;color:#333333;width:100%;border-width: 1px;border-color: #87ceeb;border-collapse: collapse;}\r","    .tftable th {font-size:18px;background-color:#87ceeb;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;text-align:left;}\r","    .tftable tr {background-color:#ffffff;}\r","    .tftable td {font-size:14px;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;}\r","    .tftable tr:hover {background-color:#e0ffff;}\r","</style>\r","\r","<table class=\"tftable\" border=\"1\">\r","    <tr>\r","        <th>Message</th>\r","        <th>Stack</th>\r","    </tr>\r","    <tr>\r","        <td>{{response.message}}</td>\r","        <td>{{response.stack}}</td>\r","    </tr>\r","</table>\r","`;\r","\r","function constructVisualizerPayload() {\r","    return { response: pm.response.json() }\r","}\r","\r","pm.visualizer.set(template, constructVisualizerPayload());"],"type":"text/javascript","packages":{}}}],"id":"82b3fd94-4f80-4ad2-8ff0-afa19130495d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"username\":\"nome-usuario\",  \r\n   \"email\": \"usuario@exemplo.com\",\r\n  \"password\": \"SuaSenhaSuperSegura123!\"\r\n}   ","options":{"raw":{"language":"json"}}},"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/auth/register","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário existente se cadastre no sistema fornecendo seu username, email e senha. Em caso de sucesso, retorna os dados do usuário e um token de acesso para ser utilizado em requisições subsequentes que exigem autenticação.</p>\n</li>\n<li><p><strong>Método: POST</strong></p>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n<ul>\n<li><p>{</p>\n<ul>\n<li><p>\"username\": \"nome-usuario\",</p>\n</li>\n<li><p>\"email\": \"<a href=\"https://mailto:usuario@example.com/\">usuario@example.com</a>\",</p>\n</li>\n<li><p>\"password\": \"SuaSenhaSuperSegura123!\"</p>\n</li>\n</ul>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n<p><strong>4. Respostas Possíveis:</strong></p>\n<p><strong>4.1 Sucesso na Autenticação:</strong></p>\n<ul>\n<li><p><strong>Descrição:</strong> Autenticação bem-sucedida. O corpo da resposta contém os dados do usuário e o token de acesso.</p>\n</li>\n<li><p><strong>Código de status:</strong> <strong>201 OK.</strong></p>\n</li>\n<li><p><strong>Corpo da Resposta (Exemplo):</strong></p>\n<ul>\n<li><p>{<br />  \"id\": \"a1b2c3d4-e5f6-7890-1234-567890abcdef\",<br />  \"username\": \"nome_do_usuario\",<br />  \"email\": \"<a href=\"https://mailto:usuario@exemplo.com/\">usuario@exemplo.com</a>\",<br />  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikp\"</p>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>4.<strong>2 Erro: Interno do Servidor</strong></p>\n<ul>\n<li><p><strong>Código de status:</strong> Erro interno do servidor 500.</p>\n</li>\n<li><p><strong>Descrição:</strong> Ocorreu um erro inesperado no servidor.</p>\n</li>\n<li><p><strong>Corpo da resposta (Exemplo):</strong></p>\n<ul>\n<li><p>{</p>\n<ul>\n<li><p>\"success\": false,</p>\n</li>\n<li><p>\"message\": \"Erro no servidor!\",</p>\n</li>\n<li><p>\"error\": \"Validation error: Validation isEmail on email failed\"</p>\n</li>\n</ul>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","auth","register"],"host":["taskflow-gerenciador-de-tarefas","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"82b3fd94-4f80-4ad2-8ff0-afa19130495d"},{"name":"/auth/login","id":"2107d945-c3d7-43dc-8343-e986ac9f3fa0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n \"email\": \"usuario@exemplo.com\",\r\n \"password\": \"SuaSenhaSuperSegura123!\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://taskflow-gerenciador-de-tarefas.onrender.com/api/auth/login","description":"<ol>\n<li><p><strong>Descrição:</strong> Permite que um usuário existente se autentique no sistema fornecendo seu email e senha. Em caso de sucesso, retorna os dados do usuário e um token de acesso para ser utilizado em requisições subsequentes que exigem autenticação.</p>\n</li>\n<li><p><strong>Método: POST</strong></p>\n</li>\n<li><p><strong>Corpo da requisição:</strong></p>\n</li>\n</ol>\n<ul>\n<li><p>{</p>\n<ul>\n<li><p>\"email\": \"<a href=\"https://mailto:usuario@example.com/\">usuario@example.com</a>\",</p>\n</li>\n<li><p>\"password\": \"SuaSenhaSuperSegura123!\"</p>\n</li>\n</ul>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n<p><strong>4. Respostas Possíveis:</strong></p>\n<p><strong>4.1 Sucesso na Autenticação:</strong></p>\n<ul>\n<li><p><strong>Descrição:</strong> Autenticação bem-sucedida. O corpo da resposta contém os dados do usuário e o token de acesso.</p>\n</li>\n<li><p><strong>Campos da Resposta de Sucesso:</strong></p>\n<ul>\n<li><p><strong>Código de status:</strong> <strong>201 OK.</strong></p>\n<ul>\n<li>{<br />  \"id\": \"a1b2c3d4-e5f6-7890-1234-567890abcdef\",<br />  \"username\": \"nome_do_usuario\",<br />  \"email\": \"<a href=\"https://mailto:usuario@exemplo.com\">usuario@exemplo.com</a>\",<br />  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikp\"<br />  }</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>4.<strong>2 Credenciais Inválidas</strong></p>\n<ul>\n<li><p><strong>Código de status:</strong> 401 Não autorizado.</p>\n</li>\n<li><p><strong>Descrição:</strong> Email ou senha incorretos.</p>\n</li>\n<li><p><strong>Corpo da resposta (Exemplo):</strong></p>\n<ul>\n<li><p>{</p>\n<ul>\n<li>\"Invalid email or password!\",</li>\n</ul>\n</li>\n<li><p>}</p>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","auth","login"],"host":["taskflow-gerenciador-de-tarefas","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"2107d945-c3d7-43dc-8343-e986ac9f3fa0"}],"id":"92ace8a3-7219-4eb9-95dd-5040471a2d94","description":"<h2 id=\"criar-cadastro-e-validar-login\"><em><strong>Criar Cadastro e Validar Login</strong></em></h2>\n","_postman_id":"92ace8a3-7219-4eb9-95dd-5040471a2d94"}],"id":"8ef9640b-59d6-4ca0-994a-2e3dc673429a","description":"<h3 id=\"em-ambiente-de-produção-a-api-utiliza-o-postgresql-como-banco-de-dados-gerenciado-pela-plataforma-render-o-sistema-disponibiliza-endpoints-completos-para-operações-de-criação-listagem-atualização-e-exclusão-de-recursos-crud-garantindo-integração-eficiente-e-manutenção-simplificada\">Em ambiente de produção, a API utiliza o PostgreSQL como banco de dados, gerenciado pela plataforma Render. O sistema disponibiliza endpoints completos para operações de criação, listagem, atualização e exclusão de recursos (CRUD), garantindo integração eficiente e manutenção simplificada.</h3>\n","_postman_id":"8ef9640b-59d6-4ca0-994a-2e3dc673429a"},{"name":"Api-Test","id":"1d75ed8c-fcd4-41bb-ad1e-c7ad4fb3bde6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"urlObject":{"query":[],"variable":[]},"url":""},"response":[],"_postman_id":"1d75ed8c-fcd4-41bb-ad1e-c7ad4fb3bde6"}]}