Skip to content

Commit 2fec834

Browse files
committed
feat: Finalizada a configuração do Spring Security.
1 parent a3a0245 commit 2fec834

File tree

9 files changed

+191
-70
lines changed

9 files changed

+191
-70
lines changed

postman/Virtual Library API.postman_collection.json

+97
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@
88
{
99
"name": "Books",
1010
"request": {
11+
"auth": {
12+
"type": "basic",
13+
"basic": [
14+
{
15+
"key": "username",
16+
"value": "admin",
17+
"type": "string"
18+
},
19+
{
20+
"key": "password",
21+
"value": "admin",
22+
"type": "string"
23+
}
24+
]
25+
},
1126
"method": "GET",
1227
"header": [],
1328
"url": {
@@ -29,6 +44,21 @@
2944
{
3045
"name": "Rating",
3146
"request": {
47+
"auth": {
48+
"type": "basic",
49+
"basic": [
50+
{
51+
"key": "username",
52+
"value": "admin",
53+
"type": "string"
54+
},
55+
{
56+
"key": "password",
57+
"value": "admin",
58+
"type": "string"
59+
}
60+
]
61+
},
3262
"method": "GET",
3363
"header": [],
3464
"url": {
@@ -50,6 +80,21 @@
5080
{
5181
"name": "Create Book",
5282
"request": {
83+
"auth": {
84+
"type": "basic",
85+
"basic": [
86+
{
87+
"key": "username",
88+
"value": "admin",
89+
"type": "string"
90+
},
91+
{
92+
"key": "password",
93+
"value": "admin",
94+
"type": "string"
95+
}
96+
]
97+
},
5398
"method": "POST",
5499
"header": [
55100
{
@@ -87,6 +132,21 @@
87132
{
88133
"name": "Find by ID",
89134
"request": {
135+
"auth": {
136+
"type": "basic",
137+
"basic": [
138+
{
139+
"key": "username",
140+
"value": "admin",
141+
"type": "string"
142+
},
143+
{
144+
"key": "password",
145+
"value": "admin",
146+
"type": "string"
147+
}
148+
]
149+
},
90150
"method": "GET",
91151
"header": [],
92152
"url": {
@@ -105,6 +165,43 @@
105165
}
106166
},
107167
"response": []
168+
},
169+
{
170+
"name": "Delete Book",
171+
"request": {
172+
"auth": {
173+
"type": "basic",
174+
"basic": [
175+
{
176+
"key": "username",
177+
"value": "admin",
178+
"type": "string"
179+
},
180+
{
181+
"key": "password",
182+
"value": "admin",
183+
"type": "string"
184+
}
185+
]
186+
},
187+
"method": "DELETE",
188+
"header": [],
189+
"url": {
190+
"raw": "http://localhost:8080/api/v1/books/5e3b859ac513d124ea6006aa",
191+
"protocol": "http",
192+
"host": [
193+
"localhost"
194+
],
195+
"port": "8080",
196+
"path": [
197+
"api",
198+
"v1",
199+
"books",
200+
"5e3b859ac513d124ea6006aa"
201+
]
202+
}
203+
},
204+
"response": []
108205
}
109206
],
110207
"protocolProfileBehavior": {}

src/main/java/br/com/virtuallibrary/commons/controllers/BaseController.java

+32
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,19 @@
2020
import br.com.virtuallibrary.commons.entities.BaseEntity;
2121
import br.com.virtuallibrary.commons.repositories.BaseRepository;
2222
import br.com.virtuallibrary.commons.services.BaseService;
23+
import io.swagger.annotations.ApiOperation;
24+
import io.swagger.annotations.ApiResponse;
25+
import io.swagger.annotations.ApiResponses;
2326

27+
/**
28+
* Recurso básico com endpoints de CRUD.
29+
* @author daniel
30+
*
31+
* @param <E> Representa a entidade.
32+
* @param <ID> Representa o tipo identificador da entidade.
33+
* @param <R> Representa o repositório do entidade.
34+
* @param <S> Representa o serviço da entidade.
35+
*/
2436
public class BaseController<E extends BaseEntity, ID extends Serializable, R extends BaseRepository<E, ID>, S extends BaseService<E, ID, R>> {
2537

2638
private final S service;
@@ -35,20 +47,32 @@ public S getService() {
3547

3648
@ResponseStatus(HttpStatus.OK)
3749
@GetMapping(value = "/{id}", produces = { Constants.APPLICATION_JSON_UTF_8, Constants.APPLICATION_XML_UTF_8 })
50+
@ApiOperation(value = "Obter registro pelo identificador", notes = "Será retornado um registro da base de dados.")
51+
@ApiResponses(value = { @ApiResponse(code = 200, message = "Registro carregado com sucesso."),
52+
@ApiResponse(code = 404, message = "Registro não encontrado."),
53+
@ApiResponse(code = 500, message = "Erro interno do servidor") })
3854
public ResponseEntity<E> find(@PathVariable ID id) {
3955
return service.findById(id).map(entity -> ResponseEntity.ok().body(entity))
4056
.orElse(ResponseEntity.notFound().build());
4157
}
4258

4359
@ResponseStatus(HttpStatus.CREATED)
4460
@PostMapping(produces = { Constants.APPLICATION_JSON_UTF_8, Constants.APPLICATION_XML_UTF_8 })
61+
@ApiOperation(value = "Salvar um novo registro", notes = "Cria um novo registro na base de dados.")
62+
@ApiResponses(value = { @ApiResponse(code = 201, message = "Registro criado com sucesso"),
63+
@ApiResponse(code = 404, message = "Não foi possível cadastrar o registro."),
64+
@ApiResponse(code = 500, message = "Erro interno do servidor") })
4565
public ResponseEntity<E> create(@RequestBody @Valid E object) {
4666
return service.save(object).map(entity -> ResponseEntity.status(HttpStatus.CREATED).body(entity))
4767
.orElse(ResponseEntity.notFound().build());
4868
}
4969

5070
@ResponseStatus(HttpStatus.OK)
5171
@DeleteMapping(value = "/{id}", produces = { Constants.APPLICATION_JSON_UTF_8, Constants.APPLICATION_XML_UTF_8 })
72+
@ApiOperation(value = "Deletar um registro")
73+
@ApiResponses(value = { @ApiResponse(code = 200, message = "Registro deletado com sucesso"),
74+
@ApiResponse(code = 404, message = "Registro não encontrado."),
75+
@ApiResponse(code = 500, message = "Erro interno do servidor") })
5276
public ResponseEntity<Object> delete(@PathVariable ID id) {
5377
return service.findById(id).map(entity -> {
5478
service.delete(id);
@@ -58,6 +82,10 @@ public ResponseEntity<Object> delete(@PathVariable ID id) {
5882

5983
@ResponseStatus(HttpStatus.OK)
6084
@PutMapping(value = "/{id}", produces = { Constants.APPLICATION_JSON_UTF_8, Constants.APPLICATION_XML_UTF_8 })
85+
@ApiOperation(value = "Atualizar um registro", notes = "Atualiza um registro na base de dados.")
86+
@ApiResponses(value = { @ApiResponse(code = 200, message = "Registro atualizado com sucesso"),
87+
@ApiResponse(code = 404, message = "Registro não encontrado."),
88+
@ApiResponse(code = 500, message = "Erro interno do servidor") })
6189
public ResponseEntity<E> update(@RequestBody @Valid E object, @PathVariable ID id) {
6290
return service.update(object, id).map(entity -> ResponseEntity.ok().body(entity))
6391
.orElse(ResponseEntity.notFound().build());
@@ -66,6 +94,10 @@ public ResponseEntity<E> update(@RequestBody @Valid E object, @PathVariable ID i
6694

6795
@ResponseStatus(HttpStatus.OK)
6896
@PatchMapping(value = "/{id}", produces = { Constants.APPLICATION_JSON_UTF_8, Constants.APPLICATION_XML_UTF_8 })
97+
@ApiOperation(value = "Atualizar campos específicos de um registro.", notes = "Atualiza um registro na base de dados.")
98+
@ApiResponses(value = { @ApiResponse(code = 200, message = "Registro atualizado com sucesso"),
99+
@ApiResponse(code = 404, message = "Registro não encontrado."),
100+
@ApiResponse(code = 500, message = "Erro interno do servidor") })
69101
public ResponseEntity<E> update(@RequestBody Map<String, String> updates, @PathVariable ID id) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
70102
return service.update(updates, id).map(entity -> ResponseEntity.ok().body(entity))
71103
.orElse(ResponseEntity.notFound().build());

src/main/java/br/com/virtuallibrary/commons/services/BaseServiceImpl.java

+7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
import br.com.virtuallibrary.commons.entities.BaseEntity;
2727
import br.com.virtuallibrary.commons.repositories.BaseRepository;
2828
import br.com.virtuallibrary.commons.utils.GenericsUtils;
29+
import lombok.extern.slf4j.Slf4j;
2930

31+
@Slf4j
3032
public class BaseServiceImpl<E extends BaseEntity, ID extends Serializable, R extends BaseRepository<E, ID>>
3133
implements BaseService<E, ID, R> {
3234

@@ -80,18 +82,21 @@ public Optional<E> findById(ID id) {
8082
if (id == null) {
8183
return Optional.empty();
8284
}
85+
log.debug(String.format("Obtendo registro (%s): %s", entityClass.toString(), id));
8386
return repository.findById(id);
8487
}
8588

8689
@Override
8790
public Optional<E> save(E entity) {
8891
checkAuditedEntity(entity);
92+
log.debug(String.format("Salvando registro %s.", entityClass.toString()));
8993
Optional<E> opt = Optional.ofNullable(repository.save(entity));
9094
return opt;
9195
}
9296

9397
@Override
9498
public void delete(ID id) {
99+
log.debug(String.format("Deletando registro (%s): %s", entityClass.toString(), id));
95100
repository.deleteById(id);
96101
}
97102

@@ -102,6 +107,7 @@ public Optional<E> update(Map<String, String> updates, ID id)
102107
if (opt.isEmpty()) {
103108
return Optional.empty();
104109
}
110+
log.debug(String.format("Atualizando campos do registro (%s): %s", entityClass.toString(), id));
105111
E entity = opt.get();
106112
for (String fieldUpdate : updates.keySet()) {
107113
Field declaredField;
@@ -124,6 +130,7 @@ public Optional<E> update(E entity, ID id) {
124130
if (entity == null) {
125131
throw new IllegalArgumentException(A_ENTIDADE_NAO_PODE_SER_NULA);
126132
}
133+
log.debug(String.format("Atualizando registro (%s): %s", entityClass.toString(), id));
127134
Optional<E> opt = repository.findById(id);
128135
if (opt.isEmpty()) {
129136
return Optional.empty();

src/main/java/br/com/virtuallibrary/controllers/BookController.java

+9
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@
1515
import br.com.virtuallibrary.entity.Book;
1616
import br.com.virtuallibrary.repositories.BookRepository;
1717
import br.com.virtuallibrary.services.BookService;
18+
import io.swagger.annotations.Api;
19+
import io.swagger.annotations.ApiOperation;
20+
import io.swagger.annotations.ApiResponse;
21+
import io.swagger.annotations.ApiResponses;
1822

1923
@RestController
2024
@CrossOrigin(origins = "*")
2125
@RequestMapping(Constants.ROOT_URL + Constants.V1 + "/books")
26+
@Api(tags = "Book", value = "Os livros da biblioteca virtual", protocols = "HTTP")
2227
public class BookController extends BaseController<Book, String, BookRepository, BookService> {
2328

2429
@Autowired
@@ -28,6 +33,10 @@ public BookController(BookService service) {
2833

2934
@ResponseStatus(HttpStatus.OK)
3035
@GetMapping(produces = { Constants.APPLICATION_JSON_UTF_8, Constants.APPLICATION_XML_UTF_8 })
36+
@ApiOperation(value = "Obter todos os registros", notes = "Obter todos os registros da base de dados.")
37+
@ApiResponses(value = { @ApiResponse(code = 200, message = "Registros listados com sucesso"),
38+
@ApiResponse(code = 400, message = "Erro na obtenção dos dados"),
39+
@ApiResponse(code = 500, message = "Erro interno do servidor") })
3140
public List<Book> findAll() {
3241
return getService().findAll();
3342
}

src/main/java/br/com/virtuallibrary/controllers/RatingController.java

+9
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@
1616
import br.com.virtuallibrary.entity.Rating;
1717
import br.com.virtuallibrary.repositories.RatingRepository;
1818
import br.com.virtuallibrary.services.RatingService;
19+
import io.swagger.annotations.Api;
20+
import io.swagger.annotations.ApiOperation;
21+
import io.swagger.annotations.ApiResponse;
22+
import io.swagger.annotations.ApiResponses;
1923

2024
@RestController
2125
@CrossOrigin(origins = "*")
2226
@RequestMapping(Constants.ROOT_URL + Constants.V1 + "/ratings")
27+
@Api(tags = "Rating", value = "Avaliação dos livros da biblioteca virtual", protocols = "HTTP")
2328
public class RatingController extends BaseController<Rating, String, RatingRepository, RatingService> {
2429

2530
@Autowired
@@ -29,6 +34,10 @@ public RatingController(RatingService service) {
2934

3035
@ResponseStatus(HttpStatus.OK)
3136
@GetMapping(produces = { Constants.APPLICATION_JSON_UTF_8, Constants.APPLICATION_XML_UTF_8 })
37+
@ApiOperation(value = "Obter todos os registros", notes = "Obter todos os registros da base de dados.")
38+
@ApiResponses(value = { @ApiResponse(code = 200, message = "Registros listados com sucesso"),
39+
@ApiResponse(code = 400, message = "Erro na obtenção dos dados"),
40+
@ApiResponse(code = 500, message = "Erro interno do servidor") })
3241
public List<Rating> findAll(@RequestParam(required = false, defaultValue = "") String bookId) {
3342
if (bookId.isBlank()) {
3443
return getService().findAll();

src/main/java/br/com/virtuallibrary/enums/Roles.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
public enum Roles {
44

5-
ADMIN("Administrador");
5+
ADMIN("Administrador"),
6+
USER("Usuário");
67

78
private String description;
89

src/main/java/br/com/virtuallibrary/security/SecurityConfigBook.java

-50
This file was deleted.

0 commit comments

Comments
 (0)