package database import ( "database/sql" "errors" "log" "gopkg.in/guregu/null.v4" ) type Server struct { ID int `json:"id"` Hostname null.String `json:"hostname"` OsId null.String `json:"OsId"` } func GetServersList(db *sql.DB) ([]Server, error) { var servers []Server rows, err := db.Query("SELECT * FROM dashboard_server") if err != nil { log.Println("Error querying servers list", err) } defer func(rows *sql.Rows) { err := rows.Close() if err != nil { log.Println("Error closing rows query", err) } }(rows) for rows.Next() { var s Server err := rows.Scan(&s.ID, &s.Hostname, &s.OsId) if err != nil { log.Println("Error building servers list", err) } servers = append(servers, s) } return servers, err } func GetServersbyID(db *sql.DB, id int64) (Server, error) { var s Server rows := db.QueryRow("SELECT * FROM dashboard_server WHERE id = ?", id) err := rows.Scan(&s.ID, &s.Hostname, &s.OsId) if err != nil { return Server{}, nil } return s, err } func GetServersbyOS(db *sql.DB, id int64) ([]Server, error) { var servers []Server rows, err := db.Query("SELECT * FROM dashboard_server WHERE os_id = ?", id) if err != nil { log.Println("Error querying servers list by os_id", err) return nil, err } defer func(rows *sql.Rows) { err := rows.Close() if err != nil { log.Println("Error closing rows query", err) } }(rows) for rows.Next() { var s Server err := rows.Scan(&s.ID, &s.Hostname, &s.OsId) if err != nil { log.Println("Error building servers list", err) } servers = append(servers, s) } 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) return !errors.Is(err, sql.ErrNoRows) } 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 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 }