TheMathemagicians/sevenkeys/database/storagearea.go

101 lines
2.1 KiB
Go

package database
import (
"database/sql"
"errors"
)
var ErrStorageAreaDoesNotExist error = errors.New("Storage area does not exist.")
var StorageAreaTypeBinder string = "Binder"
var StorageAreaTypeBox string = "Box"
type StorageArea struct {
Id int
Name string
StorageType string
}
func GetAllStorageAreas(db *sql.DB) ([]StorageArea, error) {
var storageAreas []StorageArea
query := `SELECT * FROM StorageArea;`
rows, err := db.Query(query)
defer rows.Close()
if err != nil {
return storageAreas, err
}
var area StorageArea
for rows.Next() {
err := rows.Scan(&area.Id, &area.Name, &area.StorageType)
if err != nil {
return storageAreas, err
}
storageAreas = append(storageAreas, area)
}
return storageAreas, nil
}
func GetStorageAreaIdByName(db *sql.DB, storageAreaName string) (int, error) {
var storageAreaId int
query := `SELECT Id FROM StorageArea WHERE Name = ?;`
row := db.QueryRow(query, storageAreaName)
err := row.Scan(&storageAreaId)
if err == sql.ErrNoRows {
return storageAreaId, ErrStorageAreaDoesNotExist
} else if err != nil {
return storageAreaId, err
}
return storageAreaId, nil
}
func GetStorageAreaTypeById(db *sql.DB, storageAreaId int) (string, error) {
var storageType string
query := `SELECT StorageType FROM StorageArea WHERE Id = ?;`
row := db.QueryRow(query, storageAreaId)
err := row.Scan(&storageType)
if err != nil {
return storageType, err
}
return storageType, nil
}
func GetNextEmptySlotInBinder(db *sql.DB, storageAreaId int) (int, error) {
query := `SELECT Id FROM CardLocation WHERE CardPrintingId IS NULL AND StorageAreaId = ? ORDER BY Position ASC LIMIT 1;`
var emptySlotId int
err := db.QueryRow(query, storageAreaId).Scan(&emptySlotId)
if err == sql.ErrNoRows {
return -1, nil
} else if err != nil {
return 0, err
}
return emptySlotId, nil
}
func InsertStorageArea(db *sql.DB, storageArea StorageArea) error {
query := `INSERT INTO StorageArea (Name, StorageType) VALUES (?, ?);`
insert, err := db.Prepare(query)
if err != nil {
return err
}
_, err = insert.Exec(storageArea.Name, storageArea.StorageType)
if err != nil {
return err
}
return nil
}