diff --git a/category.go b/category.go index a3ef7a8..5924f9e 100644 --- a/category.go +++ b/category.go @@ -132,6 +132,21 @@ func deleteCategory(id int64) bool { return true } +func deleteSubcategory(id int64) bool { + db := getSQLConnection() + + defer db.Close() + + _, err := db.Exec("DELETE FROM subcategory WHERE subcategory_id = $1;", id) + //TODO: log this if an error happened + if err != nil { + println(err.Error()) + return false + } + + return true +} + func getCategoryByID(id int64) (category Category, ok bool) { db := getSQLConnection() @@ -153,18 +168,6 @@ func getCategoryByID(id int64) (category Category, ok bool) { return category, true } -// func getSubcategoryByID(id int64) (subcategory Subcategory, ok bool) { -// db := getSQLConnection() - -// defer db.Close() - -// if err := db.QueryRow("SELECT * FROM subcategory WHERE subcategory_id = $1;", id).Scan(&subcategory.ID, &subcategory.Name, &subcategory.CategoryId); err != nil { -// return subcategory, false -// } - -// return subcategory, true -// } - func getSubcategories(categoryID int64) (subcategories []Subcategory, ok bool) { db := getSQLConnection() diff --git a/main.go b/main.go index e419851..198cb45 100644 --- a/main.go +++ b/main.go @@ -30,6 +30,7 @@ func main() { //Note: seems adding a trailing slash allows routing URLs like /category/ID# //No need for query parameters. http.HandleFunc("/category/", category) + http.HandleFunc("/subcategory/", subcategory) err := http.ListenAndServe(":8088", nil) @@ -63,6 +64,36 @@ func category(w http.ResponseWriter, r *http.Request) { } } +func subcategory(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case "DELETE": + deleteSubcategoryHandler(w, r) + default: + w.WriteHeader(http.StatusMethodNotAllowed) + w.Write([]byte("Method not allowed")) + } +} + +func deleteSubcategoryHandler(w http.ResponseWriter, r *http.Request) { + id := strings.TrimPrefix(r.URL.Path, "/subcategory/") + + value, err := strconv.ParseInt(id, 0, 64) + + if err != nil { + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte(err.Error())) + return + } + + if !deleteSubcategory(value) { + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte(fmt.Sprintf("Failed to delete %d", value))) + return + } + + w.WriteHeader(http.StatusOK) +} + func getCategoryHandler(w http.ResponseWriter, r *http.Request) { id := strings.TrimPrefix(r.URL.Path, "/category/")