Simple Wallpapers
Simplewpps Back End
Status: Concluído
Api Rest simples para buscar e salvar wallpapers.
🪧 Vitrine.Dev | |
---|---|
✨ Nome | Simple Wallpapers |
🏷️ Tecnologias | Java, Spring, postgresql |
Detalhes do Projeto
A api permite registro e login de usuários, que podem realizar o CRUD completo de Wallpapers, buscas personalizadas por categorias e salvar seus wallpapers favoritos através de um sistema de curtir e descurtir. A aplicação contém autenticação e autorização para segurança assim como uma camada de testes automatizados para cada um de seus controllers.
Tecnologias utilizadas
O projeto foi feito completamente em Java e Spring, no ambiente de testes utiliza-se o banco h2, enquanto a versão de produção e desenvolvimento usam PostgreSQL, com configuração via variáveis de ambiente. A api conta com sistema de autenticação via token JWT. Para fazer o gerenciamento de dependências foi utilizado o maven.
Endpoints
GET /wpps
Endpoint público que retorna lista com wallpapers, com paginação padrão do Spring, pode ser usada com os query parameters size (número de elementos por página) e page (número da página). Além disso, é possível buscar os wallpaper por título e pelo nome da categoria, através dos query parameters titulo e categoriaNome.
Exemplo de resposta para a url /wpps?page=0&size=2
{
"content": [
{
"titulo": "Paisagem Noturna com a Lua",
"id": 2,
"url": "https://images.urldosite.com/imagem.jpg"
},
{
"titulo": "Wallpaper conceitual",
"id": 1,
"url": "https://images.urldosite.com/imagem.jpg"
}
],
"pageable": {
"sort": {
"empty": true,
"sorted": false,
"unsorted": true
},
"offset": 0,
"pageNumber": 0,
"pageSize": 2,
"paged": true,
"unpaged": false
},
"totalPages": 3,
"totalElements": 6,
"last": true,
"size": 2,
"number": 0,
"sort": {
"empty": true,
"sorted": false,
"unsorted": true
},
"numberOfElements": 2,
"first": true,
"empty": false
}
POST /wpps
Requer autenticação, permite a criação de um novo wallpaper, recebendo o título do wallpaper, a url da imagem e uma lista de categorias, retorna status code 201 em caso de sucesso.
Exemplo de corpo para a requisição:
{
"titulo": "Imagem de exemplo",
"categorias": ["minimalista"],
"url": "https://www.urldaimagem.com.br/imagem"
}
GET /wpps/{id}
Não requer autenticação, retorna os detalhes de um wallpaper específico, contendo a data de criação e o nome do usuário que publicou o wallpaper.
Exemplo de resposta:
{
"id": 617706903,
"titulo": "Fundo rosa abstrato",
"url": "https://urldaimagem.com.br/imagem",
"categorias": [
{
"id": 5,
"nome": "minimalista"
}
],
"dataCriacao": "2023-02-12T13:49:04.930847",
"nomeAutor": "breno"
}
PUT /wpps/{id}
Requer autenticação, para poder editar um wallpaper, o usuário deve ser o autor do wallpaper ou possuir a role moderador. O corpo da requisição pode conter somente os campos que serão alterados.
Exemplo de corpo para a requisição:
{
"titulo": "Novo título"
}
DELETE /wpps/{id}
Deleta um wallpaper do banco de dados, assim como na requisição PUT, requer que o usuário seja autor do wallpaper ou moderador.
GET /wpps/salvos
Retorna uma lista de todos os wallpapers que foram curtidos pelo usuário, essa lista contém paginação assim como a requisição GET para /wpps que pode ser ajustada com os query parameters size e page. No caso do usuário não estar autenticado, é retornado o status code 401.
Exemplo de resposta:
{
"content": [
{
"titulo": "Paisagem Noturna com a Lua",
"id": 2,
"url": "https://images.urldosite.com/imagem.jpg"
}
],
"pageable": {
"sort": {
"empty": true,
"sorted": false,
"unsorted": true
},
"offset": 0,
"pageNumber": 0,
"pageSize": 10,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 1,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": true,
"sorted": false,
"unsorted": true
},
"numberOfElements": 1,
"first": true,
"empty": false
}
GET /wpps/curtir/{id}
Adiciona um wallpaper à lista de salvos do usuário, requer autenticação para ser acessada retorna status 204 em sucesso.
GET /wpps/descurtir/{id}
Remove um wallpaper da lista de salvos do usuário, também requer autenticação para ser usada e retorna status 204 em sucesso.
POST /auth/login
Endpoint para login, recebe email e senha no corpo:
{
"email": "[email protected]",
"senha": "password"
}
Em caso de sucesso, o token de autenticação é enviado na resposta:
{
"token": ""eyJhbGciOiJIUzI1NiJ9.eyJp...(resto do token)",
"tipo": "Bearer"
}
POST /auth/register
Permite o cadastro de um novo usuário na api, no corpo da requisição são enviados o nickname, o email e a senha:
{
"nickname": "User",
"email": "[email protected]",
"senha": "password"
}
GET /categorias
Não requer autenticação e retorna uma lista de categorias paginada:
{
"content": [
{
"id": 1,
"nome": "categorias"
},
{
"id": 2,
"nome": "filmes"
}
],
(Configurações de paginação omitidas)
}
Esta rota cria um cache chamado listaDeCategorias, já que as categorias são alteradas raramente, usar cache se torna vantajoso nesse caso.
GET /categorias/{nome}
Não requer autenticação e retorna as informações de uma categoria específica (nome e id):
GET /categorias/paisagem
{
"id": 1,
"nome": "paisagem"
}
POST /categorias
Rota exclusiva para moderadores, cria uma nova categoria, recebendo um nome:
{
"nome": "pokemon"
}
PUT /categorias/{id}
Também exclusiva para moderadores, altera o nome de uma categoria:
PUT /categorias/7
{
"nome": "Pokemon"
}
DELETE /categorias/{id}
Rota restrita aos moderadores, deleta uma categoria pelo id, retorna 204 em caso de sucesso.