API em NodeJs usando Typescript, TDD, Clean Architecture, Design Patterns e SOLID principles
- ✅ Recebe uma requisição do tipo POST na rota /api/signup
- ✅ Valida dados obrigatórios name, email, password e passwordConfirmation
- ✅ Valida que password e passwordConfirmation são iguais
- ✅ Valida que o campo email é um e-mail válido
- ✅ Valida se já existe um usuário com o email fornecido
- ✅ Gera uma senha criptografada (essa senha não pode ser descriptografada)
- ✅ Cria uma conta para o usuário com os dados informados, substituindo a senha pela senha criptorafada
- ✅ Gera um token de acesso a partir do ID do usuário
- ✅ Atualiza os dados do usuário com o token de acesso gerado
- ✅ Retorna 200 com o token de acesso e o nome do usuário
- ✅ Retorna erro 404 se a API não existir
- ✅ Retorna erro 400 se name, email, password ou passwordConfirmation não forem fornecidos pelo client
- ✅ Retorna erro 400 se password e passwordConfirmation não forem iguais
- ✅ Retorna erro 400 se o campo email for um e-mail inválido
- ✅ Retorna erro 403 se o email fornecido já estiver em uso
- ✅ Retorna erro 500 se der erro ao tentar gerar uma senha criptografada
- ✅ Retorna erro 500 se der erro ao tentar criar a conta do usuário
- ✅ Retorna erro 500 se der erro ao tentar gerar o token de acesso
- ✅ Retorna erro 500 se der erro ao tentar atualizar o usuário com o token de acesso gerado>
- Single Responsibility Principle (SRP)
- Open Closed Principle (OCP)
- Liskov Substitution Principle (LSP)
- Interface Segregation Principle (ISP)
- Dependency Inversion Principle (DIP)
- Separation of Concerns (SOC)
- Don't Repeat Yourself (DRY)
- You Aren't Gonna Need It (YAGNI)
- Keep It Simple, Silly (KISS)
- Composition Over Inheritance
- Small Commits
- Factory
- Adapter
- Composite
- Decorator
- Proxy
- Dependency Injection
- Abstract Server
- Composition Root
- Builder
- Singleton
- TDD
- Clean Architecture
- DDD
- Conventional Commits
- GitFlow
- Modular Design
- Dependency Diagrams
- Use Cases
- Continuous Integration
- Continuous Delivery
- Continuous Deployment
- NPM
- Typescript
- Git
- Jest
- MongoDb
- Travis CI
- Swagger
- Bcrypt
- JsonWebToken
- Faker
- Coveralls
- Validator
- Express
- Supertest
- Eslint
- Standard Javascript Style
- Sucrase
- Nodemon
- Rimraf
- In-Memory MongoDb Server
- MockDate
- Module-Alias
- Copyfiles
- Npm Check
- Bson ObjectId
- API Rest com Express
- Log de Erro
- Segurança (Hashing, Encryption e Encoding)
- CORS
- Middlewares
- Alias
- Log Personalizado
- Branch
- Reset
- Amend
- Tag
- Stash
- Rebase
- Merge
- POO Avançado
- Interface
- TypeAlias
- Namespace
- Utility Types
- Modularização de Paths
- Configurações
- Build
- Deploy
- Uso de Breakpoints
- Testes Unitários
- Testes de Integração (API Rest)
- Cobertura de Testes
- Test Doubles
- Mocks
- Stubs
- Spies
- Fakes
- Connect e Reconnect
- Collections
- InsertOne e InserMany
- Find, FindOne e FindOneAndUpdate
- DeleteMany
- UpdateOne
- Aggregation (Match, Group, Unwind, Lookup, AddFields, Project, Sort)
- ObjectId
- Upsert e ReturnOriginal
- Push, Divide, Multiply, ArrayElemAt, Cond, Sum
- Filter, Map, Reduce, MergeObjects, ConcatArrays