84 lines
2.8 KiB
Go
84 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/asdine/storm/v3"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// SearchAllByField searches all of the DB by specified field
|
|
func (s *Server) SearchAllHandler(c *fiber.Ctx) error {
|
|
searchField := c.Query("field", "Name")
|
|
searchTerm := c.Query("term")
|
|
|
|
s.Log.Debug().Msgf("Search by term: %s in all items at field: %s", searchTerm, searchField)
|
|
results, err := s.SearchAllByField(searchField, searchTerm)
|
|
if err != nil {
|
|
s.Log.Error().Msgf("SearchAllByField failed to return results: %s ", err)
|
|
return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("Database failure! error: %s", err))
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(results)
|
|
}
|
|
|
|
// GetDatabaseOverview manually queries the DB to get some details about the database
|
|
func (s *Server) GetDatabaseOverview(c *fiber.Ctx) error {
|
|
|
|
locations := []Location{}
|
|
err := s.Database.AllByIndex("ID", &locations, storm.Reverse())
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Failed to get last added location: %s ", err)
|
|
return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("Database failure fetching last location! error: %s", err))
|
|
}
|
|
var lastAddedLocation *Location
|
|
if len(locations) > 0 {
|
|
lastAddedLocation = &locations[0]
|
|
}
|
|
|
|
rooms := []Room{}
|
|
err = s.Database.AllByIndex("ID", &rooms, storm.Reverse())
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Failed to get all rooms: %s ", err)
|
|
return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("Database failure fetching all rooms! error: %s", err))
|
|
}
|
|
var lastAddedRoom *Room
|
|
if len(rooms) > 0 {
|
|
lastAddedRoom = &rooms[0]
|
|
}
|
|
|
|
cabinets := []Cabinet{}
|
|
err = s.Database.AllByIndex("ID", &cabinets, storm.Reverse())
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Failed to get all cabinets by ID: %s ", err)
|
|
return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("Database failure fetching all cabinets! error: %s", err))
|
|
}
|
|
var lastAddedCabinet *Cabinet
|
|
if len(cabinets) > 0 {
|
|
lastAddedCabinet = &cabinets[0]
|
|
}
|
|
|
|
items := []Item{}
|
|
err = s.Database.AllByIndex("ID", &items, storm.Reverse())
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Failed to get all items by ID: %s ", err)
|
|
return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("Database failure fetching all items! error: %s", err))
|
|
}
|
|
var lastAddedItem *Item
|
|
if len(items) > 0 {
|
|
lastAddedItem = &items[0]
|
|
}
|
|
|
|
dbOverview := DatabaseOverview{
|
|
NumLocations: len(locations),
|
|
LastAddedLocation: lastAddedLocation,
|
|
NumRooms: len(rooms),
|
|
LastAddedRoom: lastAddedRoom,
|
|
NumCabinets: len(cabinets),
|
|
LastAddedCabinet: lastAddedCabinet,
|
|
NumItems: len(items),
|
|
LastAddedItem: lastAddedItem,
|
|
}
|
|
return c.Status(fiber.StatusOK).JSON(dbOverview)
|
|
}
|