cpularp-manager-api/src/lib/database/item/item.go

126 lines
4.2 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 (item Item) Create(db *gorm.DB) error {
result := db.Create(&item)
if result.Error != nil {
return result.Error
}
return nil
}
func (item Item) getAssociations(db *gorm.DB) {
db.Model(&item).Association("Functions").Find(&item.Functions)
db.Model(&item).Association("Tags").Find(&item.Tags)
db.Model(&item).Association("Customizations").Find(&item.Customizations)
db.Model(&item).Association("Visibility").Find(&item.Visibility)
}
func (item Item) Get(db *gorm.DB, inputItem string) {
db.Where("name = ?", inputItem).Take(&item)
item.getAssociations(db)
}
func (item Item) Update(db *gorm.DB) error {
var originalItem Item
originalItem.Get(db, item.Name)
functionsError := db.Model(&originalItem).Association("Functions").Find(&originalItem.Functions)
if functionsError != nil {
return functionsError
}
tagsError := db.Model(&originalItem).Association("Tags").Find(&originalItem.Tags)
if tagsError != nil {
return tagsError
}
customizationsError := db.Model(&originalItem).Association("Customizations").Find(&originalItem.Customizations)
if customizationsError != nil {
return customizationsError
}
visibilityError := db.Model(&originalItem).Association("Visibility").Find(&originalItem.Visibility)
if visibilityError != nil {
return visibilityError
}
return nil
}
func (item Item) Delete(db *gorm.DB) error {
result := db.Delete(&item)
if result.Error != nil {
return result.Error
}
return nil
}
func Create(db *gorm.DB, name string, functions []uint, flavorText string, rulesDescription string, physrepRequirements string, tags []string, customizations []string, visibility []string) error {
return Item{
Name: name,
Functions: *function.Get(db, functions),
FlavorText: flavorText,
RulesDescription: rulesDescription,
PhysrepRequirements: physrepRequirements,
Tags: *itemtag.Get(db, tags),
Customizations: *customization.Get(db, customizations),
Visibility: *group.Get(db, visibility),
}.Create(db)
}
func Get(db *gorm.DB, inputItems []string) *[]Item {
var outputItems []Item
for _, inputItem := range inputItems {
var outputItem Item
outputItem.Get(db, inputItem)
outputItems = append(outputItems, outputItem)
}
return &outputItems
}
func GetAll(db *gorm.DB) *[]Item {
var outputItemNames []string
result := db.Model(&Item{}).Select("name").Find(&outputItemNames)
if result.Error != nil {
log.Println(result.Error)
}
return Get(db, outputItemNames)
}
func Update(db *gorm.DB, name string, functions []uint, flavorText string, rulesDescription string, physrepRequirements string, tags []string, customizations []string, visibility []string) error {
return Item{
Name: name,
Functions: *function.Get(db, functions),
FlavorText: flavorText,
RulesDescription: rulesDescription,
PhysrepRequirements: physrepRequirements,
Tags: *itemtag.Get(db, tags),
Customizations: *customization.Get(db, customizations),
Visibility: *group.Get(db, visibility),
}.Update(db)
}
func Delete(db *gorm.DB, inputItem []string) {
items := Get(db, inputItem)
for _, item := range *items {
item.Delete(db)
}
}