diff --git a/Database/os.go b/Database/os.go index 159a7c0..d108098 100644 --- a/Database/os.go +++ b/Database/os.go @@ -84,14 +84,49 @@ func GetVersionsByDistributionList(db *sql.DB, d string) ([]null.String, error) return list, nil } +func checkIfOsExists(os OS, db *sql.DB) bool { + row := db.QueryRow("Select distribution, version from dashboard_os where distribution = ? and version = ?", os.Distribution, os.Version) + err := row.Scan(&os.Distribution, &os.Version) + if !errors.Is(err, sql.ErrNoRows) { + log.Println("OS exists") + return true + } + return false +} + func CreateOS(os OS, db *sql.DB) error { + if checkIfOsExists(os, db) { + log.Println("OS already exists") + return nil + } q, err := db.Prepare("INSERT INTO `dashboard_os` (`distribution`,`version`,`end_of_support`) VALUES (?,?,?)") if err != nil { log.Println("Error creating query", err) + return err } _, err = q.Exec(&os.Distribution, &os.Version, &os.EndOfSupport) if err != nil { log.Println("Error inserting OS", err) + return err } - return err + return nil +} + +func DeleteOS(os OS, db *sql.DB) (int, error) { + if !checkIfOsExists(os, db) { + log.Println("OS does not exist, nothing to delete") + return 404, nil + } + q, err := db.Prepare("DELETE FROM dashboard_os WHERE distribution = ? AND version = ?") + if err != nil { + log.Println("Error deleting OS", err) + return 500, err + } + _, err = q.Exec(&os.Distribution, &os.Version) + if err != nil { + log.Println("Error deleting OS", err) + return 500, err + } + log.Println("OS deleted") + return 200, nil } diff --git a/Database/server.go b/Database/server.go index 23c8c7b..2c6f075 100644 --- a/Database/server.go +++ b/Database/server.go @@ -2,6 +2,7 @@ package database import ( "database/sql" + "errors" "gopkg.in/guregu/null.v4" "log" ) @@ -70,14 +71,49 @@ func GetServersbyOS(db *sql.DB, id int64) ([]Server, error) { return servers, err } +func checkIfServerExists(server Server, db *sql.DB) bool { + row := db.QueryRow("Select hostname, os_id from dashboard_server where hostname = ? and os_id = ?", server.Hostname, server.OsId) + err := row.Scan(&server.Hostname, &server.OsId) + if !errors.Is(err, sql.ErrNoRows) { + log.Println("Server exists") + return true + } + return false +} + func CreateServer(server Server, db *sql.DB) error { + if checkIfServerExists(server, db) { + log.Println("Server already exists") + return nil + } q, err := db.Prepare("INSERT INTO `dashboard_server` (hostname, os_id) VALUES (?,?)") if err != nil { log.Println("Error creating query", err) + return err } _, err = q.Exec(server.Hostname, server.OsId) if err != nil { log.Println("Error inserting Server", err) + return err } - return err + return nil +} + +func DeleteServer(server Server, db *sql.DB) (int, error) { + if !checkIfServerExists(server, db) { + log.Println("Server does not exist, nothing to delete") + return 404, nil + } + q, err := db.Prepare("DELETE FROM dashboard_server WHERE hostname = ? AND os_id = ?") + if err != nil { + log.Println("Error deleting Server", err) + return 500, err + } + _, err = q.Exec(server.Hostname, server.OsId) + if err != nil { + log.Println("Error deleting Server", err) + return 500, err + } + log.Println("Server deleted") + return 200, nil } diff --git a/Http/os.go b/Http/os.go index 8679a97..c282f83 100644 --- a/Http/os.go +++ b/Http/os.go @@ -4,6 +4,7 @@ import ( "encoding/json" db "infra-dashboard/Database" "io" + "io/ioutil" "log" "net/http" "strconv" @@ -123,3 +124,28 @@ func CreateOS(w http.ResponseWriter, r *http.Request) { logRequest(t, r, status) w.WriteHeader(status) } + +func DeleteOS(w http.ResponseWriter, r *http.Request) { + var os db.OS + var err error + var status int + t := time.Now() + + body, err := ioutil.ReadAll(r.Body) + if err != nil { + log.Println(err.Error(), "Error reading request body") + } + + params := make(map[string]null.String) + json.Unmarshal(body, ¶ms) + os.Distribution = params["distribution"] + os.Version = params["version"] + dbConn := db.GetDatabaseConnection() + defer dbConn.Close() + status, err = db.DeleteOS(os, dbConn) + if err != nil { + log.Println(err.Error(), "Error deleting OS") + } + logRequest(t, r, status) + w.WriteHeader(status) +} diff --git a/Http/server.go b/Http/server.go index da2e82b..831006c 100644 --- a/Http/server.go +++ b/Http/server.go @@ -104,3 +104,28 @@ func CreateServer(w http.ResponseWriter, r *http.Request) { logRequest(t, r, status) w.WriteHeader(status) } + +func DeleteServer(w http.ResponseWriter, r *http.Request) { + var server db.Server + var err error + var status int + t := time.Now() + + body, err := ioutil.ReadAll(r.Body) + if err != nil { + log.Println(err.Error(), "Error reading request body") + } + + params := make(map[string]null.String) + json.Unmarshal(body, ¶ms) + server.Hostname = params["hostname"] + server.OsId = params["os_id"] + dbConn := db.GetDatabaseConnection() + defer dbConn.Close() + status, err = db.DeleteServer(server, dbConn) + if err != nil { + log.Println(err.Error(), "Error deleting server") + } + logRequest(t, r, status) + w.WriteHeader(status) +} diff --git a/main.go b/main.go index 7607e30..ff67e37 100644 --- a/main.go +++ b/main.go @@ -34,11 +34,13 @@ func main() { router.HandleFunc("/os/create", h.CreateOS).Methods("POST") router.HandleFunc("/os/distribution", h.GetDistributionList).Methods("GET") router.HandleFunc("/os/distribution/{distribution:[a-zA-Z]+}/versions", h.GetVersionsByDistributionList).Methods("GET") + router.HandleFunc("/os/delete", h.DeleteOS).Methods("DELETE") router.HandleFunc("/servers", h.GetServersList).Methods("GET") router.HandleFunc("/server/{id:[0-9]+}", h.GetServersbyID).Methods("GET") router.HandleFunc("/server/os/{os_id:[0-9]+}", h.GetServersbyOS).Methods("GET") router.HandleFunc("/server/create", h.CreateServer).Methods("POST") + router.HandleFunc("/server/delete", h.DeleteServer).Methods("DELETE") router.HandleFunc("/packages", h.GetAllPackages).Methods("GET") router.HandleFunc("/packages/{id:[0-9]+}", h.GetPackagebyID).Methods("GET")