package api import ( "database/sql" "encoding/json" "fmt" "net/http" "net/url" "gitea.voser.cloud/Golang/GoDown/handlers/sqldb" "github.com/gin-gonic/gin" ) // Global Variables var DB *sql.DB // check error func check(err error) { if err != nil { panic(err.Error()) } } func GET_api_db(c *gin.Context) { dbquery := fmt.Sprintf("SELECT * FROM testdb.media") media, err := getJSON(dbquery) check(err) c.Data(http.StatusOK, "application/json", media) } func GET_api_add_ytid(c *gin.Context) { newSong_ytid := c.Param("ytid") newSong_url := "https://www.youtube.com/watch?v=" + newSong_ytid _, err := url.ParseRequestURI(newSong_url) check(err) is_available := ytid_in_db(newSong_ytid) c.String(http.StatusOK, is_available) } func ytid_in_db(ytid string) string { sqlString := fmt.Sprintf("SELECT COUNT(ytid) FROM testdb.media WHERE ytid LIKE \"%v\";", ytid) var count int err := DB.QueryRow(sqlString).Scan(&count) check(err) if count == 0 { return "Song is not available" } if count == 1 { return "Song is available" } error_return := fmt.Sprintf("Rows returned: %s --> there is an Issue within the database", string(count)) return error_return } func GET_api_get_ytid(c *gin.Context) { ytid := c.Param("ytid") sqlString := fmt.Sprintf("SELECT * FROM testdb.media WHERE ytid LIKE \"%v\";", ytid) json, err := getJSON(sqlString) check(err) c.Data(http.StatusOK, "application/json", json) } func getJSON(sqlString string) ([]byte, error) { DB = sqldb.Opendb() defer DB.Close() rows, err := DB.Query(sqlString) check(err) defer rows.Close() columns, err := rows.Columns() if err != nil { return []byte("Error while generating json"), err } count := len(columns) tableData := make([]map[string]interface{}, 0) values := make([]interface{}, count) valuePtrs := make([]interface{}, count) for rows.Next() { for i := 0; i < count; i++ { valuePtrs[i] = &values[i] } rows.Scan(valuePtrs...) entry := make(map[string]interface{}) for i, col := range columns { var v interface{} val := values[i] b, ok := val.([]byte) if ok { v = string(b) } else { v = val } entry[col] = v } tableData = append(tableData, entry) } jsonData, err := json.Marshal(tableData) if err != nil { return []byte("Error while generating json"), err } return jsonData, nil }