1+ var axios = require ( 'axios' ) ;
2+
3+ var db = {
4+ databaseName : "" ,
5+ databaseUsername : "" ,
6+ databasePassword : "" ,
7+ databaseUrl : "" ,
8+ init : function ( databaseName , databaseUsername , databasePassword ) {
9+ this . databaseName = databaseName ;
10+ this . databaseUsername = databaseUsername ;
11+ this . databasePassword = databasePassword ;
12+ this . databaseUrl = `https://${ this . databaseUsername } .cloudant.com/${ this . databaseName } ` ;
13+ } ,
14+ httpRequest : function ( url , method , payload , callback ) {
15+ var config = {
16+ auth : {
17+ username : this . databaseUsername ,
18+ password : this . databasePassword
19+ } , //basic auth credentails used for cloudant database
20+ timeout : 30000 , //if the response not comes in 30sec axios will abort the request;
21+ url : url , // cloudant database url for views, query's
22+ method : method , //method used to communicate with cloudant database i.e get,post,put,delete,patch
23+ } ;
24+
25+ switch ( method ) {
26+ case "GET" :
27+ axios
28+ . request ( config )
29+ . then ( function ( response ) {
30+ callback ( response . data , 'success' ) ;
31+ } ) . catch ( function ( exception ) {
32+ if ( exception . response ) {
33+ callback ( exception . response . data , 'error' ) ;
34+ } else if ( exception . request ) {
35+ callback ( exception . request , 'error' ) ;
36+ } else {
37+ callback ( exception . message , 'error' ) ;
38+ }
39+ } ) ;
40+ break ;
41+
42+ case "POST" :
43+ config . data = payload ;
44+ axios
45+ . request ( config )
46+ . then ( function ( response ) {
47+ callback ( response . data , 'success' ) ;
48+ } ) . catch ( function ( exception ) {
49+ if ( exception . response ) {
50+ callback ( exception . response . data , 'error' ) ;
51+ } else if ( exception . request ) {
52+ callback ( exception . request , 'error' ) ;
53+ } else {
54+ callback ( exception . message , 'error' ) ;
55+ }
56+ } ) ;
57+ break ;
58+
59+ case "PUT" :
60+ config . data = payload ;
61+ axios
62+ . request ( config )
63+ . then ( function ( response ) {
64+ callback ( response . data , 'success' ) ;
65+ } ) . catch ( function ( exception ) {
66+ if ( exception . response ) {
67+ callback ( exception . response . data , 'error' ) ;
68+ } else if ( exception . request ) {
69+ callback ( exception . request , 'error' ) ;
70+ } else {
71+ callback ( exception . message , 'error' ) ;
72+ }
73+ } ) ;
74+ break ;
75+
76+ case "DELETE" :
77+ axios
78+ . request ( config )
79+ . then ( function ( response ) {
80+ callback ( response . data , 'success' ) ;
81+ } ) . catch ( function ( exception ) {
82+ if ( exception . response ) {
83+ callback ( exception . response . data , 'error' ) ;
84+ } else if ( exception . request ) {
85+ callback ( exception . request , 'error' ) ;
86+ } else {
87+ callback ( exception . message , 'error' ) ;
88+ }
89+ } ) ;
90+ break ;
91+
92+ default :
93+ callback ( "Exception raised: No such method is defined." ) ;
94+ break ;
95+ }
96+ } ,
97+ sendResponse : function ( data , status , callerFn , callback ) {
98+ if ( status == "error" ) {
99+ callback ( null ) ;
100+ } else if ( status == "success" ) {
101+ if ( callerFn == "searchRecordsFromDatabase" ) {
102+ var payload = { } ;
103+ if ( data . rows ) {
104+ data . rows . forEach ( ( obj ) => {
105+ payload [ obj . value . _id ] = obj . value ;
106+ } ) ;
107+ callback ( payload ) ;
108+ } else if ( data . docs ) {
109+ callback ( data . docs ) ;
110+ } else {
111+ callback ( payload ) ;
112+ }
113+ } else {
114+ callback ( data ) ;
115+ }
116+ } else {
117+ throw new Error ( `Exception raised inside ${ callerFn } :- Failed to fetch data from database.` ) ;
118+ }
119+ } ,
120+ resetDatabase : function ( callback ) {
121+ var url = `https://${ this . databaseUsername } .cloudant.com/_all_dbs` , self = this ;
122+
123+ this . httpRequest ( url , 'GET' , null , function ( data , status ) {
124+ if ( status == "success" && data ) {
125+ if ( data . indexOf ( self . databaseName ) > - 1 ) {
126+ self . httpRequest ( self . databaseUrl , 'DELETE' , null , function ( data , status ) {
127+ if ( status == "success" && data . ok ) {
128+ self . httpRequest ( self . databaseUrl , 'PUT' , null , function ( data , staus ) {
129+ if ( staus == "success" && data . ok ) {
130+ callback ( { isReset : true , msg : "Database reset successfully." } ) ;
131+ } else {
132+ callback ( { isReset : false , msg : "Error while creating empty database" } ) ;
133+ }
134+ } ) ;
135+ } else {
136+ callback ( { isReset : false , msg : "Error while removing database." } ) ;
137+ }
138+ } ) ;
139+ } else {
140+ self . httpRequest ( self . databaseUrl , 'PUT' , null , function ( data , staus ) {
141+ if ( staus == "success" && data . ok ) {
142+ callback ( { isReset : true , msg : "Database reset successfully." } ) ;
143+ } else {
144+ callback ( { isReset : false , msg : "Error while creating empty database" } ) ;
145+ }
146+ } ) ;
147+ }
148+ } else {
149+ callback ( { isReset : false , msg : "Error while creating empty database" } ) ;
150+ }
151+ } ) ;
152+ } ,
153+ searchNodeById : function ( id , callback ) {
154+ var url = `${ this . databaseUrl } /${ id } ` , self = this ;
155+ this . httpRequest ( url , "GET" , null , function ( data , status ) {
156+ self . sendResponse ( data , status , 'getById' , callback ) ;
157+ } ) ;
158+ } ,
159+ saveNode : function ( obj , callback ) {
160+ var self = this ;
161+ this . httpRequest ( this . databaseUrl , 'POST' , obj , function ( data , status ) {
162+ console . info ( "Node saved successfully with following object" , data ) ;
163+ self . sendResponse ( data , status , 'saveNode' , callback ) ;
164+ } ) ;
165+ } ,
166+ saveArray : function ( arr , callback ) {
167+ var self = this , url = `${ this . databaseUrl } /_bulk_docs` ;
168+ this . httpRequest ( url , 'POST' , { docs : arr } , function ( data , status ) {
169+ self . sendResponse ( JSON . parse ( JSON . stringify ( arr ) ) , status , 'saveArray' , callback ) ;
170+ } ) ;
171+ } ,
172+ deleteArray : function ( arr , callback ) {
173+ var self = this , url = `${ this . databaseUrl } /_bulk_docs` , payload = [ ] ;
174+
175+ arr . forEach ( ( obj ) => {
176+ if ( obj . _id && obj . _rev ) {
177+ payload . push ( { _id : obj . _id , _rev : obj . _rev , _deleted : true } ) ;
178+ }
179+ } ) ;
180+
181+ this . httpRequest ( url , 'POST' , { docs : payload } , function ( data , status ) {
182+ self . sendResponse ( data , status , 'deleteArray' , callback ) ;
183+ } ) ;
184+ } ,
185+ searchRecordsFromDatabase : function ( queryFields , callback ) {
186+ var self = this , url = `${ this . databaseUrl } /_find` ;
187+
188+ this . httpRequest ( url , 'POST' , queryFields , function ( data , status ) {
189+ self . sendResponse ( data , status , 'searchRecordsFromDatabase' , callback ) ;
190+ } ) ;
191+ }
192+
193+ } ;
194+
195+
196+ module . exports = db ;
0 commit comments