Skip to content

Commit 6b4b301

Browse files
authored
Merge pull request #3 from tgmarinho/aula-75-express-rate-limit
All classes in master branch now
2 parents 059bc02 + 3c44ad5 commit 6b4b301

File tree

113 files changed

+12925
-265
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+12925
-265
lines changed

.DS_Store

0 Bytes
Binary file not shown.

.env.example

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# App
2+
APP_SECRET=
3+
APP_WEB_URL=http://localhost:3000
4+
APP_API_URL=http://localhost:3333
5+
6+
# Mail
7+
MAIL_DRIVER=ethereal
8+
9+
#Storage
10+
STORAGE_DRIVER=disk
11+
12+
#Redis
13+
REDIS_HOST=localhost
14+
REDIS_PORT=6379
15+
REDIS_PASS=

.eslintrc.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"env": {
33
"es6": true,
4-
"node": true
4+
"node": true,
5+
"jest": true
56
},
67
"extends": [
78
"airbnb-base",
@@ -26,8 +27,13 @@
2627
"error",
2728
{ "argsIgnorePattern": "_" }
2829
],
30+
"@typescript-eslint/interface-name-prefix": [
31+
"error",
32+
{ "prefixWithI": "always" }
33+
],
2934
"prettier/prettier": "error",
30-
"import/extensions": ["error", "ignorePackages", { "ts": "never" }]
35+
"import/extensions": ["error", "ignorePackages", { "ts": "never" }],
36+
"no-useless-constructor": "off"
3137
},
3238
"settings": {
3339
"import/resolver": {

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ buid/
55

66
temp/*
77
!temp/.gitkeep
8+
coverage/
9+
.DS_Store
10+
.env
11+
ormconfig.json

README.md

Lines changed: 171 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,171 @@
1-
# primeiro-projeto-node-ts-gostack-11
1+
<p align="center">
2+
<img src="https://camo.githubusercontent.com/8c13dc2618dbd7f76d1d574350b98fdee1335ce5/68747470733a2f2f726f636b6574736561742d63646e2e73332d73612d656173742d312e616d617a6f6e6177732e636f6d2f626f6f7463616d702d6865616465722e706e67">
3+
</p>
4+
</br>
5+
<p align="center">
6+
<img src="https://github.com/TulioCaz/gobarber-web-aplication/blob/master/src/assets/logo.svg?sanitize=true">
7+
</p>
8+
</br>
9+
10+
<h2 align="center" style="font-weight: bold;">GoBarber - Web Aplication </h2>
11+
12+
</br>
13+
<p align="center">
14+
<img src="https://camo.githubusercontent.com/dda2124efff062e38068943c6e848540387df6e5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d253233303444333631" alt="licenceMIT">
15+
</p>
16+
</br>
17+
18+
## :speech_balloon: Sobre
19+
20+
API GoBarber, aplicação que conecta prestadores de serviço (Barbeiros e Cabeleireiros) aos clientes em suas regiões. Aplicação
21+
montada durante o bootcamp GoStack aplicando todo o conhecimento adquirido durante a jornada. Neste projeto foi utilizada as
22+
melhores práticas na construção do projeto, com o uso das tecnologias TypeScript, Express, TypeORM em cima do Ambiente e execução
23+
de javascript, o NodeJS.
24+
25+
Faz parte do projeto GoBarber
26+
27+
- [Web Aplication](https://github.com/tgmarinho/gobarber-web-aplication): Aplicação Web contruida em ReactJs
28+
- [Mobile Aplication](https://github.com/tgmarinho/gobarber-mobile-aplication): Aplicação Mobile construida em React Native.
29+
30+
## :rocket: Tecnologias
31+
32+
- [TypeScript](https://www.typescriptlang.org/): Linguagem.
33+
- [NodeJs](https://nodejs.org/en/): Ambiente de Execução.
34+
- [Express](https://expressjs.com/): API Framework
35+
- [JsonWebToken](https://github.com/auth0/node-jsonwebtoken): Autenticação JWT
36+
- [Multer](https://github.com/expressjs/multer): Upload de Arquivos
37+
- [Postgres](https://www.postgresql.org/): Banco de Dados
38+
- [TypeORM](https://typeorm.io/#/): ORM
39+
- [Eslint](https://eslint.org/): Padronização de código
40+
- [Jest](https://jestjs.io/): Testes
41+
- [tsyringe](https://github.com/microsoft/tsyringe): Lib de injeção de dependencias. -[uuidv4](https://github.com/thenativeweb/uuidv4#readme): uuid.
42+
43+
:warning: Durante o desenvolvimento irei atualizando a lista de tecnologia
44+
45+
## 🔖 Layout
46+
47+
Uma API Rest, que retorna o conteúdo em JSON que vai ser consumida tanto por um Front-end em [ReactJS](https://reactjs.org/) quanto por uma aplicação Mobile Hibrido com [React Native](https://reactnative.dev/).
48+
49+
### Base da Aplicação.
50+
51+
Requisitos funcionais:
52+
[] 100% de cobertura de testes nos services da aplicação.
53+
[] Tratamento de exceções global
54+
55+
Requisitos Não Funcionais:
56+
- Framework da API - Express
57+
- Linguagem de Programação - TypeScript
58+
- Banco de dados utilizado na aplicação - Postgres
59+
- ORM - TypeORM
60+
- Lib de testes - Jest
61+
- Utilizar Mailtrap para testar envios de email em ambiente de desenvolvimento
62+
- Utilizar Amazon SES para envios de email em ambiente de Produção.
63+
- Utilizar Eslint, Prettier e EditorConfig para padronizar o código em ambiente de desenvolvimento, com a style guide do AirBnb
64+
65+
### Criação de usuário
66+
67+
Requisitos Funcionais:
68+
[x] Criação de conta com (Nome, Email, Senha);
69+
[] Envio de email confirmando criação de conta;
70+
71+
Requisitos Não Funcionais:
72+
- Envio de email utilizando lib Nodemailer;
73+
74+
Regras de Negócio:
75+
[] Não pode ser criado duas contas com o mesmo email;
76+
[] O usuário deve confirmar a senha ao criar uma conta.
77+
[] A senha deve ser Hasheada antes de ser gravada no banco de dados;
78+
79+
### Autenticação
80+
81+
Requisitos Funcionais:
82+
[] O usuário deve poder se Autenticar utilizando email e senha;
83+
84+
Requisitos Não Funcionais:
85+
- A autenticação deve ser feita com Json Web Token (JWT);
86+
87+
Regras de Negócio:
88+
[x] No payload do token deve ser armazenado o ID do usuário;
89+
90+
### Recuperação de Senha
91+
92+
Requisitos Funcionais:
93+
[x] O usuário deve poder recuperar sua senha informando o seu email;
94+
[x] O usuário de receber um email com instruções de recuperação de senha;
95+
[x] O usuário deve poder resetar sua senha ;
96+
97+
Requisitos Não Funcionais:
98+
- Envio de email utilizando lib Nodemailer;
99+
- O envio de email deve acontecer em segundo plano (background job);
100+
101+
102+
Regras de Negócio:
103+
[x] O link enviado por email para resetar a senha, deve expirar em 2h;
104+
[x] O usuário precisa confirmar a nova senha ao resetar sua senha.
105+
106+
### Atualização de Perfil
107+
108+
Requisitos Funcionais:
109+
[] O usuário deve poder atualizar seu perfil (nome, email, senha, Avatar);
110+
111+
Regras de Negócio:
112+
[x] O usuário não pode alterar seu email para um email ja em uso na aplicação
113+
[x] Para atulizar sua senha, o usuário deve informar a senha antiga;
114+
[x] Para atulizar sua senha, o usuário precisa confirmar a senha;
115+
116+
### Painel de usuário (Prestador de serviço)
117+
118+
Requisitos Funcionais:
119+
[] O prestador deve poder listar os seus agendamentos de um dia especifico;
120+
[] O prestador deve poder receber uma notificação sempre que houver um novo agendamento;
121+
[] O prestador deve poder visualizar as notificações não lidas;
122+
123+
124+
Requisitos Não Funcionais:
125+
- Os agendamentos devem ser armazenados em cache.
126+
- As notificações do prestador devem ser armazenadas no MongoDB;
127+
- As notificações do prestador devem ser enviadas em tempo-real utilizando Socket.io;
128+
129+
Regras de Negócio:
130+
[] A notificação deve ter um status de lida ou não-lida para que o prestador possa controlar;
131+
132+
### Agendamento de serviço
133+
134+
Requisitos Funcionais:
135+
[] O usuário deve poder listar todos os prestadores de serviço cadastrados;
136+
[] O usuário deve poder visualizar os dias de um mês com pelo menos um horário disponível de um prestador;
137+
[] O usuário deve poder visualizar os horários disponíveis de um dia especifico de um prestador;
138+
[] O usuário deve poder realizar um novo agendamento com um prestador;
139+
[] O usuário deve poder listar os agendamentos já marcados;
140+
[] O usuário deve poder cancelar um agendamento marcado.
141+
142+
Requisitos Não Funcionais:
143+
- A listagem de prestadores devem ser armazenadas em cache.
144+
145+
Regras de Negócio:
146+
[] Cada agendamento deve durar 1h exatamente;
147+
[] Os agendamentos devem estar disponíveis entre 8h às 18h sendo o último agendamento iniciado as 17h;
148+
[] O usuário não pode agendar em um horário já ocupado;
149+
[] O usuário não pode agendar em um horário que já passou;
150+
[] O usuário não pode agendar consigo mesmo;
151+
152+
---
153+
154+
## :book: **Thiago Marinho**
155+
156+
Desafio realizado por Thiago Marinho de Oliveira.
157+
158+
## tips/scripts
159+
160+
### criar migrations:
161+
162+
- Tem um script no package para auxiliar nisso, uma vez que estamos usando ts.
163+
164+
Terminal: `yarn typeorm migration:create -n CreateAppointments`
165+
166+
- Execugtar migration: `yarn typeorm migration:run`
167+
- Rollback desfazer : `yarn typeorm migration:revert`
168+
169+
Ver quais migrations já foram executadas:
170+
171+
`yarn typeorm migration:show`

0 commit comments

Comments
 (0)