making frontend responsive starting item backend routes
This commit is contained in:
132
handlers_location.go
Normal file
132
handlers_location.go
Normal file
@@ -0,0 +1,132 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
// GetServeConfig fetches the server configuration
|
||||
func (s *Server) GetServerConfig(c *fiber.Ctx) error {
|
||||
fmt.Println("SENDING CONFIG!")
|
||||
return c.Status(fiber.StatusOK).JSON(fiber.Map{"BasicAuth": s.Config.Authentication.BasicAuth, "Timezone": s.Config.Timezone})
|
||||
}
|
||||
|
||||
// AddNewLocationHandler adds 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.MkdirAll(s.Config.Server.LocationPhotoDir+locName, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var photoURLsList []string
|
||||
for i, photo := range locAdditionalPhotos {
|
||||
src, err := photo.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer src.Close()
|
||||
|
||||
photoPath := filepath.ToSlash(s.Config.Server.LocationPhotoDir + locName + "/" + locName + "_" + strconv.Itoa(i) + filepath.Ext(photo.Filename))
|
||||
photoURL := locName + "_" + strconv.Itoa(i) + filepath.Ext(photo.Filename)
|
||||
photoURLsList = append(photoURLsList, photoURL)
|
||||
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 + "/" + locName + "_cover" + filepath.Ext(locPhoto.Filename))
|
||||
// Creating the URL to retrieve photo
|
||||
coverImageURL := locName + "_cover" + filepath.Ext(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: coverImageURL,
|
||||
Photos: photoURLsList,
|
||||
Notes: locNotes,
|
||||
}
|
||||
err = s.AddLocation(newLocation)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.Log.Debug().Msgf("Adding new location: %v", newLocation)
|
||||
return c.Status(fiber.StatusOK).SendString(fmt.Sprintf("New Location Created! %s", newLocation.Name))
|
||||
}
|
||||
|
||||
// GetAllLocationsHandler returns all locations
|
||||
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)
|
||||
return c.Status(fiber.StatusOK).JSON(locations)
|
||||
}
|
||||
|
||||
// GetSingleLocationHandler gets a single location by locationID
|
||||
func (s *Server) GetSingleLocationHandler(c *fiber.Ctx) error {
|
||||
locID, err := c.ParamsInt("locID")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
location, err := s.GetLocation(locID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("Returning A single location: ", location)
|
||||
return c.Status(fiber.StatusOK).JSON(location)
|
||||
}
|
||||
|
||||
// DeleteLocationHandler deletes a location by locationID
|
||||
func (s *Server) DeleteLocationHandler(c *fiber.Ctx) error {
|
||||
locID, err := c.ParamsInt("locID")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
location, err := s.GetLocation(locID)
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to fetch location with id: %d", locID)
|
||||
return err
|
||||
}
|
||||
err = s.DeleteLocation(location)
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to delete location with id: %d", locID)
|
||||
return err
|
||||
}
|
||||
return c.Status(fiber.StatusOK).SendString(fmt.Sprintf("Location Deleted! %d", locID))
|
||||
}
|
Reference in New Issue
Block a user