02.05-criando-um-projeto-spring-boot-com-spring-initializr
02.07-criando-um-controller-com-spring-mvc
02.08-restart-mais-rapido-da-aplicacao-com-devtools
02.09-o-que-e-injecao-de-dependencias
02.11-definindo-beans-com-component
02.12-injetando-dependencias-beans-spring
02.13-usando-configuration-e-bean-para-definir-beans
02.14-conhecendo-os-pontos-de-injecao-e-a-anotacao-autowired
02.15-dependencia-opcional-com-autowired
02.16-ambiguidade-de-beans-e-injecao-de-lista-de-beans
02.17-desambiguacao-de-beans-com-primary
02.18-desambiguacao-de-beans-com-qualifier
02.19-desambiguacao-de-beans-com-anotacao-customizada
02.20-mudando-o-comportamento-da-aplicacao-com-spring-profiles
02.21-criando-metodos-de-callback-do-ciclo-de-vida-dos-beans
02.22-publicando-e-consumindo-eventos-customizados
02.23-configurando-projetos-spring-boot-com-o-application-properties
02.25-criando-e-acessando-propriedades-customizadas-com-value
02.26-acessando-propriedades-com-configuration-properties
02.27-alterando-a-configuracao-do-projeto-dependendo-do-ambiente-com-spring-profiles
03.03-adicionando-jpa-e-configurando-o-datasource
03.04-mapeando-entidades-jpa
03.05-criando-as-tabelas-do-banco-a-partir-das-entidades
03.06-mapeando-o-id-da-entidade-para-autoincremento
03.07-importando-dados-de-teste-com-import-sql
03.08-consultando-objetos-no-banco-de-dados
03.09-adicionando-um-objeto-no-banco-de-dados
03.10-buscando-um-objeto-pelo-id-do-banco-de-dados
03.11-atualizando-um-objeto-no-banco-de-dados
03.12-excluindo-um-objeto-do-banco-de-dados
03.14-conhecendo-e-implementando-o-padrao-repository
03.15-conhecendo-e-usando-o-lombok
03.16-desafio-lombok-e-repositorio-de-restaurantes
03.17-mapeando-relacionamento-com-manytoone
03.18-a-anotacao-joincolumn
03.19-propriedade-nullable-de-column-e-joincolumn
03.20-desafio-mapeando-entidades
04.10-modelando-e-requisitando-um-collection-resource-com-get
04.11-desafio-collection-resource-de-estados
04.13-implementando-content-negotiation-para-retornar-json-ou-xml
04.14-consultando-singleton-resource-com-get-e-pathvariable
04.15-customizando-as-representacoes-xml-e-json-com-jsonignore-jsonproperty-e-jsonrootname
04.16-customizando-a-representacao-em-xml-com-wrapper-e-anotacoes-do-jackson
04.19-definindo-o-status-da-resposta-http-com-responsestatus
04.20-manipulando-a-resposta-http-com-responseentity
04.21-corrigindo-o-status-http-para-resource-inexistente
04.23-modelando-e-implementando-a-inclusao-de-recursos-com-post
04.25-modelando-e-implementando-a-atualizacao-de-recursos-com-put
04.26-modelando-e-implementando-a-exclusao-de-recursos-com-delete/algafood-api
04.27-implementando-a-camada-de-domain-services-e-a-importancia-da-linguagem-ubiqua
04.28-refatorando-a-exclusao-de-cozinhas-para-usar-domain-services
04.29-desafio-modelando-e-implementando-a-consulta-de-recursos-de-restaurantes
04.30-modelando-e-implementando-a-inclusao-de-recursos-de-restaurantes
04.31-modelando-e-implementando-a-atualizacao-de-recursos-de-restaurantes
04.32-desafio-implementando-servicos-rest-de-cidades-e-estados
04.33-analisando-solucao-para-atualizacao-parcial-de-recursos-com-patch
04.34-finalizando-a-atualizacao-parcial-com-a-api-de-reflections-do-spring
05.01-implementando-consultas-jpql-em-repositorios
05.04-refatorando-o-codigo-do-projeto-para-usar-o-repositorio-do-sdj
05.05-desafio-refatorando-todos-os-repositorios-para-usar-sdj
05.06-criando-consultas-com-query-methods
05.07-usando-as-keywords-para-definir-criterios-de-query-methods
05.08-conhecendo-os-prefixos-de-query-methods
05.09-usando-queries-jpql-customizadas-com-query
05.10-externalizando-consultas-jpql-para-um-arquivo-xml
05.11-implementando-um-repositorio-sdj-customizado
05.12-implementando-uma-consulta-dinamica-com-jpql
05.13-implementando-uma-consulta-simples-com-criteria-api
05.14-adicionando-restricoes-na-clausula-where-com-criteria-api
05.15-tornando-a-consulta-com-criteria-api-com-filtros-dinamicos
05.17-implementando-specifications-com-sdj
05.18-criando-uma-fabrica-de-specifications
05.19-injetando-o-proprio-repositorio-na-implementacao-customizada-e-a-anotacao-lazy
05.20-estendendo-o-jpa-repository-para-customizar-o-repositorio-base
06.01-mapeando-relacionamento-bidirecional-com-onetomany
06.02-mapeando-relacionamento-muitos-para-muitos-com-manytomany
06.03-analisando-o-impacto-do-relacionamento-muitos-para-muitos-na-rest-api
06.04-mapeando-classes-incorporaveis-com-embeddable-e-embedded
06.05-testando-e-analisando-o-impacto-da-incorporacao-de-classe-na-rest-api
06.06-mapeando-propriedades-com-creationtimestamp-e-updatetimestamp
06.07-desafio-mapeando-relacionamento-muitos-para-um
06.08-desafio-mapeando-relacionamento-um-para-muitos
06.09-desafio-mapeando-relacionamentos-muitos-para-muitos
06.12-alterando-a-estrategia-de-fetching-para-lazy-loading
06.13-alterando-a-estrategia-de-fetching-para-eager-loading
06.14-resolvendo-o-problema-do-n-1-com-fetch-join-na-jpql
07.06-adicionando-flyway-no-projeto-e-criando-a-primeira-migracao
07.07-evoluindo-o-banco-de-dados-com-novas-migracoes
07.08-criando-migracoes-complexas-com-remanejamento-de-dados
07.09-criando-migracao-a-partir-de-ddl-gerado-por-schema-generation
07.10.adicionando-dados-de-testes-com-callback-do-flyway
07.11-reparando-migracoes-com-erros
07.12-desafio-criando-migracoes-e-mapeando-as-entidades-pedido-e-itempedido
08.02-lancando-excecoes-customizadas-anotadas-com-responsestatus
08.03-lancando-excecoes-do-tipo-responsestatusexception
08.04-estendendo-responsestatusexception
08.05-simplificando-o-codigo-com-o-uso-de-responsestatus-em-exceptions
08.06-desafio-refatorando-os-servicos-rest
08.08-criando-a-exception-negocioexception
08.09-desafio-usando-a-exception-negocioexception
08.10-afinando-a-granularidade-e-definindo-a-hierarquia-das-exceptions-de-negocios
08.11-desafio-lancando-exceptions-de-granularidade-fina
08.12-tratando-excecoes-em-nivel-de-controlador-com-exceptionhandler
08.13-tratando-excecoes-globais-com-exceptionhandler-e-controlleradvice
08.14-desafio-implementando-exception-handler
08.15-criando-um-exception-handler-global-com-responseentityexceptionhandler
08.16-customizando-o-corpo-da-resposta-padrao-de-responseentityexceptionhandler
08.18-padronizando-o-formato-de-problemas-no-corpo-de-respostas-com-a-rfc7807
08.19-desafio-usando-o-formato-de-problemas-no-corpo-de-respostas
08.20-customizando-exception-handlers-de-responseentityexceptionhandler
08.21-habilitando-lancamento-de-exceptions-para-propriedades-desconhecidas-ou-ignoradas
08.22-habilitando-erros-na-desserializacao-de-propriedades-inexistentes-ou-ignoradas
08.23-desafio-tratando-propertybindingexception-na-desserializacao
08.24-lancando-exception-de-desserializacao-na-atualizacao-parcial-patch
08.25-desafio-tratando-exception-de-parametro-de-url-invalido
08.26-desafio-tratando-a-excecao-nohandlerfoundexception
08.27-desafio-tratando-outras-excecoes-nao-capturadas
08.28-estendendo-o-formato-do-problema-para-adicionar-novas-propriedades
08.29-desafio-estendendo-o-formato-do-problema
09.02-adicionando-constraints-e-validando-no-controller-com-valid
09.03-desafio-tratando-exception-de-violacao-de-constraints-de-validacao
09.04-estendendo-o-problem-details-para-adicionar-as-propriedades-com-constraints-violadas
09.05-conhecendo-e-adicionando-mais-constraints-de-validacao-no-modelo
09.06-validando-as-associacoes-de-uma-entidade-em-cascata
09.07-agrupando-e-restringindo-constraints-que-devem-ser-usadas-na-validacao
09.08-convertendo-grupos-de-constraints-para-validacao-em-cascata-com-convertgroup
09.09-desafio-adicionando-constraints-de-validacao-no-modelo
09.10-customizando-mensagens-de-validacao-na-anotacao-da-constraint
09.11-customizando-e-resolvendo-mensagens-de-validacao-globais-em-resource-bundle
09.12-desafio-customizando-mensagens-de-validacao
09.13-resolvendo-mensagens-de-validacao-com-resource-bundle-do-bean-validation
09.14-usando-o-resource-bundle-do-spring-como-resource-bundle-do-bean-validation
09.15-criando-constraints-de-validacao-customizadas-usando-composicao
09.16-criando-constraints-de-validacao-customizadas-com-implementacao-de-constraintvalidator
09.17-criando-constraints-de-validacao-customizadas-em-nivel-de-classe
09.18-ajustando-exception-handler-para-adicionar-mensagens-de-validacao-em-nivel-de-classe
09.19-executando-processo-de-validacao-programaticamente
09.20-desafio-tratando-a-exception-customizada-de-validacoes-programaticas
10.03-criando-e-rodando-um-teste-de-integracao-com-spring-boot-junit-e-assertj
10.03-criando-e-rodando-um-teste-de-integracao-com-spring-boot-junit-e-assertj_spring-boot-2.5.0-junit-5
10.04-escrevendo-bons-nomes-de-testes
10.05-desafio-escrevendo-testes-de-integracao
10.07-configurando-maven-failsafe-plugin-no-projeto
10.08-implementando-testes-de-api-com-rest-assured-e-validando-o-codigo-de-status-http
10.09-validando-o-corpo-da-resposta-http
10.10-criando-um-metodo-para-fazer-setup-dos-testes
10.10-criando-um-metodo-para-fazer-setup-dos-testes_spring-boot-2.5.0-junit-5
10.11-entendendo-o-problema-da-ordem-de-execucao-dos-testes
10.12-voltando-o-estado-inicial-do-banco-de-dados-para-cada-execucao-de-teste-com-callback-do-flyway
10.13-configurando-um-banco-de-testes-e-usando-testpropertysource
10.14-limpando-e-populando-o-banco-de-dados-de-teste
10.15-testando-endpoint-passando-parametro-de-url
10.16-desafio-refatorando-o-codigo-de-testes
10.17-desafio-escrevendo-testes-de-api
11.01-analisando-e-definindo-melhor-o-escopo-das-transacoes
11.02-refinando-o-payload-de-cadastro-com-jsonignoreproperties
11.03-criando-classes-de-mixin-para-usar-as-anotacoes-do-jackson
11.04-desafio-usando-jsonignoreproperties-e-jackson-mixin
11.07-configurando-e-refatorando-o-projeto-para-usar-utc
11.08-desafio-refatorando-o-codigo-para-usar-offsetdatetime
11.09-isolando-o-domain-model-do-representation-model-com-o-padrao-dto
11.10-implementando-a-conversao-de-entidade-para-dto
11.11-criando-dtos-para-entrada-de-dados-na-api
11.12-reftorando-e-criando-um-assembler-de-dto
11.13-desafio-refatorando-e-criando-um-disassembler-do-dto
11.14-adicionando-e-usando-o-modelmapper
11.15-entendendo-a-estrategia-padrao-do-modelmapper-para-correspondencia-de-propriedades
11.16-customizando-o-mapeamento-de-propriedades-com-modelmapper
11.17-mapeando-para-uma-instancia-destino-e-nao-um-tipo-com-modelmapper
11.18-revisando-e-ajustando-as-mensagens-de-validacao-com-o-uso-de-dtos
11.19-estrategias-de-nomes-de-propriedades-snake-case-vs-lower-camel-case
11.20-desafio-usando-dtos-como-representation-model
11.21-corrigindo-bug-de-tratamento-de-exception-de-integridade-de-dados-com-flush-do-jpa
12.04-implementando-os-endpoints-de-ativacao-e-inativacao-de-restaurantes
12.05-desafio-implementando-os-endpoints-de-formas-de-pagamento
12.06-adicionando-endereco-no-modelo-da-representacao-do-recurso-de-restaurante
12.07-refatorando-servico-de-cadastro-de-restaurante-para-incluir-endereco
12.08-desafio-implementando-os-endpoints-de-grupos
12.09-desafio-implementando-os-endpoints-de-usuarios
12.11-implementando-regra-de-negocio-para-evitar-usuarios-com-emails-duplicados
12.12-implementando-os-endpoints-de-associacao-de-formas-de-pagamento-em-restaurantes
12.13-desafio-implementando-os-endpoints-de-produtos
12.14-desafio-implementando-os-endpoints-de-abertura-e-fechamento-de-restaurantes
12.15-desafio-implementando-os-endpoints-de-associacao-de-grupos-com-permissoes
12.16-desafio-implementando-os-endpoints-de-associacao-de-usuarios-com-grupos
12.17-desafio-implementando-endpoints-de-associacao-de-usuarios-responsaveis-com-restaurante
12.18-implementando-ativacao-e-inativacao-em-massa-de-restaurantes
12.19-desafio-implementando-os-endpoints-de-consulta-de-pedidos
12.20-otimizando-a-query-de-pedidos-e-retornando-model-resumido-na-listagem
12.21-desafio-implementando-o-endpoint-de-emissao-de-pedidos
12.22-implementando-endpoint-de-transicao-de-status-de-pedidos
12.23-desafio-implementando-endpoints-de-transicao-de-status-de-pedidos
12.24-refatorando-o-codigo-de-regras-para-transicao-de-status-de-pedidos
12.25-usando-ids-vs-uuids-nas-uris-de-recursos
13.01-fazendo-projecao-de-recursos-com-jsonview-do-jackson
13.02-limitando-os-campos-retornados-pela-api-com-jsonfilter-do-jackson
13.03-limitando-os-campos-retornados-pela-api-com-squiggly
13.04-implementando-pesquisas-simples-na-api
13.06-implementando-pesquisas-complexas-na-api
13.07-tratando-bindexception-ao-enviar-parametros-de-url-invalidos
13.08-implementando-paginacao-e-ordenacao-em-recursos-de-colecao-da-api
13.09-desafio-implemetando-paginacao-e-ordenacao-de-pedidos
13.10-implementando-jsonserializer-para-customizar-representacao-de-paginacao
13.11-implementando-um-conversor-de-propriedades-de-ordenacao
13.12-discutindo-sobre-onde-implementar-as-consultas-com-dados-agregados
13.14-implementando-consulta-com-dados-agregados-de-vendas-diarias
13.15-desafio-adicionando-os-filtros-na-consulta-de-vendas-diarias
13.16-tratando-time-offset-na-agregacao-de-vendas-diarias-por-data
13.18-criando-um-layout-do-relatorio-jasperreports-de-vendas-diarias
13.19-estruturando-o-endpoint-e-servico-de-emissao-de-relatorio-em-pdf
13.20-preenchendo-um-relatorio-jasperreports-com-javabeans-e-gerando-bytes-do-pdf
14.02-implementando-upload-de-arquivo-com-multipart-form-data
14.03-validando-o-tamanho-maximo-do-arquivo
14.04-desafio-validando-o-content-type-do-arquivo
14.05-mapeando-entidade-fotoproduto-e-relacionamento-um-para-um
14.06-implementando-servico-de-cadastro-de-foto-de-produto
14.07-excluindo-e-substituindo-cadastro-de-foto-de-produto
14.08-implementando-o-servico-de-armazenagem-de-fotos-no-disco-local
14.09-integrando-o-servico-de-catalogo-de-fotos-com-o-servico-de-armazenagem
14.10-implementando-a-remocao-e-substituicao-de-arquivos-de-fotos-no-servico-de-armazenagem
14.11-desafio-implementando-recuperacao-de-foto-no-servico-de-armazenagem
14.12-desafio-implementando-endpoint-de-consulta-de-foto-de-produto
14.13-servindo-arquivos-de-fotos-pela-api
14.14-checando-media-type-ao-servir-arquivos-de-fotos
14.15-desafio-implementando-endpoint-de-exclusao-de-foto-de-produto
14.16-corrigindo-exception-handler-de-media-type-nao-aceita
14.17-amazon-s3-conhecendo-o-servico-de-storage-da-aws
14.20-criando-bean-de-propriedades-de-configuracao-dos-servicos-de-storage
14.21-adicionando-o-sdk-java-da-amazon-s3-no-projeto-e-criando-a-classe-da-implementacao-do-servico-de-storage
14.22-definindo-bean-do-client-da-amazon-s3-e-configurando-credenciais
14.23-implementando-a-inclusao-de-objetos-no-bucket-da-amazon-s3
14.24-desafio-implementando-a-exclusao-de-objetos-do-bucket-da-amazon-s3
14.25-implementando-a-recuperacao-de-foto-no-servico-de-storage-do-s3
14.26-selecionando-a-implementacao-do-servico-de-storage-de-fotos
15.02-configurando-o-projeto-para-envio-de-emails-usando-servidor-smtp
15.03-implementando-o-servico-de-infraestrutura-de-envio-de-emails-com-spring
15.04-usando-o-servico-de-envio-de-emails-na-confirmacao-de-pedidos
15.05-processando-template-do-corpo-de-emails-com-apache-freemarker
15.06-melhorando-o-texto-do-email-com-ftl-freemarker-template-language
15.07-formatando-valores-monetarios-com-ftl
15.08-desafio-implementando-servico-de-envio-de-email-fake
15.09-desafio-implementando-servico-de-envio-de-email-sandbox
15.11-publicando-domain-events-a-partir-do-aggregate-root
15.12-observando-e-reagindo-a-domain-events
15.13-reagindo-a-domain-events-em-fases-especificas-da-transacao
15.14-desafio-enviando-emails-no-cancelamento-de-pedidos
16.01-implementando-uma-chamada-na-rest-api-com-javascript
16.03-entendendo-o-funcionamento-basico-de-cors-e-habilitando-na-api
16.04-habilitando-cors-em-controladores-e-metodos-com-crossorigin
16.05-entendendo-o-funcionamento-de-preflight-do-cors
16.06-habilitando-cors-globalmente-no-projeto-da-api
16.07-desafio-implementando-uma-requisicao-get-com-javascript
16.08-implementando-formulario-de-cadastro-e-fazendo-requisicao-post-com-javascript
16.09-desafio-implementando-uma-requisicao-delete-com-javascript
16.10-implementando-um-client-da-rest-api-com-java-e-spring-resttemplate
16.11-tratando-respostas-com-codigo-de-erro-no-client-java
16.12-desafio-implementando-uma-requisicao-post-no-client-java
17.02-habilitando-o-cache-com-o-cabecalho-cache-control-e-a-diretiva-max-age
17.03-desafio-adicionando-o-cabecalho-cache-control-na-resposta
17.05-implementando-requisicoes-condicionais-com-shallow-etags
17.06-adicionando-outras-diretivas-de-cache-control-na-resposta-http
17.08-entendendo-e-preparando-a-implementacao-de-deep-etags
17.09-implementando-requisicoes-condicionais-com-deep-etags
17.10-desafio-implementando-requisicoes-condicionais-com-deep-etags
18.03-gerando-a-definicao-openapi-em-json-com-springfox-update
18.03-gerando-a-definicao-openapi-em-json-com-springfox
18.04-gerando-a-documentacao-da-api-em-html-com-swagger-ui-e-springfox-update
18.04-gerando-a-documentacao-da-api-em-html-com-swagger-ui-e-springfox
18.05-selecionando-os-endpoints-da-api-para-gerar-a-documentacao-update
18.05-selecionando-os-endpoints-da-api-para-gerar-a-documentacao
18.06-descrevendo-informacoes-da-api-na-documentacao-update
18.06-descrevendo-informacoes-da-api-na-documentacao
18.07-descrevendo-tags-na-documentacao-e-associando-com-controllers-update
18.07-descrevendo-tags-na-documentacao-e-associando-com-controllers
18.08-descrevendo-as-operacoes-de-endpoints-na-documentacao-update
18.08-descrevendo-as-operacoes-de-endpoints-na-documentacao
18.09-descrevendo-parametros-de-entrada-na-documentacao-update
18.09-descrevendo-parametros-de-entrada-na-documentacao
18.10-descrevendo-modelos-de-representacoes-e-suas-propriedades-update
18.10-descrevendo-modelos-de-representacoes-e-suas-propriedades
18.11-descrevendo-restricoes-de-validacao-de-propriedades-do-modelo-update
18.11-descrevendo-restricoes-de-validacao-de-propriedades-do-modelo
18.12-descrevendo-codigos-de-status-de-respostas-de-forma-global-update
18.12-descrevendo-codigos-de-status-de-respostas-de-forma-global
18.13-desafio-descrevendo-codigos-de-status-de-respostas-de-forma-global-update
18.13-desafio-descrevendo-codigos-de-status-de-respostas-de-forma-global
18.14-descrevendo-o-modelo-de-representacao-de-problema-update
18.14-descrevendo-o-modelo-de-representacao-de-problema
18.15-referenciando-modelo-de-representacao-de-problema-com-codigos-de-status-de-erro-update
18.15-referenciando-modelo-de-representacao-de-problema-com-codigos-de-status-de-erro
18.16-descrevendo-codigos-de-status-de-respostas-em-endpoints-especificos-update
18.16-descrevendo-codigos-de-status-de-respostas-em-endpoints-especificos
18.17-desacoplando-anotacoes-do-swagger-dos-controladores-update
18.17-desacoplando-anotacoes-do-swagger-dos-controladores
18.18-desafio-descrevendo-documentacao-de-endpoints-de-grupos-update
18.18-desafio-descrevendo-documentacao-de-endpoints-de-grupos
18.19-descrevendo-media-type-da-resposta-nos-endpoints-update
18.19-descrevendo-media-type-da-resposta-nos-endpoints
18.20-corrigindo-documentacao-com-substituicao-de-pageable-update
18.20-corrigindo-documentacao-com-substituicao-de-pageable
18.21-corrigindo-documentacao-com-substituicao-de-page-update
18.21-corrigindo-documentacao-com-substituicao-de-page
18.22-desafio-descrevendo-documentacao-de-endpoints-de-cozinhas
18.23-ignorando-tipos-de-parametros-de-operacoes-na-documentacao-update
18.23-ignorando-tipos-de-parametros-de-operacoes-na-documentacao
18.24-desafio-descrevendo-documentacao-de-endpoints-de-formas-de-pagamento-update
18.24-desafio-descrevendo-documentacao-de-endpoints-de-formas-de-pagamento
18.25-descrevendo-parametros-globais-em-operacoes-update
18.25-descrevendo-parametros-globais-em-operacoes
18.26-descrevendo-parametros-implicitos-em-operacoes-update
18.26-descrevendo-parametros-implicitos-em-operacoes
18.27-desafio-descrevendo-documentacao-de-endpoints-de-pedidos-update
18.27-desafio-descrevendo-documentacao-de-endpoints-de-pedidos
18.28-descrevendo-parametros-de-projecoes-em-endpoints-de-consultas-update
18.28-descrevendo-parametros-de-projecoes-em-endpoints-de-consultas
18.29-desafio-descrevendo-documentacao-de-endpoints-de-restaurantes-update
18.29-desafio-descrevendo-documentacao-de-endpoints-de-restaurantes
18.30-desafio-desrevendo-documentacao-de-endpoints-de-estados-update
18.30-desafio-desrevendo-documentacao-de-endpoints-de-estados
18.31-desafio-descrevendo-documentacao-de-endpoints-de-fluxo-de-pedidos-update
18.31-desafio-descrevendo-documentacao-de-endpoints-de-fluxo-de-pedidos
18.32-desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-restaurantes-com-usuarios-update
18.32-desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-restaurantes-com-usuarios
18.33-desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-restaurantes-com-usuarios-update
18.33-desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-restaurantes-com-usuarios
18.34-desafio-descrevendo-documentacao-de-endpoints-de-produtos-update
18.34-desafio-descrevendo-documentacao-de-endpoints-de-produtos
18.35-desafio-descrevendo-documentacao-de-endpoints-de-fotos-de-produtos-update
18.35-desafio-descrevendo-documentacao-de-endpoints-de-fotos-de-produtos
18.36-corrigindo-documentacao-no-swagger-ui-para-upload-de-arquivos-update
18.36-corrigindo-documentacao-no-swagger-ui-para-upload-de-arquivos
18.37-desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-permissoes-com-grupos-update
18.37-desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-permissoes-com-grupos
18.38-desafio-descrevendo-documentacao-de-endpoints-de-usuarios-update
18.38-desafio-descrevendo-documentacao-de-endpoints-de-usuarios
18.39-desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-grupos-com-usuarios-update
18.39-desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-grupos-com-usuarios
18.40-desafio-descrevendo-documentacao-de-endpoint-de-estatisticas-update
18.40-desafio-descrevendo-documentacao-de-endpoint-de-estatisticas
19.02-adicionando-a-uri-do-recurso-criado-no-header-da-resposta-update
19.02-adicionando-a-uri-do-recurso-criado-no-header-da-resposta
19.03-adicionando-o-spring-hateoas-no-projeto-update
19.03-adicionando-o-spring-hateoas-no-projeto
19.04-atualizando-o-projeto-para-spring-boot-2.2-spring-hateoas-1.0-update
19.04-atualizando-o-projeto-para-spring-boot-2.2-spring-hateoas-1.0
19.05-resolvendo-conflito-de-dependencias-com-spring-hateoas-e-springfox-update
19.05-resolvendo-conflito-de-dependencias-com-spring-hateoas-e-springfox
19.07-adicionando-hypermedia-na-representacao-de-recurso-unico-com-hal-update
19.07-adicionando-hypermedia-na-representacao-de-recurso-unico-com-hal
19.08-construindo-links-dinamicos-com-webmvclinkbuilder-update
19.08-construindo-links-dinamicos-com-webmvclinkbuilder
19.09-construindo-links-que-apontam-para-metodos-update
19.09-construindo-links-que-apontam-para-metodos
19.10-adicionando-hypermedia-na-representacao-de-recursos-de-colecao-update
19.10-adicionando-hypermedia-na-representacao-de-recursos-de-colecao
19.11-montando-modelo-de-representacao-com-representationmodelassembler-update
19.11-montando-modelo-de-representacao-com-representationmodelassembler
19.12-desafio-adicionando-hypermedia-nos-recursos-de-usuarios-update
19.12-desafio-adicionando-hypermedia-nos-recursos-de-usuarios
19.13-corrigindo-link-de-colecao-de-recurso-de-responsaveis-por-restaurante-update
19.13-corrigindo-link-de-colecao-de-recurso-de-responsaveis-por-restaurante
19.14-desafio-adicionando-hypermedia-nos-recursos-de-estados-update
19.14-desafio-adicionando-hypermedia-nos-recursos-de-estados
19.15-adicionando-hypermedia-em-recursos-com-paginacao-update
19.15-adicionando-hypermedia-em-recursos-com-paginacao
19.16-desafio-adicionando-hypermedia-em-recursos-de-pedidos-paginacao-update
19.16-desafio-adicionando-hypermedia-em-recursos-de-pedidos-paginacao
19.17-corrigindo-links-de-paginacao-com-ordenacao-update
19.17-corrigindo-links-de-paginacao-com-ordenacao
19.18-adicionando-links-com-template-variables-update
19.18-adicionando-links-com-template-variables
19.19-desafio-adicionando-template-variables-do-filtro-de-pedidos-update
19.19-desafio-adicionando-template-variables-do-filtro-de-pedidos
19.20-refatorando-construcao-e-inclusao-de-links-em-representation-model-update
19.20-refatorando-construcao-e-inclusao-de-links-em-representation-model
19.21-desafio-refatorando-construcao-e-inclusao-de-links-update
19.21-desafio-refatorando-construcao-e-inclusao-de-links
19.22-adicionando-links-de-transicoes-de-status-de-pedidos-update
19.22-adicionando-links-de-transicoes-de-status-de-pedidos
19.23-adicionando-links-condicionalmente-update
19.23-adicionando-links-condicionalmente
19.24-desafio-adicionando-hypermedia-nos-recursos-de-restaurantes-update
19.24-desafio-adicionando-hypermedia-nos-recursos-de-restaurantes
19.25-desafio-adicionando-links-condicionais-no-recurso-de-restaurante-update
19.25-desafio-adicionando-links-condicionais-no-recurso-de-restaurante
19.26-desafio-adicionando-template-variable-de-projecao-de-restaurantes-update
19.26-desafio-adicionando-template-variable-de-projecao-de-restaurantes
19.27-desafio-adicionando-hypermedia-nos-recursos-de-formas-de-pagamento-update
19.27-desafio-adicionando-hypermedia-nos-recursos-de-formas-de-pagamento
19.28-adicionando-links-com-template-variable-de-caminho-para-associacao-de-formas-de-pagamento-com-restaurante-update
19.28-adicionando-links-com-template-variable-de-caminho-para-associacao-de-formas-de-pagamento-com-restaurante
19.29-adicionando-links-com-template-variable-de-caminho-para-associacao-de-formas-de-pagamento-com-restaurante-update
19.29-adicionando-links-com-template-variable-de-caminho-para-associacao-de-formas-de-pagamento-com-restaurante
19.30-desafio-adicionando-links-de-associacao-de-restaurantes-com-responsaveis-update
19.30-desafio-adicionando-links-de-associacao-de-restaurantes-com-responsaveis
19.31-desafio-adicionando-hypermedia-nos-recursos-de-produtos-update
19.31-desafio-adicionando-hypermedia-nos-recursos-de-produtos
19.32-desafio-adicionando-links-para-recurso-de-foto-de-produto-update
19.32-desafio-adicionando-links-para-recurso-de-foto-de-produto
19.33-desafio-adicionando-hypermedia-nos-recursos-de-grupos-update
19.33-desafio-adicionando-hypermedia-nos-recursos-de-grupos
19.34-desafio-adicionando-links-de-associacao-de-grupos-com-permissoes-update
19.34-desafio-adicionando-links-de-associacao-de-grupos-com-permissoes
19.35-desafio-adicionando-links-de-associacao-de-usuarios-com-grupos-update
19.35-desafio-adicionando-links-de-associacao-de-usuarios-com-grupos
19.36-implementando-o-root-entry-point-da-api-update
19.36-implementando-o-root-entry-point-da-api
19.37-desafio-implementando-endpoint-com-links-de-recursos-de-estatisticas-update
19.37-desafio-implementando-endpoint-com-links-de-recursos-de-estatisticas
19.38-comprimindo-as-respostas-http-com-gzip-update
19.38-comprimindo-as-respostas-http-com-gzip
19.39-corrigindo-as-propriedades-de-links-na-documentacao-update
19.39-corrigindo-as-propriedades-de-links-na-documentacao
19.40-corrigindo-a-documentacao-dos-endpoints-de-cidades-update
19.40-corrigindo-a-documentacao-dos-endpoints-de-cidades
19.41-corrigindo-a-paginacao-na-documentacao-update
19.41-corrigindo-a-paginacao-na-documentacao
19.42-desafio-corrigindo-a-documentacao-dos-endpoints-de-estados-update
19.42-desafio-corrigindo-a-documentacao-dos-endpoints-de-estados
19.43-desafio-corrigindo-a-documentacao-dos-endpoints-de-formas-de-pagamento-update
19.43-desafio-corrigindo-a-documentacao-dos-endpoints-de-formas-de-pagamento
19.44-desafio-corrigindo-a-documentacao-dos-endpoints-de-grupos-update
19.44-desafio-corrigindo-a-documentacao-dos-endpoints-de-grupos
19.45-desafio-corrigindo-a-documentacao-dos-endpoints-de-pedidos-paginacao-update
19.45-desafio-corrigindo-a-documentacao-dos-endpoints-de-pedidos-paginacao
19.46-desafio-corrigindo-a-documentacao-dos-endpoints-de-produtos-update
19.46-desafio-corrigindo-a-documentacao-dos-endpoints-de-produtos
19.47-desafio-corrigindo-a-documentacao-dos-endpoints-de-restaurantes-e-usuarios-update
19.47-desafio-corrigindo-a-documentacao-dos-endpoints-de-restaurantes-e-usuarios
19.48-removendo-modelo-de-representacao-inutilizado-da-documentacao-update
19.48-removendo-modelo-de-representacao-inutilizado-da-documentacao
20.10-preparando-o-projeto-para-versionamento-da-api-por-media-type-update
20.10-preparando-o-projeto-para-versionamento-da-api-por-media-type
20.11-implementando-o-versionamento-da-api-por-media-type-update
20.11-implementando-o-versionamento-da-api-por-media-type
20.12-definindo-a-versao-padrao-da-api-quando-o-media-type-nao-e-informado-update
20.12-definindo-a-versao-padrao-da-api-quando-o-media-type-nao-e-informado
20.13-implementando-o-versionamento-da-api-por-uri-update
20.13-implementando-o-versionamento-da-api-por-uri
20.14-desafio-refatorando-controladores-para-adicionar-v1-nas-uris-update
20.14-desafio-refatorando-controladores-para-adicionar-v1-nas-uris
20.15-desafio-adicionando-os-recursos-de-cozinhas-na-v2-da-api-update
20.15-desafio-adicionando-os-recursos-de-cozinhas-na-v2-da-api
20.16-gerando-documentacao-das-versoes-da-api-com-springfox-e-swagger-ui-update
20.16-gerando-documentacao-das-versoes-da-api-com-springfox-e-swagger-ui
20.17-desafio-revisando-documentacao-v2-da-api-update
20.17-desafio-revisando-documentacao-v2-da-api
20.18-depreciando-uma-versao-da-api-update
20.18-depreciando-uma-versao-da-api
20.19-desligando-uma-versao-da-api-update
20.19-desligando-uma-versao-da-api
21.01-introducao-ao-logback-e-slf4j
21.02-desafio-registrando-logs-de-exceptions-nao-tratadas
21.04-configurando-o-appender-do-loggly-no-logback
21.05-configurando-o-logback-para-alternar-as-configuracoes-por-spring-profiles
22.02-adicionando-seguranca-na-api-com-spring-security
22.03-configurando-spring-security-com-http-basic
22.04-configurando-autenticacao-de-usuarios-em-memoria
22.08-criando-o-projeto-do-authorization-server-com-spring-security-oauth2
22.09-configurando-o-authorization-server-com-o-fluxo-password-credentials-e-opaque-tokens
22.10-configurando-o-endpoint-de-introspeccao-de-tokens-no-authorization-server
22.11-configurando-o-resource-server-com-a-nova-stack-do-spring-security
22.13-configurando-o-refresh-token-grant-type-no-authorization-server
22.14-configurando-a-validade-e-nao-reutilizacao-de-refresh-tokens
22.16-configurando-o-client-credentials-grant-type-no-authorization-server
22.18-configurando-o-authorization-code-grant-type
22.19-testando-o-fluxo-authorization-code-com-um-client-javascript
22.20-configurando-o-fluxo-implicit-grant-type
22.23-implementando-o-suporte-a-pkce-com-o-fluxo-authorization-code
22.24-testando-o-fluxo-authorization-code-com-pkce-com-o-metodo-plain
22.26-testando-um-cliente-javascript-com-pkce-e-authorization-code
23.02-configurando-o-redistokenstore
23.05-gerando-jwt-com-chave-simetrica-hmac-sha-256-no-authorization-server
23.06-configurando-o-resource-server-para-jwt-assinado-com-chave-simetrica
23.09-assinando-o-jwt-com-rsa-sha-256-chave-assimetrica
23.10-desafio-criando-bean-de-propriedades-de-configuracao-do-keystore
23.12-configurando-a-validacao-de-jwt-no-resource-server-com-a-chave-publica
23.13-revisando-o-fluxo-de-aprovacao-do-authorization-code-com-jwt
23.14-autenticando-usuario-com-dados-do-banco-de-dados
23.15-desafio-refatorando-servicos-de-usuarios-para-usar-bcrypt
23.16-adicionando-claims-customizadas-no-payload-do-jwt
23.17-obtendo-usuario-autenticado-do-resource-server
23.18-definindo-e-criando-as-permissoes-de-acesso
23.19-carregando-as-permissoes-concedidas-na-autenticacao
23.20-carregando-as-granted-authorities-e-restringindo-acesso-a-endpoints-da-api
23.21-method-security-restringindo-acesso-com-preauthorize-e-spel
23.22-desafio-tratando-accessdeniedexception-no-exceptionhandler
23.23-simplificando-o-controle-de-acesso-em-metodos-com-meta-anotacoes
23.25-carregando-granted-authorities-dos-escopos-do-oauth2-no-resource-server
23.26-restringindo-acesso-a-endpoints-por-escopos-do-oauth2
23.27-desafio-restringindo-acesso-dos-endpoints-de-restaurantes
23.28-restringindo-acessos-de-forma-contextual-sensivel-a-informacao
23.29-restringindo-acessos-com-postauthorize
23.30-desafio-restringindo-acessos-ao-endpoints-de-pesquisa-de-pedidos
23.31-desafio-restringindo-acessos-aos-endpoints-de-transicao-de-status-de-pedidos
23.32-desafio-restringindo-acessos-aos-endpoints-de-formas-de-pagamentos
23.33-desafio-restringindo-acessos-aos-endpoints-de-cidades-e-estados
23.34-desafio-restringindo-acessos-aos-endpoints-de-usuarios-grupos-e-permissoes
23.35-desafio-restringindo-acessos-aos-endpoints-de-estatisticas
23.36-configurando-os-clientes-oauth2-em-um-banco-de-dados-sql
23.37-cadastrando-clientes-oauth2-no-banco-de-dados-e-testando-a-emissao-de-tokens
23.38-corrigindo-logica-de-restricao-de-acessos-para-client-credentials-flow
23.39-gerando-links-do-hal-dinamicamente-de-acordo-com-permissoes-do-usuario
23.40-desafio-gerando-links-do-hal-dinamicamente-de-acordo-com-permissoes
23.41-juntando-o-resource-server-com-o-authorization-server-no-mesmo-projeto
23.42-ajustando-a-documentacao-da-api-para-suporte-a-oauth2
23.43-customizando-a-pagina-de-login
23.44-customizando-a-pagina-de-oauth2-approval
23.45-implementando-o-endpoint-do-json-web-key-set-jwks
23.46-externalizando-o-keystore-criando-um-protocolresolver-para-base64-update
23.46-externalizando-o-keystore-criando-um-protocolresolver-para-base64
24.09-construindo-a-imagem-da-aplicacao-com-dockerfile
24.13.conhecendo-e-usando-docker-compose
24.14-controlando-a-ordem-de-inicializacao-com-wait-for-it
24.15-escalando-um-servico-com-docker-compose
24.16-entendendo-o-poor-mans-load-balancer-dns-round-robin
24.17-configurando-um-proxy-reverso-com-nginx
24.19-adicionando-um-container-do-redis-no-arquivo-do-docker-compose
24.20-configurando-o-spring-session-data-redis
24.21-resolvendo-problemas-com-storage-de-authorization-codes
25.02-mais-organizacao-das-propriedades-do-projeto-com-spring-profiles
25.03-dependencia-de-javamailsender-nao-satisfeita-melhorando-o-uso-da-heranca
25.27-configurando-o-protocolo-https-nos-links-da-api-com-hateoas
26.02-removendo-springfox
26.03-adicionando-springdoc-no-projeto
26.04-configurando-multiplas-documentacoes-em-um-projeto
26.05-adicionado-login-com-oauth2-no-swagger-ui
26.07-adicionando-operacoes
26.08-descrevendo-parametros-de-entrada-na-documentacao
26.09-descrevendo-modelos-de-representacoes-e-suas-propriedades
26.10-descrevendo-restricoes-de-validacao-de-propriedades-do-modelo
26.11-descrevendo-codigos-de-status-de-respostas-de-forma-global
26.12-descrevendo-codigos-de-status-de-respostas-em-endpoints-especificos
26.13-descrevendo-codigos-de-status-de-respostas-de-forma-global-para-cada-tipo-de-metodo-http
26.14-descrevendo-o-modelo-de-representacao-de-problema
26.15-referenciando-modelo-de-representacao-de-problema-com-codigos-de-status-de-erro
26.16-desafio-descrevendo-documentacao-de-endpoints-de-grupos
26.17-corrigindo-documentacao-com-substituicao-de-pageable
26.18-desafio-descrevendo-documentacao-de-endpoints-de-cozinhas
26.19-desafio-descrevendo-documentacao-de-endpoints-de-formas-de-pagamento
26.20-desafio-descrevendo-documentacao-de-endpoints-de-pedidos
26.21-descrevendo-parametros-de-projecoes-em-endpoints-de-consultas
26.22-descrevendo-media-type-da-resposta-nos-endpoints
26.23-corrigindo-documentacao-no-swagger-ui-para-upload-de-arquivos
26.24-desafio-descrevendo-documentacao-de-endpoints-de-restaurantes
26.25-desafio-descrevendo-documentacao-de-endpoints-de-estados
26.26.desafio-descrevendo-documentacao-de-endpoints-de-fluxo-de-pedidos
26.27.desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-restaurantes-com-formas-de-pagamento
26.28.desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-restaurantes-com-usuarios
26.29.desafio-descrevendo-documentacao-de-endpoints-de-produtos
26.30.desafio-descrevendo-documentacao-de-endpoints-de-fotos-de-produtos
26.31.desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-permissoes-com-grupos
26.32.desafio-descrevendo-documentacao-de-endpoints-de-usuarios
26.33.desafio-descrevendo-documentacao-de-endpoints-de-associacao-de-grupos-com-usuarios-
26.34.desafio-descrevendo-documentacao-de-endpoint-de-estatisticas
26.35-desafio-descrevendo-documentacao-de-endpoint-de-permissoes
26.36-corrigindo-documentacao-ocultado-root-entry-point
27.02-removendo-o-authorization-server-antigo-do-projeto
27.03-configuracao-inicial-do-authorization-server-com-access-token-opaco
27.04-testando-com-fluxo-client-credentials-com-postman
27.05-inspecionando-token-opaco-usando-endpoint-oauth2-introspect
27.06-configurando-resource-server-com-token-opaco
27.07-armazenando-autorizacoes-no-banco-de-dados
27.08-revogando-access-token-com-oauth2-revoke
27.09-configurando-geracao-de-access-token-jwt-no-authorization-server
27.10-configurando-resource-server-com-token-jwt
27.11-implementando-cliente-com-fluxo-authorization-code-pkce-s256
27.12-testando-fluxo-authorization-code-pkce-s256-e-corrigindo-problemas
27.13-implementando-cliente-com-fluxo-refresh-token
27.14-customizando-o-token-jwt-com-dados-do-usuario
27.15-lendo-informacoes-customizadas-do-jwt-no-resource-server
27.16-implementado-repository-de-clients-do-oauth2-via-jdbc
27.17-customizando-tela-de-login-do-authorization-server
27.18-customizando-tela-de-consentimento
27.19-armazenando-autorizacoes-consentimento-no-banco-de-dados
27.20-criando-tela-de-listagem-dos-clientes-com-consentimentos-permitidos
27.21-revogando-consentimentos-e-autorizacoes-dos-clientes
28.01-principais-mudancas
28.02-removendo-componentes-incompativeis
28.03-atualizando-componentes-e-dep-do-spring-3
28.04-alterações-jakarta-ee-9-jpa-3.0
28.05-atualizando-springdoc
28.06-atualizando-spring-authorization-server
ESR - Diagrama de classes.png
ESR Diagrama banco de dados.png
Injecao de Dependencias.mdj
open-api-collection-hateoas.json
Folders and files Name Name Last commit message
Last commit date
parent directory Sep 17, 2019
Sep 17, 2019
Sep 17, 2019
Sep 17, 2019
Sep 17, 2019
Sep 17, 2019
View all files
You can’t perform that action at this time.