1. Introdução ao REST
1.1. Introdução ao curso
1.2. Como usar o suporte
1.3. O que é SOFEA?
1.4. O que é REST?
1.5. Conhecendo o projeto do curso
1.6. Ambiente de desenvolvimento REST
1.7. Testando APIs com Postman
1.8. Introdução ao protocolo HTTP
2. Fundamentos do REST
2.1. O que é um recurso?
2.2. Representações de um recurso
2.3. Modelo de maturidade Richardson - Nível 0
2.4. Modelo de maturidade Richardson - Nível 1
2.5. Modelo de maturidade Richardson - Nível 2
2.6. Modelo de maturidade Richardson - Nível 3
2.7. HATEOAS
2.8. Segurança de APIs REST
2.9. Idempotência
3. Primeiras consultas e cadastros na API
3.1. Criando o projeto da API
3.2. Conectando ao MySQL
3.3. Migração de dados com Flyway
3.4. Consultando primeiro recurso com GET
3.5. Coleção vazia, o que retornar?
3.6. Cadastrando nova categoria com POST
3.7. Desafio: Retornar 404 caso não exista a categoria
3.8. Validando atributos desconhecidos
3.9. Tratando erros com ExceptionHandler
3.10. Validando valores inválidos com Bean Validation
3.11. Desafio: Criando o cadastro de pessoa
3.12. Usando eventos para adicionar header Location
4. Atualização e remoção de recursos na API
4.1. Removendo pessoa com DELETE
4.2. Sobre atualização de recursos REST
4.3. Atualizando pessoa com PUT
4.4. Implementando atualização parcial com PUT
5. Relacionamentos entre recursos REST
5.1. Criando a migração e entidade de lançamento
5.2. Desafio: Lista e busca de lançamentos
5.3. Desafio: Cadastrando o primeiro lançamento
5.4. Validando inconsistências
5.5. Validando lançamento com Bean Validation
5.6. Regra para não salvar pessoa inativa
5.7. Implementando pesquisa de lançamento com Metamodel
5.8. Desafio: Removendo lançamentos
5.9. Implementando a paginação de lançamentos
6. Segurança da API
6.1. Implementando autenticação Basic
6.2. Fluxo básico do OAuth
6.3. Implementando segurança com OAuth 2 e Password Flow
6.4. JSON Web Tokens - JWT
6.5. Configurando JWT no projeto
6.6. Renovando o access token com o refresh token
6.7. Movendo o refresh token para o cookie
6.8. Movendo o refresh token do cookie para a requisição
6.9. O que é CORS?
6.10. Criando filtro para CORS
6.11. Movendo o usuário para o banco de dados
6.12. Adicionando permissões de acesso
6.13. Desafio: Finalizando permissões de acesso
6.14. Implementando o logout
7. Deploy da API em produção
7.1. Implementando projeção de lançamento
7.2. Profiles do Spring
7.3. Criando a conta no Heroku
7.4. Deploy da API na nuvem
7.5. Nome do usuário no token JWT
7.6. Alternando OAuth 2 e Basic Security com profiles
7.7. Desafio: Pesquisa de pessoa
7.8. Ajustando o CEP
7.9. Desafio: Atualização de lançamento
8. Introdução ao Angular
8.1. O que é Angular?
8.2. AngularJS vs Angular 2/4/X: a confusão das versões
8.3. Instalando o Visual Studio Code
8.4. Introdução ao HTML
8.5. Introdução ao CSS
8.6. Instalando o Node.js e NPM
8.7. Instalando e criando um projeto com Angular CLI
8.8. Abrindo o projeto no VS Code
8.9. Abrindo e executando um exemplo do curso
9. Fundamentos do Angular, componentes e data binding
9.1. Bootstrapping e AppModule
9.2. O que são componentes
9.3. Criando um componente
9.4. Instalando a biblioteca CSS do Bootstrap
9.5. Introdução a data binding
9.6. Usando interpolação
9.7. Usando event binding
9.8. Usando variável de referência
9.9. Usando property binding
9.10. Usando two-way data binding
9.11. Introdução às diretivas
9.12. Exibindo condicionalmente com as diretivas ngIf e hidden
9.13. Iterando com a diretiva ngFor
9.14. Binding de propriedades customizadas com @Input
9.15. Binding de eventos customizados com @Output e EventEmitter
9.16. Adicionando estilos CSS em componentes
9.17. Estilos CSS dinâmicos com ngStyle
9.18. Classes CSS dinâmicas com ngClass
10. Páginas de pesquisa
10.1. Instalando plugins úteis no Visual Studio Code
10.2. Escolhendo uma biblioteca de componentes
10.3. Criando o projeto do curso e instalando o PrimeNG
10.4. Adicionando o formulário de pesquisa de lançamentos
10.5. Adicionando uma tabela de dados
10.6. Customizando colunas com ng-template
10.7. Fazendo paginação de dados
10.8. Adicionando tooltip
10.9. Colocando a tabela de dados responsiva
10.10. Criando o componente de pesquisa de lançamentos
10.11. Criando o componente de barra de navegação
10.12. Adicionando menu intercambiável
10.13. Desafio: criando componente de pesquisa de pessoas
11. Diretivas e pipes
11.1. Criando diretivas customizadas
11.2. Respondendo a eventos do hospedeiro com @HostListener
11.3. Vinculando propriedades do hospedeiro com @HostBinding
11.4. Usando property binding em diretivas customizadas
11.5. Exportando a API da diretiva para o template
11.6. Conhecendo e usando pipes
11.7. Passando parâmetros para pipes
11.8. Desafio: usando pipes
12. Formulários e validação
12.1. Introdução aos formulários
12.2. Template-driven Forms: Criando um formulário
12.3. Registrando os controles do formulário
12.4. Adicionando opções dinâmicas no campo de seleção
12.5. Definindo o valor padrão em campos com ngModel
12.6. Two-way binding com ngModel
12.7. Adicionando validação em formulários
12.8. Exibindo erro de validação do formulário
12.9. Exibindo erro de validação de controles do formulário
12.10. Rastreando o estado em controles do formulário
12.11. Estilizando os campos inválidos com classes CSS do Angular
12.12. Estilizando os campos inválidos com Bootstrap
12.13. Limpando formulários (reset)
13. Páginas de cadastro
13.1. Criando o protótipo do formulário de cadastro de lançamentos
13.2. Adicionando seletor de data (componente Calendar)
13.3. Adicionando botão de seleção
13.4. Adicionando caixa de seleção (componente Dropdown)
13.5. Adicionando máscara de dinheiro com ng2-mask-money
13.6. Desafio: criando o protótipo do formulário de cadastro de pessoa
13.7. Adicionando campo com máscara (componente InputMask)
13.8. Validando controles de formulário com PrimeNG
13.9. Criando componente de mensagem de erro de validação
13.10. Desafio: controles, validações e mensagens de erro
13.11. Desafio: criando mais componentes
14. Módulos do Angular
14.1. Introdução aos módulos
14.2. Criando um módulo e exportando um componente
14.3. Reexportando um módulo
14.4. Criando um componente interno do módulo
14.5. O que são Feature Modules?
14.6. Criando um Feature Module
14.7. Desafio: criando o feature module de pessoas
14.8. O que são Shared Modules?
14.9. Criando um Shared Module
14.10. O que é Core Module?
14.11. Desafio: criando o Core Module
15. Serviços e injeção de dependências
15.1. Introdução aos serviços
15.2. Implementando um serviço
15.3. O que é injeção de dependências?
15.4. Configurando o injetor com provider por classe
15.5. Configurando o injetor com provider por fábrica
15.6. Configurando o injetor com provider por valor e o decorator @Inject
15.7. Injetando serviços dentro de serviços e o decorador @Injectable
15.8. Como funciona o Injetor Hierárquico