Início Profile Projeto
Avatar de

Breno Bosser Morim

Simple Wallpapers

  • Java
  • Spring
  • postgresql

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.