- Node.js
- TypeScript
- Eslint
- Celebrate
- Handlebars
- Jsonwebtoken
- Class-Transformer
- MongoDB
- Multer
- Nodemailer
- tsyringe
- Mime
- aws-sdk
- ioredis
- uuidv4
- date-fns
- dotenv
- rate-limiter-flexible
- typeorm
- postgres
- Clone API
git clone https://github.com/iltonkp/gostack-gobarber-backend.git
- Instalando Dependências
yarn
- Configurando .env
cp .env.example .env
#Application
APP_SECRET=
APP_API_URL=http://localhost:3333
APP_WEB_URL=http://localhost:3000
#Mail
#Options: ethereal | ses
MAIL_DRIVER=ethereal
#AWS Credencials
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
#Storage
#Options: disk | s3
STORAGE_DRIVER=disk
#Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
- Configurando Banco de Dados
cp ormconfig.example.json ormconfig.json
[
{
"name": "default",
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "",
"password": "",
"database": "gostack_gobarber",
"entities": ["./src/modules/**/infra/typeorm/entities/*.ts"],
"migrations": ["./src/shared/infra/typeorm/migrations/*.ts"],
"cli": {
"migrationsDir": "./src/shared/infra/typeorm/migrations"
}
},
{
"name": "mongo",
"type": "mongodb",
"url": "<url connection mongodb Atlas>",
"useNewUrlParser": true,
"synchronize": true,
"database": "gobarber",
"useUnifiedTopology": true,
"entities": ["./src/modules/**/infra/typeorm/schemas/*.ts"]
}
]
- Executando Migrations
yarn typeorm migrations:run
- Executando Testes
yarn test
- Iniciando o Servidor
yarn dev:server
Requisitos Funcionais
- O usuário deve poder recuperar sua senha informando o seu e-mail;
- O usuário deve receber um e-mail com as instruções de recuperação de senha;
- O usuário deve poder resetar sua senha;
Requisitos Não Funcionais
- Utilizar Ethereal para testar envios de e-mails em ambiente de dev;
- Utilizar Amazon SES para envios de e-mails em ambiente de Produção;
- O envio de e-mails deve acontecer em segundo plano (background job);
Regras de Negócio
- O link enviado por e-mail para resetar senha, deve expirar em 2 horas;
- O usuário precisa confirmar a nova senha ao resetar sua senha;
Requisitos Funcionais
- O usuário deve poder atualizar seu nome, e-mail e senha;
Regras de Negócio
- O usuário não pode alterar seu e-mail para um e-mail já utilizado;
- Para atualizar sua senha, o usuário deve informar a senha antiga;
- Para atualizar sua senha, o usuário precisa confirmar a nova senha;
Requisitos Funcionais
- O usuário deve poder listar seus agendamentos de um dia específico;
- O prestador deve receber uma notificação sempre que houver um novo agendamento;
- O prestador deve poder visualizar as notificações não lidas;
Requisitos Não Funcionais
- Os agendamentos do prestador no dia devem ser armazenados em cache;
- As notificações do prestador devem ser armazenadas no MongoDB;
- As notificações do prestador devem ser enviadas em tempo-real utilizando Socket.io;
Regras de Negócio
- A notificação deve ter um status de lida e não-lida para que o prestador possa controlar;
Requisitos Funcionais
- O usuário deve poder listar todos os prestadores de serviço cadastrado;
- O usuário deve poder listar os dias de um mês com pelo menos um horário disponível para o prestador de serviços selecionado;
- O usuário deve poder listar horários disponíveis em um dia específico para o prestador de serviçoes selecionado;
- O usuário deve poder realizar um novo agendamento com um prestador de serviços;
Requisitos Não Funcionais
- A listagem de prestadores deve ser armazenada em cache;
Regras de Negócio
- Cada agendamento deve durar 1 hora exatamente;
- Os agendamentos devem estar disponíveis ente 8h as 18h (primeiro as 8h, último as 17h);
- O usuário não pode agendar um horário já ocupado;
- O usuário não pode agendar um horário que já passou;
- O usuário não pode agendar um serviço consigo mesmo;