74 lines
2.3 KiB
Go
74 lines
2.3 KiB
Go
![]() |
package item
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
|
||
|
customization "example.com/database/customization"
|
||
|
function "example.com/database/function"
|
||
|
group "example.com/database/group"
|
||
|
itemtag "example.com/database/itemtag"
|
||
|
|
||
|
"gorm.io/gorm"
|
||
|
)
|
||
|
|
||
|
type Item struct {
|
||
|
gorm.Model
|
||
|
Name string `gorm:"primaryKey uniqueIndex" json:"name"`
|
||
|
Functions []function.Function `gorm:"many2many:item_function_associations" json:"functions"`
|
||
|
FlavorText string `json:"flavor_text"`
|
||
|
RulesDescription string `json:"rules_description"`
|
||
|
PhysrepRequirements string `json:"physrep_requirements"`
|
||
|
Tags []itemtag.ItemTag `gorm:"many2many:item_tag_associations" json:"tags"` // Unique
|
||
|
Customizations []customization.Customization `gorm:"many2many:item_customization_associations" json:"customizations"`
|
||
|
Visibility []group.Group `gorm:"many2many:item_visibility_associations" json:"visibility"` // Unique
|
||
|
}
|
||
|
|
||
|
func CreateDatabaseItem(db *gorm.DB, item Item) error {
|
||
|
result := db.Create(&item)
|
||
|
if result.Error != nil {
|
||
|
return result.Error
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func GetDatabaseItem(db *gorm.DB, inputItem string) Item {
|
||
|
var outputItem Item
|
||
|
result := db.Model(&Item{}).Where("name = ?", inputItem).Take(&outputItem)
|
||
|
if result.Error != nil {
|
||
|
return Item{}
|
||
|
}
|
||
|
db.Model(&outputItem).Association("Functions").Find(&outputItem.Functions)
|
||
|
db.Model(&outputItem).Association("Tags").Find(&outputItem.Tags)
|
||
|
db.Model(&outputItem).Association("Customizations").Find(&outputItem.Customizations)
|
||
|
db.Model(&outputItem).Association("Visibility").Find(&outputItem.Visibility)
|
||
|
return outputItem
|
||
|
}
|
||
|
|
||
|
func GetDatabaseItems(db *gorm.DB, inputItems []string) []Item {
|
||
|
var outputItems []Item
|
||
|
for _, inputItem := range inputItems {
|
||
|
outputItems = append(outputItems, GetDatabaseItem(db, inputItem))
|
||
|
}
|
||
|
return outputItems
|
||
|
}
|
||
|
|
||
|
func GetAllDatabaseItems(db *gorm.DB) []Item {
|
||
|
var outputItems []Item
|
||
|
result := db.Find(&outputItems)
|
||
|
if result.Error != nil {
|
||
|
log.Println(result.Error)
|
||
|
}
|
||
|
for index, outputItem := range outputItems {
|
||
|
outputItems[index] = GetDatabaseItem(db, outputItem.Name)
|
||
|
}
|
||
|
return outputItems
|
||
|
}
|
||
|
|
||
|
func UpdateDatabaseItem(db *gorm.DB, item Item) error {
|
||
|
result := db.Save(&item)
|
||
|
if result.Error != nil {
|
||
|
return result.Error
|
||
|
}
|
||
|
return nil
|
||
|
}
|