117 lines
3.3 KiB
Go
117 lines
3.3 KiB
Go
package main
|
|
|
|
import (
|
|
"path/filepath"
|
|
|
|
"github.com/asdine/storm/v3"
|
|
)
|
|
|
|
// Location is a top level component that starts the containerization process
|
|
type Location struct {
|
|
ID int `storm:"id,increment,index"`
|
|
Name string `storm:"unique"`
|
|
Description string
|
|
CoverPhoto string // A "cover photo" for the location
|
|
Photos []string // A list of additional photos for the location
|
|
Rooms []Room
|
|
Notes string
|
|
}
|
|
|
|
// Room is a containerized area at a location
|
|
type Room struct {
|
|
ID int `storm:"id,increment,index"`
|
|
CoverPhoto string // A "cover photo" for the room
|
|
Photos []string // A list of additional photos for the room
|
|
Name string `storm:"unique"`
|
|
Description string
|
|
LocationID int //Which location room is assigned to
|
|
Notes string
|
|
}
|
|
|
|
// Item is contained inside a room
|
|
type Item struct {
|
|
ID int `storm:"id, increment"`
|
|
RoomID int // Room ID that item is assigned to
|
|
CoverPhoto string // A "cover photo" for the item
|
|
Photos []string // A list of additional photos for the room
|
|
Name string
|
|
Product string
|
|
Serial string
|
|
Warranty string
|
|
Notes string
|
|
}
|
|
|
|
//SetupDatabase initializes the storm/bbolt database
|
|
func SetupDatabase(s *Server) (db *storm.DB) {
|
|
db, err := storm.Open(filepath.Clean("./app/database/goInventorize.db"))
|
|
if err != nil {
|
|
s.Log.Fatal().Msgf("Unable to create/open database! %s", err)
|
|
}
|
|
return db
|
|
}
|
|
|
|
// AddLocation adds a location to the database
|
|
func (s *Server) AddLocation(loc Location) error {
|
|
s.Log.Info().Msgf("Adding new location to database: ", loc)
|
|
err := s.Database.Save(&loc)
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Unable to add new location to database: %s error: %s ", loc, err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// AddRoom adds a room to a location
|
|
func (s *Server) AddRoom(room Room) error {
|
|
s.Log.Info().Msgf("Adding new room to location: %s", room)
|
|
err := s.Database.Save(&room)
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Unable to add new room to database: %s error: %s", room, err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// AddItem adds an item to a room
|
|
func (s *Server) AddItem(item Item) error {
|
|
s.Log.Info().Msgf("Adding new item to room: ", item)
|
|
err := s.Database.Save(&item)
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Unable to add new item to room: %s error: %s", item, err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetLocations fetches all of the locations from the database
|
|
func (s *Server) GetLocations() (locations []Location, err error) {
|
|
err = s.Database.All(&locations)
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Unable to fetch all locations: %s", err)
|
|
return nil, err
|
|
}
|
|
return locations, nil
|
|
}
|
|
|
|
// GetRoomsAtLocation fetches all the rooms assigned to a location by location ID
|
|
func (s *Server) GetRoomsAtLocation(locID int) error {
|
|
var rooms []Room
|
|
err := s.Database.Find("Location", locID, &rooms)
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Unable to fetch all rooms at location: %s", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetItemsInRoom fetches all of the items assigned to a room
|
|
func (s *Server) GetItemsInRoom(roomID int) error {
|
|
var items []Item
|
|
err := s.Database.Find("Room", roomID, &items)
|
|
if err != nil {
|
|
s.Log.Error().Msgf("Unable to fetch all rooms at location: %s", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|