fin-check-api/db/item.go

73 lines
1.3 KiB
Go

package db
import "gorm.io/gorm"
type Item struct {
gorm.Model
Name string
Comment string
MetricType uint8
MetricValue uint64
//
CategoryID uint
Category *Category
//
Proteins uint64
Carbs uint64
Fats uint64
//
Prices []ItemPrice
CurrentPriceID uint
CurrentPrice *ItemPrice
//
TypeID uint
Type *Type
UserID uint
User *User
}
// Implements db.UserIdentifiable:1
func (i Item) GetID() uint {
return i.ID
}
// Implements db.UserIdentifiable:2
func (i Item) GetUserID() uint {
return i.UserID
}
// Implements db.UserIdentifiable:3
func (i *Item) SetUserID(id uint) {
i.UserID = id
}
func GetItem(id uint, preloadPrices bool) (*Item, error) {
if udb == nil {
return nil, ERROR_DB_NOT_INIT
}
db := udb
if preloadPrices {
db = db.Preload("Prices")
}
var item Item
err := db.Preload("Category").Preload("CurrentPrice").First(&item, id).Error
return &item, err
}
func GetItemToRootCat(id uint, preloadPrices bool) (*Item, error) {
if udb == nil {
return nil, ERROR_DB_NOT_INIT
}
db := udb
if preloadPrices {
db = db.Preload("Prices")
}
var item Item
err := db.Preload("Category.Parent", func(db *gorm.DB) *gorm.DB {
return db.Preload("Parent", func(db *gorm.DB) *gorm.DB {
return db.Preload("Parent")
})
}).Preload("CurrentPrice").First(&item, id).Error
return &item, err
}