package main import ( "fmt" "io" "os" "path/filepath" "github.com/gofiber/fiber/v2" ) //Get Server Config func (s *Server) GetServerConfig(c *fiber.Ctx) error { return c.Status(fiber.StatusOK).JSON(fiber.Map{"BasicAuth": s.Config.Authentication.BasicAuth, "Timezone": s.Config.Timezone}) } // Add a new location func (s *Server) AddNewLocationHandler(c *fiber.Ctx) error { form, err := c.MultipartForm() if err != nil { s.Log.Err(err).Msgf("Unable to fetch locations: ", err) return err } locName := form.Value["Name"][0] locPhoto := form.File["CoverPhoto"][0] if err != nil { s.Log.Err(err).Msgf("Unable to get CoverPhoto for location: ", err) return err } locAdditionalPhotos := form.File["AdditionalPhotos"] // Create the directory for this location to store the photos err = os.Mkdir(s.Config.Server.LocationPhotoDir+locName, 0755) if err != nil { return err } var photoPathsList []string for _, photo := range locAdditionalPhotos { src, err := photo.Open() if err != nil { return err } defer src.Close() photoPath := filepath.ToSlash(s.Config.Server.LocationPhotoDir + locName + "/" + photo.Filename) photoPathsList = append(photoPathsList, photoPath) photoData, err := io.ReadAll(src) if err != nil { return err } os.WriteFile(photoPath, photoData, 0644) } // create files on server for all uploads locNotes := form.Value["Notes"][0] // saving the uploaded image to our images dir coverImagePath := filepath.ToSlash(s.Config.Server.LocationPhotoDir + locName + "/" + locPhoto.Filename) src, err := locPhoto.Open() if err != nil { return err } defer src.Close() coverImageData, err := io.ReadAll(src) if err != nil { s.Log.Err(err).Msgf("Unable to read cover photo file: ", err) return err } err = os.WriteFile(coverImagePath, coverImageData, 0644) if err != nil { return err } newLocation := Location{ Name: locName, CoverPhoto: coverImagePath, Photos: photoPathsList, Notes: locNotes, } err = s.AddLocation(newLocation) if err != nil { return err } return c.Status(fiber.StatusOK).SendString(fmt.Sprintf("New Location Created! %s", newLocation.Name)) } func (s *Server) GetAllLocationsHandler(c *fiber.Ctx) error { locations, err := s.GetLocations() if err != nil { s.Log.Err(err).Msgf("Unable to fetch locations: ", err) return err } s.Log.Debug().Msgf("Returning Locations: %+v", locations) testLoc := Location{ ID: 1, Description: "This is a description of the location", Name: "testName", CoverPhoto: "testString", // A "cover photo" for the location Notes: "Notes String", } testLoc2 := Location{ ID: 2, Description: "This is a description of the location2", Name: "testName2", CoverPhoto: "testString2", // A "cover photo" for the location Notes: "Notes String2", } var locArray [6]Location locArray[0] = testLoc locArray[1] = testLoc2 fmt.Println("Returning TestLoc: ", locArray) return c.Status(fiber.StatusOK).JSON(locArray) } func (s *Server) DeleteLocationHandler(c *fiber.Ctx) error { locID := c.Params("locID") fmt.Println("LocID: ", locID) return c.Status(fiber.StatusOK).JSON(locID) }