package api import ( "encoding/json" "fmt" "io" "net/http" "os" "github.com/google/uuid" ) func AddService(w http.ResponseWriter, req *http.Request) { req.ParseMultipartForm(10 << 20) file, handler, err := req.FormFile("img") if err != nil { fmt.Println("error retrieving the file: ", err) return } defer file.Close() dst, err := os.Create(os.Getenv("IMG_UPLOAD_PATH") + "/" + handler.Filename) if err != nil { fmt.Println("Error creating destination file:", err) return } defer dst.Close() if _, err := io.Copy(dst, file); err != nil { fmt.Println("Error copying file:", err) return } newService := make(map[string]any) newService["img"] = "img/" + handler.Filename newService["href"] = req.FormValue("href") newService["text"] = req.FormValue("text") newService["alt"] = req.FormValue("text") + "icon" newService["key"] = uuid.New().String() allservices := ReadServicesFile() var allservicesmap []map[string]any err = json.Unmarshal([]byte(allservices), &allservicesmap) if err != nil { panic(err) } exists := false for i := range allservicesmap { if allservicesmap[i]["href"] == newService["href"] { exists = true break } } if !exists { allservicesmap = append(allservicesmap, newService) res, err := json.Marshal(allservicesmap) if err != nil { panic(err) } os.WriteFile(os.Getenv("SERVICES_FILE"), res, 4755) fmt.Fprintf(w, "%s", res) return } fmt.Fprint(w, "{\"status\":\"already exists\"}") }