5
5
6
6
import javax .validation .Valid ;
7
7
8
+ import org .springframework .data .web .PagedResourcesAssembler ;
9
+ import org .springframework .hateoas .CollectionModel ;
10
+ import org .springframework .hateoas .PagedModel ;
8
11
import org .springframework .hateoas .RepresentationModel ;
9
12
import org .springframework .hateoas .server .mvc .RepresentationModelAssemblerSupport ;
10
13
import org .springframework .http .HttpStatus ;
16
19
import org .springframework .web .bind .annotation .PostMapping ;
17
20
import org .springframework .web .bind .annotation .PutMapping ;
18
21
import org .springframework .web .bind .annotation .RequestBody ;
22
+ import org .springframework .web .bind .annotation .RequestParam ;
19
23
import org .springframework .web .bind .annotation .ResponseStatus ;
20
24
21
25
import br .com .virtuallibrary .commons .IConstants ;
@@ -40,22 +44,56 @@ public class BaseController<
40
44
41
45
private final S service ;
42
46
private final RepresentationModelAssemblerSupport <E , M > modelAssembler ;
47
+ private final PagedResourcesAssembler <E > pagedResourcesAssembler ;
43
48
44
- public BaseController (S service , RepresentationModelAssemblerSupport <E , M > modelAssembler ) {
49
+ public BaseController (S service , PagedResourcesAssembler < E > pagedResourcesAssembler , RepresentationModelAssemblerSupport <E , M > modelAssembler ) {
45
50
this .service = service ;
46
51
this .modelAssembler = modelAssembler ;
52
+ this .pagedResourcesAssembler = pagedResourcesAssembler ;
47
53
}
48
54
49
55
@ Override
50
56
public final S getService () {
51
57
return service ;
52
58
}
53
59
60
+ @ Override
61
+ public PagedResourcesAssembler <E > getPagedResourcesAssembler () {
62
+ return pagedResourcesAssembler ;
63
+ }
64
+
54
65
@ Override
55
66
public RepresentationModelAssemblerSupport <E , M > getModelAssembler () {
56
67
return this .modelAssembler ;
57
68
}
58
69
70
+ @ ResponseStatus (HttpStatus .OK )
71
+ @ GetMapping (produces = { IConstants .APPLICATION_JSON_UTF_8 , IConstants .APPLICATION_XML_UTF_8 })
72
+ @ Operation (summary = "Retorna a lista de registros paginado." , description =
73
+ "O filtro padrão é o igual ($eq), mas você pode utilizar:<br/>"
74
+ + "Contém - \" <b>contains</b>:valor\" <br/>"
75
+ + "Igual - \" <b>eq</b>:valor\" <br/>"
76
+ + "Maior que - \" <b>gt</b>:numerico\" <br/>"
77
+ + "Menor que - \" <b>lt</b>:numerico\" <br/>"
78
+ + "Maior ou igual - \" <b>gte</b>:numerico\" <br/>"
79
+ + "Menor ou igual - \" <b>lte</b>:numerico\" <br/>"
80
+ + "Também é possível combinar dois filtros - <b>gt</b>:numerico:<b>lt</b>:numerico" )
81
+ @ ApiResponses (value = {
82
+ @ ApiResponse (responseCode = "200" , description = "Registros listados com sucesso" ),
83
+ @ ApiResponse (responseCode = "400" , description = "Erro na obtenção dos dados ou filtro" ),
84
+ @ ApiResponse (responseCode = "500" , description = "Erro interno do servidor" )})
85
+ public ResponseEntity <CollectionModel <M >> findAll (
86
+ @ Parameter (description ="Número da página." ) @ RequestParam (value = "page" , required = false , defaultValue = IConstants .defaultPage ) int page ,
87
+ @ Parameter (description ="Quantidade de registros por página." ) @ RequestParam (value = "size" , required = false , defaultValue = IConstants .defaultSize ) int size ,
88
+ @ Parameter (description ="Filtros de pesquisa conforme campos da entidade." ) @ RequestParam (required = false ) Map <String ,String > filters ) {
89
+
90
+ PagedModel <M > collModel = null ;
91
+
92
+ collModel = getPagedResourcesAssembler ().toModel (getService ().findPaginated (page , size , filters ), getModelAssembler ());
93
+
94
+ return ResponseEntity .ok ().body (collModel );
95
+ }
96
+
59
97
@ Override
60
98
@ ResponseStatus (HttpStatus .OK )
61
99
@ GetMapping (value = "/{id}" , produces = { IConstants .APPLICATION_JSON_UTF_8 , IConstants .APPLICATION_XML_UTF_8 })
0 commit comments