@@ -12,14 +12,17 @@ import (
1212)
1313
1414func (h * Handler ) ping (w http.ResponseWriter ) {
15+ h .logger .Info ("Command: Ping" )
1516 w .WriteHeader (http .StatusOK )
1617 json .NewEncoder (w ).Encode (map [string ]string {"status" : "ok" })
1718}
1819
1920func (h * Handler ) listTables (w http.ResponseWriter ) {
21+ h .logger .Info ("Command: ListTables" )
2022 rows , err := h .db .Query ("SELECT name FROM sqlite_master WHERE type='table';" )
2123 if err != nil {
22- http .Error (w , err .Error (), http .StatusInternalServerError )
24+ h .logger .Error (fmt .Sprintf ("Error listing tables: %v" , err ))
25+ writeError (w , apiErrSomethingWentWrong ())
2326 return
2427 }
2528 defer rows .Close ()
@@ -28,7 +31,8 @@ func (h *Handler) listTables(w http.ResponseWriter) {
2831 for rows .Next () {
2932 var table string
3033 if err := rows .Scan (& table ); err != nil {
31- http .Error (w , err .Error (), http .StatusInternalServerError )
34+ h .logger .Error (fmt .Sprintf ("Error scanning rows: %v" , err ))
35+ writeError (w , apiErrSomethingWentWrong ())
3236 return
3337 }
3438 tables = append (tables , table )
@@ -65,23 +69,24 @@ func (h *Handler) getTable(w http.ResponseWriter, params map[string]interface{})
6569 }
6670 }
6771
72+ h .logger .Info (fmt .Sprintf ("Command: GetTable, table=%s, limit=%d, offset=%d" , table , limit , offset ))
73+
6874 var condition * Condition
6975 conditionParam , ok := params ["condition" ].(interface {})
7076 if ok {
71- condition , ok = toCondition (conditionParam )
77+ condition , ok = toCondition (conditionParam , h . logger )
7278 if ! ok {
73- // TODO: use better logging
74- fmt . Println ( "Could not convert condition" )
79+ writeError ( w , apiErrBadRequest ( "Invalid condition" ))
80+ return
7581 }
82+ h .logger .Debug (fmt .Sprintf ("Condition provided: %v" , condition ))
7683 } else {
77- // TODO: use better logging
78- fmt .Println ("No filters provided" )
84+ h .logger .Debug (fmt .Sprintf ("No condition provided" ))
7985 }
8086
81- data , err := queryTable (h .db , table , condition , limit , offset )
87+ data , err := queryTable (h .db , table , condition , limit , offset , h . logger )
8288 if err != nil {
83- // TODO: use better logging
84- fmt .Printf ("Error querying table: %v\n " , err )
89+ h .logger .Error (fmt .Sprintf ("Error querying table: %v" , err ))
8590 writeError (w , apiErrSomethingWentWrong ())
8691 return
8792 }
@@ -90,13 +95,13 @@ func (h *Handler) getTable(w http.ResponseWriter, params map[string]interface{})
9095 if params ["includeInfo" ] == true {
9196 tableInfo , err := getTableInfo (h .db , table )
9297 if err != nil {
93- // TODO: use better logging
94- fmt .Printf ("Error getting table info: %v\n " , err )
98+ h .logger .Error (fmt .Sprintf ("Error getting table info: %v" , err ))
9599 writeError (w , apiErrSomethingWentWrong ())
96100 return
97101 }
98102 response ["tableInfo" ] = tableInfo
99103 }
104+ h .logger .Info (fmt .Sprintf ("Fetched %d rows" , len (data )))
100105
101106 json .NewEncoder (w ).Encode (response )
102107}
@@ -114,27 +119,27 @@ func (h *Handler) deleteRows(w http.ResponseWriter, params map[string]interface{
114119 return
115120 }
116121
122+ h .logger .Info (fmt .Sprintf ("Command: DeleteRows, table=%s, ids=%v" , table , ids ))
123+
117124 exists , err := checkTableExists (h .db , table )
118125 if err != nil {
119- // TODO: use better logging
120- fmt .Printf ("Error checking table existence: %v\n " , err )
126+ h .logger .Error (fmt .Sprintf ("Error checking table existence: %v" , err ))
121127 writeError (w , apiErrSomethingWentWrong ())
122128 return
123129 }
124130 if ! exists {
125- // TODO: use better logging
126- fmt .Printf ("Error table does not exist: %s\n " , table )
131+ h .logger .Error (fmt .Sprintf ("Error table does not exist: %s" , table ))
127132 writeError (w , apiErrBadRequest (ErrInvalidInput .Error ()))
128133 return
129134 }
130135
131136 rowsAffected , err := batchDelete (h .db , table , ids )
132137 if err != nil {
133- // TODO: use better logging
134- fmt .Printf ("Error deleting rows from table: %v\n " , err )
138+ h .logger .Error (fmt .Sprintf ("Error deleting rows from table: %v" , err ))
135139 writeError (w , apiErrSomethingWentWrong ())
136140 return
137141 }
142+ h .logger .Info (fmt .Sprintf ("Deleted %d row(s)" , rowsAffected ))
138143
139144 json .NewEncoder (w ).Encode (map [string ]string {"rowsAffected" : fmt .Sprintf ("%d" , rowsAffected )})
140145}
@@ -152,13 +157,15 @@ func (h *Handler) updateRow(w http.ResponseWriter, params map[string]interface{}
152157 return
153158 }
154159
160+ h .logger .Info (fmt .Sprintf ("Command: UpdateRow, table=%s, row=%v" , table , row ))
161+
155162 err := editRow (h .db , table , row )
156163 if err != nil {
157- // TODO: use better logging
158- fmt .Printf ("Error editing row: %v\n " , err )
164+ h .logger .Error (fmt .Sprintf ("Error editing row: %v" , err ))
159165 writeError (w , apiErrSomethingWentWrong ())
160166 return
161167 }
168+ h .logger .Info ("Row updated" )
162169
163170 json .NewEncoder (w ).Encode (map [string ]string {"status" : "ok" })
164171}
@@ -174,7 +181,7 @@ func checkTableExists(db *sql.DB, tableName string) (bool, error) {
174181 return exists > 0 , nil
175182}
176183
177- func queryTable (db * sql.DB , tableName string , condition * Condition , limit int , offset int ) ([]map [string ]interface {}, error ) {
184+ func queryTable (db * sql.DB , tableName string , condition * Condition , limit int , offset int , logger Logger ) ([]map [string ]interface {}, error ) {
178185 // First, verify the table exists to prevent SQL injection
179186 exists , err := checkTableExists (db , tableName )
180187 if err != nil {
@@ -205,18 +212,15 @@ func queryTable(db *sql.DB, tableName string, condition *Condition, limit int, o
205212 // Generate the conditions for the where clause
206213 var conditionQuery string
207214 conditionQuery , args = getCondition (condition )
208- // TODO: use better logging
209- fmt .Printf ("Query: %s\n " , conditionQuery )
210- // TODO: use better logging
211- fmt .Printf ("Args: %v\n " , args )
215+ logger .Debug (fmt .Sprintf ("ConditionQuery: %s" , conditionQuery ))
216+ logger .Debug (fmt .Sprintf ("Args: %v" , args ))
212217 query += conditionQuery
213218 query += fmt .Sprintf (" LIMIT %d" , limit )
214219 } else {
215220 query = fmt .Sprintf ("SELECT * FROM %q LIMIT %d OFFSET %d" , tableName , limit , offset )
216221 }
217222
218- // TODO: use better logging
219- fmt .Printf ("About to perform query: `%s`\n " , query )
223+ logger .Info (fmt .Sprintf ("About to perform query: `%s`" , query ))
220224
221225 // Now perform the actual query
222226 rows , err = db .Query (query , args ... )
@@ -505,7 +509,7 @@ func convertToStrSlice(val interface{}) ([]any, bool) {
505509 return result , true
506510}
507511
508- func toCondition (val interface {}) (* Condition , bool ) {
512+ func toCondition (val interface {}, logger Logger ) (* Condition , bool ) {
509513 // Check if val is a map
510514 valMap , ok := val .(map [string ]interface {})
511515 if ! ok {
@@ -518,32 +522,28 @@ func toCondition(val interface{}) (*Condition, bool) {
518522 if valMap ["cases" ] != nil {
519523 cases , ok := valMap ["cases" ].([]interface {})
520524 if ! ok {
521- // TODO: use better logging
522- fmt .Println ("Cases is not an array" )
525+ logger .Debug ("Cases is not an array" )
523526 return nil , false
524527 }
525528 for _ , c := range cases {
526529 caseMap , ok := c .(map [string ]interface {})
527530 if ! ok {
528- // TODO: use better logging
529- fmt .Println ("Case is not a map" )
531+ logger .Debug ("Case is not a map" )
530532 return nil , false
531533 }
532534 // If the logicalOperator field exists then it is a Sub-Condition
533535 if caseMap ["logicalOperator" ] != nil {
534- subCondition , ok := toCondition (caseMap )
536+ subCondition , ok := toCondition (caseMap , logger )
535537 if ! ok {
536- // TODO: use better logging
537- fmt .Println ("Could not convert sub-condition" )
538+ logger .Debug ("Could not convert sub-condition" )
538539 return nil , false
539540 }
540541 condition .Cases = append (condition .Cases , * subCondition )
541542 } else {
542543 filter := Filter {}
543544 err := mapstructure .Decode (c , & filter )
544545 if err != nil {
545- // TODO: use better logging
546- fmt .Printf ("Error decoding filter: %v\n " , err )
546+ logger .Error (fmt .Sprintf ("Error decoding filter: %v" , err ))
547547 return nil , false
548548 }
549549 condition .Cases = append (condition .Cases , filter )
0 commit comments