Skip to content

Commit

Permalink
Merge pull request #19 from nuveo/delete
Browse files Browse the repository at this point in the history
Delete closes #8
  • Loading branch information
felipeweb committed Dec 5, 2016
2 parents 60b79fc + 115a403 commit 41da80e
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 0 deletions.
29 changes: 29 additions & 0 deletions adapters/postgres/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,32 @@ func Insert(database, schema, table string, body api.Request) (jsonData []byte,
jsonData, err = json.Marshal(data)
return
}

// Delete execute delete sql into a table
func Delete(database, schema, table, where string) (jsonData []byte, err error) {
var result sql.Result
var rowsAffected int64

sql := fmt.Sprintf("DELETE FROM %s.%s.%s", database, schema, table)
if where != "" {
sql = fmt.Sprint(
sql,
" WHERE ",
where)
}

db := Conn()
result, err = db.Exec(sql)
if err != nil {
return
}
rowsAffected, err = result.RowsAffected()
if err != nil {
return
}

data := make(map[string]interface{})
data["rows_affected"] = rowsAffected
jsonData, err = json.Marshal(data)
return
}
8 changes: 8 additions & 0 deletions adapters/postgres/postgres_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,11 @@ func TestInsert(t *testing.T) {
So(len(json), ShouldBeGreaterThan, 0)
})
}

func TestDelete(t *testing.T) {
Convey("Delete data from table", t, func() {
json, err := Delete("prest", "public", "test", "name='nuveo'")
So(err, ShouldBeNil)
So(len(json), ShouldBeGreaterThan, 0)
})
}
34 changes: 34 additions & 0 deletions controllers/tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,3 +153,37 @@ func InsertInTables(w http.ResponseWriter, r *http.Request) {

w.Write(object)
}

// DeleteFromTable perform delete sql
func DeleteFromTable(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
database, ok := vars["database"]
if !ok {
log.Println("Unable to parse database in URI")
http.Error(w, "Unable to parse database in URI", http.StatusInternalServerError)
return
}
schema, ok := vars["schema"]
if !ok {
log.Println("Unable to parse schema in URI")
http.Error(w, "Unable to parse schema in URI", http.StatusInternalServerError)
return
}
table, ok := vars["table"]
if !ok {
log.Println("Unable to parse table in URI")
http.Error(w, "Unable to parse table in URI", http.StatusInternalServerError)
return
}

where := postgres.WhereByRequest(r)

object, err := postgres.Delete(database, schema, table, where)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}

w.Write(object)
}
13 changes: 13 additions & 0 deletions controllers/tables_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,16 @@ func TestInsertInTables(t *testing.T) {
doValidPostRequest(server.URL+"/prest/public/test", r)
})
}

func TestDeleteFromTable(t *testing.T) {
router := mux.NewRouter()
router.HandleFunc("/{database}/{schema}/{table}", DeleteFromTable).Methods("DELETE")
server := httptest.NewServer(router)
defer server.Close()
Convey("excute delete in a table without where clause", t, func() {
doValidDeleteRequest(server.URL + "/prest/public/test")
})
Convey("excute delete in a table with where clause", t, func() {
doValidDeleteRequest(server.URL + "/prest/public/test?name=nuveo")
})
}
11 changes: 11 additions & 0 deletions controllers/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,14 @@ func doValidPostRequest(url string, r api.Request) {
_, err = ioutil.ReadAll(resp.Body)
So(err, ShouldBeNil)
}

func doValidDeleteRequest(url string) {
req, err := http.NewRequest("DELETE", url, nil)
So(err, ShouldBeNil)
client := &http.Client{}
resp, err := client.Do(req)
So(err, ShouldBeNil)
So(resp.StatusCode, ShouldEqual, 200)
_, err = ioutil.ReadAll(resp.Body)
So(err, ShouldBeNil)
}
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ func main() {
r.HandleFunc("/{database}/{schema}", controllers.GetTablesByDatabaseAndSchema).Methods("GET")
r.HandleFunc("/{database}/{schema}/{table}", controllers.SelectFromTables).Methods("GET")
r.HandleFunc("/{database}/{schema}/{table}", controllers.InsertInTables).Methods("POST")
r.HandleFunc("/{database}/{schema}/{table}", controllers.DeleteFromTable).Methods("DELETE")

n.UseHandler(r)
n.Run(fmt.Sprintf(":%v", cfg.HTTPPort))
Expand Down

0 comments on commit 41da80e

Please sign in to comment.