Alura Flix é uma plataforma de compartilhamento de vídeos. Projeto proposto pela Alura no Challenge Backend 5ª edição.
-
Autenticação
Todos os recursos, exceto POST /auth/signup e GET /videos/free, requerem clientes autenticados, o qual deve ser feita em todas as requisições via basic auth, enviando o header Authorization: Basic username:passwordSign Up
: Cadastro de usuário através de um POST /auth/signup com os dados do usuário no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.
{ "name" : "Lorem Ipsum", "email" : "lorem@email.com", "password" : "123456" }
-
Vídeos
Cadastrar
: Cadastro de vídeo através de um POST /videos com as informações de title, description e url do vídeo no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.
{ "title": "vídeo xpto", "description": "descrição do vídeo xpto", "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82" }
Buscar
: Busca paginada de vídeos através de um GET /videos. Opcional buscar por título com parâmetro search (e.g. /videos?search=xpto). Segue abaixo um exemplo do corpo da resposta.
{ "content": [ { "id": 100, "title": "vídeo xpto", "description": "descrição do vídeo xpto", "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82" } ], "pageable": { "sort": { "empty": false, "unsorted": false, "sorted": true }, "offset": 0, "pageNumber": 0, "pageSize": 10, "paged": true, "unpaged": false }, "last": true, "totalPages": 1, "totalElements": 1, "size": 10, "number": 0, "sort": { "empty": false, "unsorted": false, "sorted": true }, "first": true, "numberOfElements": 1, "empty": false }
Buscar por id
: Busca vídeo por id através de um GET /videos/{ID}, onde {ID} é o identificador do vídeo. Segue abaixo um exemplo do corpo da resposta.
{ "id": 100, "title": "vídeo xpto", "description": "descrição do vídeo xpto", "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82" }
Buscar amostra
: Buscar últimos 5 vídeos adicionados através de um GET /videos/free, essa requisição não requer autenticação. Segue abaixo um exemplo do corpo da resposta.
[ { "id": 12, "title": "Vídeo Comum 12", "description": "Vídeo comum 12", "url": "http://www.funnyvideos.com/d39167ge6gd6gf", "categoryId": 1 }, { "id": 11, "title": "Vídeo Comum 11", "description": "Vídeo Comum 11", "url": "http://www.xpto.com/f546h56h56h", "categoryId": 1 }, { "id": 10, "title": "Vídeo Comum 10", "description": "Vídeo comum 10", "url": "http://www.funnyvideos.com/n7j756unbgf", "categoryId": 1 }, { "id": 9, "title": "Vídeo Comum 9", "description": "Vídeo comum 9", "url": "http://www.funnyvideos.com/b3t24f3f", "categoryId": 1 }, { "id": 8, "title": "Vídeo Comum 8", "description": "Vídeo comum 8", "url": "http://www.funnyvideos.com/tts6gf", "categoryId": 1 } ]
Atualizar
: Atualizar vídeo através de um PUT /videos/{ID}, onde {ID} é o identificador do vídeo, os novos dados do vídeo devem ser enviados no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.
{ "title": "vídeo xpto atualizado", "description": "descrição do vídeo xpto atualizado", "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82" }
Deletar
: Deletar vídeo através de um DELETE /videos/{ID}, onde {ID} é o identificador do vídeo.
-
Categorias
Cadastrar
: Cadastro de categoria através de um POST /categories com as informações de title e color da categoria no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.
{ "title": "Comédia xpto", "color": "f0aff0" }
Buscar
: Busca paginada de categorias através de um GET /categories. Segue abaixo um exemplo do corpo da resposta.
{ "content": [ { "id": 55, "title": "Comédia xpto", "color": "f0aff0" } ], "pageable": { "sort": { "empty": false, "unsorted": false, "sorted": true }, "offset": 0, "pageNumber": 0, "pageSize": 10, "paged": true, "unpaged": false }, "last": true, "totalPages": 1, "totalElements": 1, "size": 10, "number": 0, "sort": { "empty": false, "unsorted": false, "sorted": true }, "first": true, "numberOfElements": 1, "empty": false }
Buscar vídeos por categoria
: Busca de vídeos por categoria através de um GET /categories/{ID}/videos, onde {ID} é o identificador da categoria. Segue abaixo um exemplo do corpo da resposta.
{ "content": [ { "id": 100, "title": "vídeo xpto", "description": "descrição do vídeo xpto", "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82", "categoryId" : 55 } ], "pageable": { "sort": { "empty": false, "unsorted": false, "sorted": true }, "offset": 0, "pageNumber": 0, "pageSize": 10, "paged": true, "unpaged": false }, "last": true, "totalPages": 1, "totalElements": 1, "size": 10, "number": 0, "sort": { "empty": false, "unsorted": false, "sorted": true }, "first": true, "numberOfElements": 1, "empty": false }
Buscar por id
: Busca categoria por id através de um GET /categories/{ID}, onde {ID} é o identificador da categoria. Segue abaixo um exemplo do corpo da resposta.
{ "id": 55, "title": "Comédia xpto", "color": "f0aff0" }
Atualizar
: Atualizar categoria através de um PUT /categories/{ID}, onde {ID} é o identificador da categoria, os novos dados da categoria devem ser enviados no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.
{ "title": "Comédia XPTO", "color": "0f0ab4" }
Deletar
: Deletar categoria através de um DELETE /categories/{ID}, onde {ID} é o identificador da categoria.
-
Usuários
Alterar senha
: Alterar senha do usuário através de um PUT /users/password. Segue abaixo um exemplo do corpo da requisição.
{ "oldPassword": "123456", "newPassword": "12345678", "confirmPassword": "12345678" }
Buscar
Busca paginada de usuários através de um GET /users. Apenas administradores podem realizar essa busca.Buscar por id
: Busca usuário por id através de um GET /users/{ID}, onde {ID} é o identificador do usuário. Apenas administradores podem realizar essa busca.Deletar
: Deletar usuário através de um DELETE /users/{ID}, onde {ID} é o identificador do usuário. Apenas administradores podem excluir usuários.
Realizei o deploy da aplicação na AWS, você pode Testar/Brincar através do Swagger UI.
Pode criar um usuário ou usar o username visitor@email.com com password 12345678.
Se possível, me avise caso encontre algum bug ou tenha alguma sugestão.
Execute este aquivo docker-compose.yml. Que irá subir um container postgres e um container da aplicação Aluraflix.
docker-compose -f docker-compose.yml up
Após subir os containers, acesse http://localhost:22222/swagger-ui.html.
Intellij
Java 17
Maven
Spring Boot, Spring MVC, Spring Data JPA, Spring Security
Docker
PostgreSQL
Flyway
Lombok
OpenAPI/Swagger
Mockito
JUnit5
Testcontainers
Testes de unidade
Testes de integração
AWS
- HATEOAS para ajudar os clientes a consumirem a API sem a necessidade de conhecimento prévio.
- Configurar CORS.
- Atualizar imagem docker do projeto.
- Acesso a recursos apenas autenticado.
- Devolver mensagem "amigável" em caso de 409 (Conflict).
- Realizar deploy da aplicação em algum serviço cloud.
- Criar funcionalidades de atualizar e deletar usuário.
- Adicionar OAuth2 (Apenas para estudar)