99import io .swagger .annotations .ApiResponse ;
1010import io .swagger .annotations .ApiResponses ;
1111import static org .couchbase .quickstart .configs .CollectionNames .PROFILE ;
12+
13+ import org .couchbase .quickstart .configs .CollectionNames ;
14+ import org .couchbase .quickstart .configs .DBProperties ;
1215import org .couchbase .quickstart .models .Profile ;
13- import org .couchbase .quickstart .models .ProfileResult ;
16+ import org .couchbase .quickstart .models .ProfileRequest ;
1417import org .springframework .http .HttpStatus ;
1518import org .springframework .http .MediaType ;
1619import org .springframework .http .ResponseEntity ;
2326import java .util .UUID ;
2427
2528@ RestController
26- @ RequestMapping ("/api/v1/profiles " )
29+ @ RequestMapping ("/api/v1/profile " )
2730public class ProfileController {
2831
2932 private Cluster cluster ;
3033 private Collection profileCol ;
34+ private DBProperties dbProperties ;
3135
32- public ProfileController (Cluster cluster , Bucket bucket ) {
36+ public ProfileController (Cluster cluster , Bucket bucket , DBProperties dbProperties ) {
3337 this .cluster = cluster ;
3438 this .profileCol = bucket .collection (PROFILE );
39+ this .dbProperties = dbProperties ;
3540 }
3641
3742
3843 @ CrossOrigin (value ="*" )
3944 @ PostMapping (path = "/" , produces = MediaType .APPLICATION_JSON_VALUE )
40- @ ApiOperation (value = "Post User Profile " )
45+ @ ApiOperation (value = "Create a user profile from the request " )
4146 @ ApiResponses ({
4247 @ ApiResponse (code = 201 , message = "Created" , response = Profile .class ),
43- @ ApiResponse (code = 401 , message = "Unauthorized" , response = Error .class ),
44- @ ApiResponse (code = 404 , message = "Not Found" , response = Error .class ),
4548 @ ApiResponse (code = 500 , message = "Internal Server Error" , response = Error .class )
4649 })
47- public ResponseEntity <Profile > save (@ RequestBody final Profile userProfile ) {
50+ public ResponseEntity <Profile > save (@ RequestBody final ProfileRequest userProfile ) {
4851 //generates an id and save the user
49- userProfile .setPid (UUID .randomUUID ().toString ());
50- profileCol .insert (userProfile .getPid (), userProfile );
51- return ResponseEntity .status (HttpStatus .CREATED ).body (userProfile );
52- }
53-
54-
55- @ CrossOrigin (value ="*" )
56- @ GetMapping (path = "/" , produces = MediaType .APPLICATION_JSON_VALUE )
57- @ ApiOperation (value = "Search for User Profiles" , produces = MediaType .APPLICATION_JSON_VALUE )
58- @ ApiResponses (
59- value = {
60- @ ApiResponse (code = 200 , message = "OK" ),
61- @ ApiResponse (code = 500 , message = "Error occurred in getting user profiles" , response = Error .class )
62- })
63- public ResponseEntity <List <Profile >> getProfiles (
64- @ RequestParam (required =false , defaultValue = "5" ) int limit ,
65- @ RequestParam (required =false , defaultValue = "0" ) int skip ,
66- @ RequestParam String searchFirstName ) {
67-
68- final List <Profile > profiles = cluster .query ("SELECT p.* FROM user_profile._default.profile p WHERE lower(p.firstName) LIKE $firstName LIMIT $limit OFFSET $skip" ,
69- queryOptions ().parameters (JsonObject .create ()
70- .put ("firstName" , "%" +searchFirstName .toLowerCase ()+"%" )
71- .put ("limit" , limit )
72- .put ("skip" , skip ))
73- .scanConsistency (QueryScanConsistency .REQUEST_PLUS ))
74- .rowsAs (Profile .class );
75- return ResponseEntity .status (HttpStatus .OK ).body (profiles );
52+ Profile profile = userProfile .getProfile ();
53+ profileCol .insert (profile .getPid (), profile );
54+ return ResponseEntity .status (HttpStatus .CREATED ).body (profile );
7655 }
7756
7857 @ CrossOrigin (value ="*" )
7958 @ GetMapping (path = "/{id}" , produces = MediaType .APPLICATION_JSON_VALUE )
80- @ ApiOperation (value = "Get a User Profile " , produces = MediaType .APPLICATION_JSON_VALUE )
59+ @ ApiOperation (value = "Get a user profile by Id " , produces = MediaType .APPLICATION_JSON_VALUE )
8160 @ ApiResponses (
8261 value = {
8362 @ ApiResponse (code = 200 , message = "OK" ),
8463 @ ApiResponse (code = 500 , message = "Error occurred in getting user profiles" , response = Error .class )
8564 })
8665 public ResponseEntity <Profile > getProfile (@ RequestParam String pid ) {
8766 Profile profile = profileCol .get (pid ).contentAs (Profile .class );
88- profile .setPid (pid );
8967 return ResponseEntity .status (HttpStatus .OK ).body (profile );
9068 }
9169
9270 @ CrossOrigin (value ="*" )
9371 @ PutMapping (path = "/{id}" )
94- @ ApiOperation (value = "Modify a Users Profile " , response = Profile .class )
72+ @ ApiOperation (value = "Update a user profile " , response = Profile .class )
9573 @ ApiResponses ({
96- @ ApiResponse (code = 200 , message = "OK" , response = Profile .class ),
97- @ ApiResponse (code = 401 , message = "Unauthorized" , response = Error .class ),
98- @ ApiResponse (code = 404 , message = "Not Found" , response = Error .class ),
99- @ ApiResponse (code = 500 , message = "Internal Server Error" , response = Error .class )
74+ @ ApiResponse (code = 200 , message = "Updated the user profile" , response = Profile .class ),
75+ @ ApiResponse (code = 404 , message = "user profile not found" , response = Error .class ),
76+ @ ApiResponse (code = 500 , message = "returns internal server error" , response = Error .class )
10077 })
10178 public ResponseEntity <Profile > update ( @ PathVariable ("id" ) String id , @ RequestBody Profile profile ) {
10279
10380 try {
10481 profileCol .upsert (id , profile );
105- return ResponseEntity .status (HttpStatus .CREATED ).body (new ProfileResult ( profile , "" ) );
82+ return ResponseEntity .status (HttpStatus .CREATED ).body (profile );
10683 } catch (Exception e ){
107- return ResponseEntity .status (HttpStatus .EXPECTATION_FAILED ).body (new ProfileResult ( new Profile (), String . format ( "Error: %s" , e . getMessage ())) );
84+ return ResponseEntity .status (HttpStatus .EXPECTATION_FAILED ).body (null );
10885 }
10986 }
11087
@@ -123,8 +100,32 @@ public ResponseEntity delete(@PathVariable UUID id){
123100 profileCol .remove (id .toString ());
124101 return ResponseEntity .status (HttpStatus .OK ).body (null );
125102 } catch (Exception e ){
126- return ResponseEntity .status (HttpStatus .EXPECTATION_FAILED ).body (new ProfileResult ( new Profile (), String . format ( "Error: %s" , e . getMessage ())) );
103+ return ResponseEntity .status (HttpStatus .EXPECTATION_FAILED ).body (null );
127104 }
128105 }
129106
107+ @ CrossOrigin (value ="*" )
108+ @ GetMapping (path = "/profiles/" , produces = MediaType .APPLICATION_JSON_VALUE )
109+ @ ApiOperation (value = "Search for user profiles" , produces = MediaType .APPLICATION_JSON_VALUE )
110+ @ ApiResponses (
111+ value = {
112+ @ ApiResponse (code = 200 , message = "Returns the list of user profiles" ),
113+ @ ApiResponse (code = 500 , message = "Error occurred in getting user profiles" , response = Error .class )
114+ })
115+ public ResponseEntity <List <Profile >> getProfiles (
116+ @ RequestParam (required =false , defaultValue = "5" ) int limit ,
117+ @ RequestParam (required =false , defaultValue = "0" ) int skip ,
118+ @ RequestParam String search ) {
119+
120+ final List <Profile > profiles = cluster .query ("SELECT p.* FROM $bucketName._default.$collectionName p WHERE lower(p.firstName) LIKE $search OR lower(p.lastName) LIKE $search LIMIT $limit OFFSET $skip" ,
121+ queryOptions ().parameters (JsonObject .create ()
122+ .put ("bucketName" , dbProperties .getBucketName ())
123+ .put ("collectionName" , CollectionNames .PROFILE )
124+ .put ("search" , "%" + search .toLowerCase ()+"%" )
125+ .put ("limit" , limit )
126+ .put ("skip" , skip ))
127+ .scanConsistency (QueryScanConsistency .REQUEST_PLUS ))
128+ .rowsAs (Profile .class );
129+ return ResponseEntity .status (HttpStatus .OK ).body (profiles );
130+ }
130131}
0 commit comments