fixing add item route, working on finishing cabinet routes
This commit is contained in:
169
handlers_item.go
169
handlers_item.go
@@ -10,6 +10,16 @@ import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
// GetAllItemsHandler gets all items
|
||||
func (s *Server) GetAllItemsHandler(c *fiber.Ctx) error {
|
||||
items, err := s.GetAllItems()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Status(fiber.StatusOK).JSON(items)
|
||||
}
|
||||
|
||||
// GetAllItemsAtRoomHandler gets all items in a room
|
||||
func (s *Server) GetAllItemsAtRoomHandler(c *fiber.Ctx) error {
|
||||
roomID, err := c.ParamsInt("roomID")
|
||||
if err != nil {
|
||||
@@ -21,53 +31,102 @@ func (s *Server) GetAllItemsAtRoomHandler(c *fiber.Ctx) error {
|
||||
return err
|
||||
}
|
||||
return c.Status(fiber.StatusOK).JSON(items)
|
||||
}
|
||||
|
||||
// GetAllItemsAtCabinetHandler gets all items in a cabinet
|
||||
func (s *Server) GetAllItemsAtCabinetHandler(c *fiber.Ctx) error {
|
||||
cabinetID, err := c.ParamsInt("cabinetID")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
items, err := s.GetItemsInCabinet(cabinetID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Status(fiber.StatusOK).JSON(items)
|
||||
}
|
||||
|
||||
// AddNewItemHandler adds a new room
|
||||
func (s *Server) AddNewItemHandler(c *fiber.Ctx) error {
|
||||
locID, err := c.ParamsInt("locID")
|
||||
storageType := "room"
|
||||
cabinetID := 0
|
||||
roomID, err := c.ParamsInt("roomID")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if roomID == 0 {
|
||||
storageType = "cabinet"
|
||||
cabinetID, err = c.ParamsInt("cabinetID")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
form, err := c.MultipartForm()
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to fetch rooms: ", err)
|
||||
s.Log.Err(err).Msgf("Unable to fetch item form details: ", err)
|
||||
return err
|
||||
}
|
||||
roomName := form.Value["Name"][0]
|
||||
itemName := form.Value["Name"][0]
|
||||
fmt.Println("COverphoto: ", form.File["CoverPhoto"])
|
||||
roomPhoto := form.File["CoverPhoto"][0]
|
||||
itemPhoto := form.File["CoverPhoto"][0]
|
||||
// if err != nil {
|
||||
// s.Log.Err(err).Msgf("Unable to get CoverPhoto for Room: ", err)
|
||||
// return err
|
||||
// }
|
||||
roomAdditionalPhotos := form.File["AdditionalPhotos"]
|
||||
// Fetch the location information
|
||||
loc, err := s.GetLocation(locID)
|
||||
itemAdditionalPhotos := form.File["AdditionalPhotos"]
|
||||
|
||||
room := Room{}
|
||||
cabinet := Cabinet{}
|
||||
|
||||
if storageType == "room" {
|
||||
room, err = s.GetRoom(roomID)
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to fetch room by id: %d with error: %s", roomID, err)
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
cabinet, err = s.GetCabinet(cabinetID)
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to fetch room by id: %d with error: %s", roomID, err)
|
||||
return err
|
||||
}
|
||||
room, err = s.GetRoom(cabinet.RoomID)
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to fetch room by id: %d with error: %s", cabinet.RoomID, err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
loc, err := s.GetLocation(room.LocationID)
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to fetch location by id: %d with error: %s", locID, err)
|
||||
s.Log.Err(err).Msgf("Unable to fetch location by id: %d with error: %s", room.LocationID, err)
|
||||
return err
|
||||
}
|
||||
// setting the path prepend for the photos
|
||||
urlPrepend := loc.Name + "/" + roomName + "/"
|
||||
pathPrepend := s.Config.Server.LocationPhotoDir + "/" + urlPrepend
|
||||
|
||||
// Create the directory for this room to store the photos
|
||||
err = os.MkdirAll(filepath.ToSlash(s.Config.Server.LocationPhotoDir+"/"+loc.Name+"/"+roomName), 0755)
|
||||
urlPrepend := ""
|
||||
|
||||
// setting the path prepend for the photos
|
||||
if storageType == "room" {
|
||||
urlPrepend = loc.Name + "/" + room.Name + "/" + itemName
|
||||
} else {
|
||||
urlPrepend = loc.Name + "/" + room.Name + "/" + cabinet.Name + "/" + itemName
|
||||
}
|
||||
pathPrepend := s.Config.Server.LocationPhotoDir + "/" + urlPrepend + "/"
|
||||
|
||||
// Create the directory for this item to store the photos
|
||||
err = os.MkdirAll(filepath.ToSlash(pathPrepend), 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var photoURLsList []string
|
||||
for i, photo := range roomAdditionalPhotos {
|
||||
for i, photo := range itemAdditionalPhotos {
|
||||
src, err := photo.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer src.Close()
|
||||
|
||||
photoPath := filepath.ToSlash(pathPrepend + roomName + "_" + strconv.Itoa(i) + filepath.Ext(photo.Filename))
|
||||
photoURL := urlPrepend + roomName + "_" + strconv.Itoa(i) + filepath.Ext(photo.Filename)
|
||||
photoPath := filepath.ToSlash(pathPrepend + itemName + "_" + strconv.Itoa(i) + filepath.Ext(photo.Filename))
|
||||
photoURL := urlPrepend + itemName + "_" + strconv.Itoa(i) + filepath.Ext(photo.Filename)
|
||||
photoURLsList = append(photoURLsList, photoURL)
|
||||
photoData, err := io.ReadAll(src)
|
||||
if err != nil {
|
||||
@@ -76,13 +135,13 @@ func (s *Server) AddNewItemHandler(c *fiber.Ctx) error {
|
||||
os.WriteFile(photoPath, photoData, 0644)
|
||||
}
|
||||
// create files on server for all uploads
|
||||
roomNotes := form.Value["Notes"][0]
|
||||
itemNotes := form.Value["Notes"][0]
|
||||
|
||||
// saving the uploaded image to our images dir
|
||||
coverImagePath := filepath.ToSlash(pathPrepend + roomName + "_cover" + filepath.Ext(roomPhoto.Filename))
|
||||
coverImagePath := filepath.ToSlash(pathPrepend + itemName + "_cover" + filepath.Ext(itemPhoto.Filename))
|
||||
// Creating the URL to retrieve photo
|
||||
coverImageURL := urlPrepend + roomName + "_cover" + filepath.Ext(roomPhoto.Filename)
|
||||
src, err := roomPhoto.Open()
|
||||
coverImageURL := urlPrepend + itemName + "_cover" + filepath.Ext(itemPhoto.Filename)
|
||||
src, err := itemPhoto.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -96,30 +155,56 @@ func (s *Server) AddNewItemHandler(c *fiber.Ctx) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newRoom := Room{
|
||||
Name: roomName,
|
||||
CoverPhoto: coverImageURL,
|
||||
Photos: photoURLsList,
|
||||
Notes: roomNotes,
|
||||
LocationID: locID,
|
||||
LocationName: loc.Name,
|
||||
}
|
||||
err = s.AddRoom(newRoom)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Update our location in the db to add the new room as attached to the ID
|
||||
loc, err = s.GetLocation(newRoom.LocationID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
roomList := loc.Rooms
|
||||
roomList = append(roomList, newRoom)
|
||||
|
||||
err = s.Database.UpdateField(&Location{ID: newRoom.LocationID}, "Rooms", roomList)
|
||||
newItem := Item{
|
||||
Name: itemName,
|
||||
CoverPhoto: coverImageURL,
|
||||
Photos: photoURLsList,
|
||||
Notes: itemNotes,
|
||||
}
|
||||
|
||||
if storageType == "room" {
|
||||
newItem.RoomID = room.ID
|
||||
itemList := room.Items
|
||||
itemList = append(itemList, newItem)
|
||||
err = s.Database.UpdateField(&Room{ID: roomID}, "Items", itemList)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
newItem.CabinetID = cabinet.ID
|
||||
itemList := cabinet.Items
|
||||
itemList = append(itemList, newItem)
|
||||
err = s.Database.UpdateField(&Cabinet{ID: cabinetID}, "Items", itemList)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
err = s.AddItem(newItem)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.Log.Debug().Msgf("Adding new Room: %v", newRoom)
|
||||
return c.Status(fiber.StatusOK).SendString(fmt.Sprintf("New Room Created! %s", newRoom.Name))
|
||||
|
||||
s.Log.Debug().Msgf("Adding new Room: %v", newItem)
|
||||
return c.Status(fiber.StatusOK).SendString(fmt.Sprintf("New Room Created! %s", newItem.Name))
|
||||
}
|
||||
|
||||
// DeleteItemHandler deletes an item based on an ID
|
||||
func (s *Server) DeleteItemHandler(c *fiber.Ctx) error {
|
||||
itemID, err := c.ParamsInt("itemID")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item, err := s.GetItem(itemID)
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to fetch item with id: %d", itemID)
|
||||
return err
|
||||
}
|
||||
err = s.DeleteItem(item)
|
||||
if err != nil {
|
||||
s.Log.Err(err).Msgf("Unable to delete item with id: %d", itemID)
|
||||
return err
|
||||
}
|
||||
return c.Status(fiber.StatusOK).SendString(fmt.Sprintf("Item Deleted! %d", itemID))
|
||||
}
|
||||
|
Reference in New Issue
Block a user