Loading repository data…
Loading repository data…
LivioAlvarenga / repository
Nesse projeto será desenvolvido uma aplicação para check-ins em academias. Aqui vamos aplicar sobre alguns conceitos do SOLID, Design Patterns, Docker para iniciar o banco de dados, JWT e Refresh Token, RBAC e diversos outros conceitos.

🚀 Neste projeto, será desenvolvido uma aplicação para check-ins em academias, aplicando conceitos do SOLID, Design Patterns, Docker para iniciar o banco de dados, JWT e Refresh Token, RBAC e diversos outros conceitos. O objetivo é fornecer um template completo e bem estruturado para o desenvolvimento de APIs RESTful com Node.js, Docker e Prisma, proporcionando uma base sólida para criar aplicações web escaláveis e de alta qualidade.
A primeira parte do projeto inclui a configuração de variáveis de ambiente para bancos de dados MySQL, utilizando o arquivo .env e o Prisma como ORM. As variáveis de ambiente são usadas para armazenar informações confidenciais, como credenciais de banco de dados, e para configurar o projeto de acordo com o ambiente de desenvolvimento ou produção.
Na segunda parte, é apresentada a arquitetura do projeto, utilizando a biblioteca Vitest para testes e cobertura de testes. Isso inclui a instalação de várias dependências, a criação de arquivos de configuração e a adição de scripts no package.json para executar testes e outras tarefas relacionadas.
A aplicação possui testes unitários de integração e testes e2e e uma cobertura de testes de 100%. Além disso, utilizamos o GitHub Actions para executar os testes unitários de integração e e2e e verificar a cobertura de testes a cada push na branch main.
Por fim, são apresentadas algumas funcionalidades adicionais e bibliotecas utilizadas no projeto, como bcryptjs para criptografia de senhas e dayjs para manipulação de datas. Além disso, o projeto inclui uma lista detalhada de requisitos funcionais e não funcionais, bem como regras de negócio que orientam o desenvolvimento das funcionalidades da aplicação.
Dessa forma, este projeto oferece um ponto de partida sólido para o desenvolvimento de aplicações web, incluindo configurações e ferramentas para garantir a qualidade do código e a manutenção do projeto ao longo do tempo.
| :placard: Vitrine.Dev | |
|---|---|
| :sparkles: Nome | API Rest NodeJs com SOLID |
| :label: Tecnologias | NodeJs, TypeScript, JavaScript, .ENV, Fastify, PrismaJs, Zod, MySql, Docker, Vitest, GitHub Actions, Swagger, EsLint, Insomnia e JSON Web Token. |
As seguintes ferramentas foram usadas na construção do projeto
# Create project nodejs with npm and -y to accept all default options
npm init -y
// Create scripts in package.json
"scripts": {
"dev": "set NODE_ENV=dev&& tsx watch src/server.ts", // Create script to run server in development mode
"build": "tsup src !src/**/*.spec.ts !src/**/test/**/* --out-dir build --minify --publicDir src/docs", // Create script to build server in production mode
"start": "set NODE_ENV=production&& node build/server.js", // Create script to run server in production mode
},
Create .gitignore file
Create .npmrc file with save-exact=true to save exact version of dependencies
npm install dotenv # Install dotenv to use environment variables in NodeJs
Create .env file with all environment variables and gitignore this file
Create .env.example file with all environment variables and not gitignore this file
npm install -D @rocketseat/eslint-config # Install Rocketseat ESLint config
Create .eslintrc.json file with all ESLint config
Create .eslintignore file with all ESLint ignore files
npm install -D typescript # Install TypeScript
npm install -D @types/node # Install @types/node to use types in NodeJs
npm install -D tsx # Install tsx to use compiler TypeScript in NodeJs in development mode
npm install -D tsup # Install tsup to use compiler TypeScript in NodeJs in production mode
npm install zod # Install zod to use types in NodeJs and validate data
npx tsc --init # Create tsconfig.json
"target": "es2020", // Change TypeScript target to ES2020 in tsconfig.json
"baseUrl": "./", // Specify the base directory to resolve non-relative module names.
"paths": {
"@/*": [
"./src/*"
],
} // Specify path aliases to import files in tsconfig.json
npm install fastify # Install Fastify
npm install @fastify/jwt # Install @fastify/jwt to use JWT in Fastify
npm install @fastify/cookie # Install @fastify/cookie to use cookie in Fastify
npm install @fastify/swagger # Install @fastify/swagger to use Swagger in Fastify
npm install @fastify/swagger-ui # Install @fastify/swagger-ui to use Swagger UI in Fastify
Create fastify-jwt.d.ts file in @types folder with all types of JWT in Fastify
import '@fastify/jwt'
declare module '@fastify/jwt' {
export interface FastifyJWT {
user: {
sub: string
}
}
}
Create JWT_SECRET in .env and .env.example
# Auth token in development mode
JWT_SECRET="secret"
Create script fastifyJwt in app.ts to use JWT in Fastify
`