- Nodejs versão: v16.13.2
- Yarn versão: 1.22.10
- Typescript Typescript
- Express Express
- ts-node-dev
- git
- Type ORM
- Sqlite3
- Beekeeper Studio
🔨 Instalar Beekeeper Studio no Linux linux - Apt / DEB
wget --quiet -O - https://deb.beekeeperstudio.io/beekeeper.key | sudo apt-key add -
echo "deb https://deb.beekeeperstudio.io stable main" | sudo tee /etc/apt/sources.list.d/beekeeper-studio-app.list
- sudo apt update && sudo apt install beekeeper-studio
- yarn init => Cria package.json
- yarn add typescript -D => Adicion a typescript como dependência de desenvlovimento
- yarn tsc --init => inicia o typescript
- yarn tsc
- yarn add express => Instala a bilioteca express
- yarn add ts-node-dev -D => Instala a biblioteca ts-node-dev
"scripts":{ "dev": "ts-node-dev src/server.ts", "typeorm": "ts-node-dev ./node_modules/typeorm/cli.js" },
- yarn dev
- criar .gitignore +> ignora determinados arquivos como
node_modules/
- git init
- git add .
- git commit -m "aula 01"
- git branch -M aula01
- git remote add origin git@github.com:mazera3/nlwvaloriza.git
- git push -u origin aula01
- git add . && git commit -m "aula 02" && git branch -M aula02 && git push -u origin aula02
- app.get('/', (req,res) =>{return res.send("Teste GET!!!");})
- Ruotes Params => http://localhost:3000/produtos/93129128
- Query Params => http://localhost:3000/produtos?name=XXX&description=YYYY&outros=...
- Body Params => No corpo da requisição: {"name":"XXX", "description": "YYY", "outros":"..." }
- Nativo: ex: node-postgres: https://node-postgres.com/
- Knex.js: https://knexjs.org/
- Sequelize ORM: https://sequelize.org/master/
- Type ORM: https://typeorm.io/#/
- Prisma ORM: https://www.prisma.io/
- yarn add typeorm reflect-metadata sqlite3
- import "reflect-metadata" em server.ts
- Criar arquivo ormconfig.json com as linhas:
- "type": "sqlite",
- "database": "src/database/database.sqlite",
- "cli": { "migrationsDir": "src/database/migrations", "entitiesDir": "src/entities" }
- yarn typeorm -help
- typeorm executa: "ts-node-dev ./node_modules/typeorm/cli.js"
- Cria entidade como nome: CreateUsers: yarn typeorm migration:create -n CreateUsers
- Editar a tabela: 1646224012275-CreateUsers.ts
- definir em ormconfig.json os caminhos: migrations e entities
- executar: yarn typeorm migration:run
- reverter: yarn typeorm migration:revert
- criar entidade User: yarn typeorm entity:create -n User
- instalar @types/uuid: yarn add @types/uuid -D
- descomentar em tsconfig.json:
- "experimentalDecorators": true,
- "emitDecoratorMetadata": true,
- "strictPropertyInitialization": false,
- criar pasta/arquivo: repositories/UsersRepositories.ts
- criar pasta/arquivo: services/CreateUserService.ts
- criar pasta/arquivo: controllers/CreateUserController.ts
- criar pasta/arquivo: controllers/CreateUserController.ts
- criar arquivo de roras em src: tsroutes.ts
- server -> controller -> service -> ...
- middleware de tratamento de erros:
- Função com 4 parâmetros: app.use(err, request, response, next)
- err
- request
- response
- next
- Instalar a biblioteca: yarn add express-async-errors
- importar express-async-errors antes de router
-
Cria entidade como nome: CreateTags: yarn typeorm migration:create -n CreateTags
-
Editar a tabela: 1646244129579-CreateTags.ts
-
executar: yarn typeorm migration:run
-
criar entidade Tags: yarn typeorm entity:create -n Tags
-
criar arquivo: repositories/TagsRepositories.ts
-
criar arquivo: controllers/CreateTagController.ts
-
criar rota em routes
-
criar pasta/arquivo:: middlewares/ensureAdmin.ts
-
Se não for Admin - Status/401: 401
JSON Web Token jwt
- Biblioteca: JsonWebToken
- Instalação: npm install jsonwebtoken ou yarn add jsonwebtoken
- Tyipagem: yarn add @types/jsonwebtoken -D
- Bcrypt: npm install bcryptjs ou yarn add bcryptjs
- Tyipagem: yarn add @types/bcryptjs -D
- Criar arquivo: repositories/ComplimentsRepositories.ts e entities/Compliment.ts
- yarn typeorm migration:create -n AlterUserAddPassweord
- executar: yarn typeorm migration:run
- Em entities/User.ts criar a coluna: @Column() password: string;
- Em services/CreateUserService.ts acrescentar: password
- Em controllers/CreateUserController.ts acrescentar: password
- Criar arquivos:
- services: AuthenticateUserService.ts
- Gerar Key com a string (mazera3eebfmazzola2022) md5
- Key gerada: d665ce14ecc982fd0529a7ce3027ac78 (recomenda-se deixar em .env) (process.env.KEY_TOKEN)
- controller: AuthenticateUserController.ts
- Acrescentar a rota /login em: routes.ts
-
yarn typeorm migration:create -n CreateCompliments
-
Criar as chaves estrangeiras para as colunas: user_sender, user_receiver, tag_id
-
name: FKTabelaNome
-
referencedTableName: Tabela (referencia a qual tabela?)
-
referencedColumnNames: Coluna (referencia a qwual coluna?)
-
columnNames: Coluna (da tabela atual)
-
onDelete: seta com null caso a referencia seja excluida.
-
onUpdate: seta com null { name: "FKTagCompliments", referencedTableName: "tags", referencedColumnNames: ["id"], columnNames: ["tag_id"], onDelete: "SET NULL", onUpdate: "SET NULL", }
-
executar: yarn typeorm migration:run
-
Criar arquivos:
- entities/Compliment.ts
- repositories/ComplimentsRepositories.ts
- services/CreateComplimentService.ts
- controllers/CreateComplimentController.ts
- git add . && git commit -m "aula 05" && git branch -M aula05 && git push -u origin aula05
-
Cadastro de usuário
[ x ] Não é permitido cadastrar mais de um usuário com o mesmo e-mail
[ x ] Não é permitido cadastrar usuário sem e-mail
-
Cadastro de TAG
[ x ] Não é permitido cadastrar mais de uma tag com o mesmo nome
[ x ] Não é permitido cadastrar tag sem nome
[ x ] Não é permitido o cadastro por usuários que não sejam administradores
-
Cadastro de elogios
[ x ] Não é permitido um usuário cadastrar um elogio para si
[ x ] Não é permitido cadastrar elogios para usuários inválidos
[ x ] O usuário precisa estar autenticado na aplicação
- Gerado com (
)File Tree to Text Generator
- Criar arquivo: middlewares/ensureAuthenticated.ts
- Criar pasta/arquivo: @types/express/index.d.ts
- Alterar tsconfig.json
- "typeRoots": ["./src/@types"],
- Criar services/ListUserReceiveComplimentsService.ts
- Criar services/ListUserSendComplimentsService.ts
- Criar controllers/ListUserReceiveComplimentsController.ts
- Criar controllers/ListUserSendComplimentsController.ts
- Criar rotas: routes.ts
- Criar services/ListTagsService.ts
- Criar controllers/ListTagsController.ts
- Criar rotas: routes.ts
- Instalar: yarn add class-transformer@v0.4.0 (ultima versão não funciona)
- Criar services/ListUsersService.ts
- Criar controllers/ListUsersController.ts
- Criar rotas: routes.ts
- Instalar cors:
- yarn add cors
- yarn add @types/cors -D
- yarn add env
- git rm .env.local --cached
- git rm .env --cached
src/ ┣ @types/ ┃ ┗ express/ ┃ ┗ index.d.ts ┣ controllers/ ┃ ┣ AuthenticateUserController.ts ┃ ┣ CreateComplimentController.ts ┃ ┣ CreateTagController.ts ┃ ┣ CreateUserController.ts ┃ ┣ ListTagsController.ts ┃ ┣ ListUserReceiveComplimentsController.ts ┃ ┣ ListUserSendComplimentsController.ts ┃ ┗ ListUsersController.ts ┣ database/ ┃ ┣ migrations/ ┃ ┃ ┣ 1646224012275-CreateUsers.ts ┃ ┃ ┣ 1646244129579-CreateTags.ts ┃ ┃ ┣ 1646311462095-AlterUserAddPassweord.ts ┃ ┃ ┗ 1646317282186-CreateCompliments.ts ┃ ┣ database.sqlite ┃ ┗ index.ts ┣ entities/ ┃ ┣ Compliment.ts ┃ ┣ Tag.ts ┃ ┗ User.ts ┣ middlewares/ ┃ ┣ ensureAdmin.ts ┃ ┗ ensureAuthenticated.ts ┣ repositories/ ┃ ┣ ComplimentsRepositories.ts ┃ ┣ TagsRepositories.ts ┃ ┗ UsersRepositories.ts ┣ services/ ┃ ┣ AuthenticateUserService.ts ┃ ┣ CreateComplimentService.ts ┃ ┣ CreateTagService.ts ┃ ┣ CreateUserService.ts ┃ ┣ ListTagsService.ts ┃ ┣ ListUserReceiveComplimentsService.ts ┃ ┣ ListUserSendComplimentsService.ts ┃ ┗ ListUsersService.ts ┣ routes.ts ┗ server.ts
- git add . && git commit -m "Master" && git branch -M main && git push -u origin main