{"id":18285583,"url":"https://github.com/luizfelipe9627/users-management-api","last_synced_at":"2026-02-25T20:33:07.105Z","repository":{"id":250067647,"uuid":"833377411","full_name":"luizfelipe9627/users-management-api","owner":"luizfelipe9627","description":"API para gerenciamento de usuários. Permite a criação, autenticação, atualização e exclusão de contas de usuário.","archived":false,"fork":false,"pushed_at":"2024-08-01T02:03:18.000Z","size":209,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-31T17:01:43.449Z","etag":null,"topics":["bcryptjs","cors","docker","docker-compose","dotenv","expressjs","jsonwebtoken","mysql2","nodejs","nodemon","swagger","zod"],"latest_commit_sha":null,"homepage":"https://users-management-api.onrender.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luizfelipe9627.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-24T23:38:13.000Z","updated_at":"2024-08-21T00:35:00.000Z","dependencies_parsed_at":"2024-07-25T01:48:00.435Z","dependency_job_id":"a50f6899-2e2a-4761-8f38-59a7a3238518","html_url":"https://github.com/luizfelipe9627/users-management-api","commit_stats":null,"previous_names":["luizfelipe9627/users-management","luizfelipe9627/users-management-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/luizfelipe9627/users-management-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizfelipe9627%2Fusers-management-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizfelipe9627%2Fusers-management-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizfelipe9627%2Fusers-management-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizfelipe9627%2Fusers-management-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luizfelipe9627","download_url":"https://codeload.github.com/luizfelipe9627/users-management-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizfelipe9627%2Fusers-management-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29838104,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T19:08:47.527Z","status":"ssl_error","status_checked_at":"2026-02-25T18:59:04.705Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bcryptjs","cors","docker","docker-compose","dotenv","expressjs","jsonwebtoken","mysql2","nodejs","nodemon","swagger","zod"],"created_at":"2024-11-05T13:17:10.001Z","updated_at":"2026-02-25T20:33:07.072Z","avatar_url":"https://github.com/luizfelipe9627.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Users Management API\n\n\u003cdiv display=\"flex\"\u003e\n \u003cimg src=\"https://img.shields.io/static/v1?label=node\u0026message=18-alpine\u0026color=green\u0026style=for-the-badge\u0026logo=node.js\"/\u003e \n \u003cimg src=\"https://img.shields.io/static/v1?label=express\u0026message=4.19.2\u0026color=yellow\u0026style=for-the-badge\u0026logo=express\"/\u003e \n \u003cimg src=\"https://img.shields.io/static/v1?label=mysql2\u0026message=3.10.3\u0026color=4479A1\u0026style=for-the-badge\u0026logo=mysql\" alt=\"mysql2\"\u003e\n \u003cimg src=\"https://img.shields.io/static/v1?label=swagger\u0026message=5.0.1\u0026color=darkgreen\u0026style=for-the-badge\u0026logo=swagger\"/\u003e\n \u003cimg src=\"https://img.shields.io/static/v1?label=docker\u0026message=4.32.0\u0026color=2496ED\u0026style=for-the-badge\u0026logo=docker\" \nalt=\"Docker\"\u003e\n \u003cimg src=\"https://img.shields.io/static/v1?label=bcryptjs\u0026message=2.4.3\u0026color=blue\u0026style=for-the-badge\u0026logo=npm\" alt=\"bcrypt\"/\u003e\n \u003cimg src=\"https://img.shields.io/static/v1?label=jsonwebtoken\u0026message=9.0.2\u0026color=black\u0026style=for-the-badge\u0026logo=npm\" alt=\"jsonwebtoken\"/\u003e\n \u003cimg src=\"https://img.shields.io/static/v1?label=zod\u0026message=3.23.8\u0026color=purple\u0026style=for-the-badge\u0026logo=npm\" alt=\"zod\"/\u003e\n\u003c/div\u003e\n\n\u003cimg src=\"src/assets/swagger.png\" alt=\"Swagger\" width=\"100%\"/\u003e\n\n## Sumário\n\n- [Introdução](#introdução)\n- [Instalação e execução](#instalação-e-execução)\n- [Variáveis de ambiente](#variáveis-de-ambiente)\n- [Visão geral da API](#visão-geral-da-api)\n- [Documentação do Swagger](#documentação-do-swagger)\n- [Funcionalidades](#funcionalidades)\n- [Endpoints](#endpoints)\n    - [Login](#1-login)\n    - [Registro](#2-registro)\n    - [Atualizar perfil](#3-atualizar-perfil)\n    - [Deletar conta](#4-excluir-conta)\n- [Tecnologias utilizadas](#tecnologias-utilizadas)\n- [Autor e Licença](#autor-e-licença)\n\n## Introdução\n\nBem-vindo à documentação da Users Management API! Esta documentação fornece informações detalhadas sobre como usar a \nAPI, incluindo endpoints disponíveis, parâmetros aceitos, códigos de status e exemplos práticos. A documentação Swagger está disponível para uma visão mais interativa da API.\n\n## Instalação e execução\n#### Para instalar e executar o projeto, siga os passos abaixo:\n\n1. Clone o repositório:\n- Abra o terminal e execute o comando abaixo para clonar o repositório:\n\n  ```bash\n    git clone https://github.com/luizfelipe9627/users-management.git\n  ```\n\n2Defina as variáveis de ambiente:\n- Siga as instruções do tópico [Variáveis de ambiente](#variáveis-de-ambiente) para definir as variáveis de ambiente no arquivo `.env`.\n\n4. Instale o Docker:\n- Para instalar o Docker, siga as instruções no link abaixo:\n\n  ```bash\n    https://docs.docker.com/get-docker/\n  ```\n\n5. Inicie as Imagens do Docker:\n\n- Para rodar todas as imagens juntas execute o comando abaixo:\n\n  Para criar a imagem do Node.JS e do MySQL e já iniciar os containers:\n  ```bash\n    npm run docker:all\n  ```\n\n- Caso deseje rodar apenas o Node.JS, execute o comando abaixo:\n\n  Para criar a imagem do Node.JS e iniciar o container:\n    ```bash\n      npm run docker:app\n    ```\n\n- Caso deseje rodar junto com o MySQL, execute o comando abaixo:\n\n  Para criar a imagem do MySQL e iniciar o container:\n    ```bash\n      npm run docker:db\n    ```\n\n6. Acesse o servidor local:\n- Acesse no terminal do editor de código ou no do Docker o link do servidor local, sendo a porta definida no arquivo `.env`:\n\n  ```bash\n    http://localhost:3001\n  ```\n\n## Variáveis de ambiente\n\n- Caso deseje rodar o projeto em ambiente de desenvolvimento, copie o arquivo `.env.dev.example` e renomeie para `.env`. Os valores padrões não podem ser alterados, pois são necessários para o funcionamento correto do Docker com o MySQL.\n\n  ```bash\n    PORT=3001 # Para que o swagger funcione corretamente, a porta deve ser a definida por padrão.\n    NODE_ENV=development # Para rodar com o nodemon, o valor dessa variável deve ser 'development'.\n    MYSQL_HOST=db # Para rodar com o Docker Compose, o valor dessa variável deve ser passado pois é nome do serviço do container do MySQL.\n    MYSQL_USER=root # Seu usuário local do seu MySQL.\n    MYSQL_PASSWORD=root # Sua senha local do seu MySQL.\n    MYSQL_DATABASE=users_management # Para rodar com o Docker Compose, o valor dessa variável deve ser 'users_management', pois é o nome do banco de dados que será criado no MySQL.\n    JWT_SECRET=sua_chave_secreta # Chave secreta obrigatória para gerar o token JWT.\n  ```\n\n- Caso deseje rodar o projeto em ambiente de produção(deploy), copie o arquivo `.env.prod.example` e renomeie para `.env`. Todos os valores das variáveis de ambiente podem ser alterados, exceto o valor da variável `NODE_ENV`, que deve ser `production`.\n\n  ```bash\n    # Para que o swagger funcione corretamente, a porta deve ser a definida por padrão.\n    PORT=3001 \n\n    # Para rodar com o node em ambiente de produção, o valor dessa variável deve ser 'production'.\n    NODE_ENV=production \n\n    # Preencha todas as variáveis a seguir com as configurações passadas pelo seu provedor do banco de dados.\n    MYSQL_HOST=\n    MYSQL_USER= \n    MYSQL_PASSWORD=\n    MYSQL_DATABASE=\n\n    # Chave secreta obrigatória para gerar o token JWT.\n    JWT_SECRET=\n  ```\n\n## Visão geral da API\n#### A API foi projetada para ser fácil e simples de usar. Abaixo estão alguns pontos importantes para começar:\n\n- **Base URL**: O endpoint base para todas as chamadas da API é [http://localhost:3001] para ambiente de desenvolvimento e [https://users-management-api.onrender.com] para ambiente de produção.\n- **Autenticação**: A autenticação é feita por meio de tokens JWT. Para acessar os endpoints protegidos, é necessário incluir o token de sessão retornado após o login nas solicitações subsequentes.\n- **Parâmetros de solicitação**: Os parâmetros de solicitação são passados no corpo da solicitação em formato JSON. Exemplos de corpo de solicitação são fornecidos na documentação abaixo para cada endpoint.\n- **Respostas**: As respostas da API são retornadas em formato JSON. Exemplos de corpo de resposta são fornecidos na documentação abaixo para cada endpoint.\n- **Códigos de status**: A API retorna códigos de status padrão, como 200 para solicitações bem-sucedidas, 400 para solicitações inválidas e 500 para erros internos do servidor.\n\n## Documentação do Swagger\n\nExplore e teste a API de forma interativa usando a documentação local do Swagger. Acesse [Swagger Local](http://localhost:3001) ou [Swagger Online](https://users-management-api.onrender.com) para obter uma visão visual completa dos endpoints, parâmetros e exemplos.\n\n## Funcionalidades\n\nA API users-management fornece as seguintes funcionalidades:\n\n- **Login**: Permite que usuários autentiquem-se fornecendo um e-mail e uma senha. Se as credenciais forem válidas, um token de sessão é gerado e retornado.\n- **Registro**: Permite que novos usuários se registrem fornecendo um nome, um e-mail e uma senha. Se o registro for bem-sucedido, um token de sessão é gerado e retornado.\n- **Alterar informações da conta**: Permite que um usuário autenticado atualize seu perfil fornecendo um e-mail, um nome e/ou uma senha. Pelo menos um campo deve ser preenchido para realizar a atualização.\n- **Deletar conta**: Permite que um usuário autenticado exclua sua conta fornecendo um token de sessão e a senha da conta. Após a exclusão, o usuário não estará mais presente na base de dados.\n\n## Recursos principais e Exemplos\n\n### 1. Login\n\nAutentica um usuário fornecendo o email e a senha. Retorna um token de sessão se as credenciais forem válidas.\n\n- **Endpoint**: `/auth/login`\n- **Método**: `POST`\n\n**Exemplo de corpo da solicitação:**\n\n```json\n{\n  \"email\": \"luiz@email.com\",\n  \"password\": \"luiz@123\"\n}\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjYs...\"\n}\n```\n\n### 2. Registro\n\nRegistra um novo usuário fornecendo o email e a senha. Retorna um token de sessão se o registro for bem-sucedido.\n\n- **Endpoint**: `/auth/register`\n- **Método**: `POST`\n\n**Exemplo de corpo da solicitação:**\n\n```json\n{\n  \"name\": \"Luiz\",\n  \"email\": \"luiz@email.com\",\n  \"password\": \"luiz@123\"\n}\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"token\": \"203kdslJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.29dskladaskoLDLP...\"\n}\n```\n\n### 3. Atualizar perfil\n\nAtualiza as informações do perfil do usuário. É necessário estar autenticado para acessar este endpoint. Pelo menos um campo deve ser preenchido para realizar a atualização.\n\n- **Endpoint**: `/user/profile`\n- **Método**: `PUT`\n\n**Exemplo de corpo da solicitação:**\n\n```json\n{\n  \"id\": 0,\n  \"name\": \"Luiz Felipe\",\n  \"email\": \"luizfelipe@email.com\",\n  \"password\": \"lf@321\",\n}\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"id\": 0,\n  \"name\": \"Luiz Felipe\",\n  \"email\": \"luizfelipe@email.com\",\n  \"password\": \"$10$F.kzUfuFDhYXuJFeu5YHLusEi.TzXi3X02H...\",\n  \"token\": \"sdasSKEI281.92udjeKGORN4.eyJ1c2VySWQiOjYs...\"\n}\n```\n\n### 4. Excluir conta\n\nExclui a conta do usuário. É necessário estar autenticado para acessar este endpoint.\n\n- **Endpoint**: `/user/delete`\n- **Método**: `DELETE`\n\n**Exemplo de corpo da solicitação:**\n\n```json\n{\n  \"password\": \"lf@321\"\n}\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"message\": \"Perfil excluído com sucesso.\"\n}\n```\n\n## Tecnologias utilizadas\n\n- [Node.js](https://nodejs.org/en/): Ambiente de execução JavaScript server-side.\n- [Express](https://expressjs.com/): Framework web para Node.js.\n- [MySQL2](https://www.npmjs.com/package/mysql2): Cliente MySQL para Node.js.\n- [Swagger](https://swagger.io/): Framework de código aberto para APIs.\n- [Docker](https://www.docker.com/): Plataforma de software que fornece contêineres.\n- [Docker Compose](https://docs.docker.com/compose/): Ferramenta para definir e executar aplicativos Docker multi-container.\n- [Nodemon](https://www.npmjs.com/package/nodemon): Ferramenta que monitora as alterações no código e reinicia automaticamente o servidor.\n- [Dotenv](https://www.npmjs.com/package/dotenv): Módulo que carrega variáveis de ambiente de um arquivo `.env` para `process.env`.\n- [Cors](https://www.npmjs.com/package/cors): Middleware para habilitar o CORS com várias opções.\n- [Jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken): Biblioteca para geração e verificação de JSON Web Tokens (JWT).\n- [Bcrypt](https://www.npmjs.com/package/bcrypt): Biblioteca para criptografia de senhas.\n- [Zod](https://www.npmjs.com/package/zod): Biblioteca para validação de esquemas e dados.\n\n## Autor e Licença\n\nEste projeto foi desenvolvido por [Luiz Felipe Silva](https://github.com/luizfelipe9627) e está sob a licença MIT. Veja o arquivo [LICENSE](./LICENSE.md) para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizfelipe9627%2Fusers-management-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluizfelipe9627%2Fusers-management-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizfelipe9627%2Fusers-management-api/lists"}