20
20
import br .com .virtuallibrary .commons .entities .BaseEntity ;
21
21
import br .com .virtuallibrary .commons .repositories .BaseRepository ;
22
22
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 ;
23
26
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
+ */
24
36
public class BaseController <E extends BaseEntity , ID extends Serializable , R extends BaseRepository <E , ID >, S extends BaseService <E , ID , R >> {
25
37
26
38
private final S service ;
@@ -35,20 +47,32 @@ public S getService() {
35
47
36
48
@ ResponseStatus (HttpStatus .OK )
37
49
@ 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" ) })
38
54
public ResponseEntity <E > find (@ PathVariable ID id ) {
39
55
return service .findById (id ).map (entity -> ResponseEntity .ok ().body (entity ))
40
56
.orElse (ResponseEntity .notFound ().build ());
41
57
}
42
58
43
59
@ ResponseStatus (HttpStatus .CREATED )
44
60
@ 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" ) })
45
65
public ResponseEntity <E > create (@ RequestBody @ Valid E object ) {
46
66
return service .save (object ).map (entity -> ResponseEntity .status (HttpStatus .CREATED ).body (entity ))
47
67
.orElse (ResponseEntity .notFound ().build ());
48
68
}
49
69
50
70
@ ResponseStatus (HttpStatus .OK )
51
71
@ 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" ) })
52
76
public ResponseEntity <Object > delete (@ PathVariable ID id ) {
53
77
return service .findById (id ).map (entity -> {
54
78
service .delete (id );
@@ -58,6 +82,10 @@ public ResponseEntity<Object> delete(@PathVariable ID id) {
58
82
59
83
@ ResponseStatus (HttpStatus .OK )
60
84
@ 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" ) })
61
89
public ResponseEntity <E > update (@ RequestBody @ Valid E object , @ PathVariable ID id ) {
62
90
return service .update (object , id ).map (entity -> ResponseEntity .ok ().body (entity ))
63
91
.orElse (ResponseEntity .notFound ().build ());
@@ -66,6 +94,10 @@ public ResponseEntity<E> update(@RequestBody @Valid E object, @PathVariable ID i
66
94
67
95
@ ResponseStatus (HttpStatus .OK )
68
96
@ 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" ) })
69
101
public ResponseEntity <E > update (@ RequestBody Map <String , String > updates , @ PathVariable ID id ) throws NoSuchFieldException , SecurityException , IllegalArgumentException , IllegalAccessException {
70
102
return service .update (updates , id ).map (entity -> ResponseEntity .ok ().body (entity ))
71
103
.orElse (ResponseEntity .notFound ().build ());
0 commit comments