f83faad432
LearningPointsData transfered to DataBase
102 lines
4.6 KiB
Go
102 lines
4.6 KiB
Go
package models
|
|
|
|
import (
|
|
"bamort/database"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// ClassLearningPoints stores the learning points distribution for a character class
|
|
type ClassLearningPoints struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
CharacterClassID uint `gorm:"uniqueIndex:idx_class_category;not null" json:"character_class_id"`
|
|
SkillCategoryID uint `gorm:"uniqueIndex:idx_class_category;not null" json:"skill_category_id"`
|
|
Points int `gorm:"not null;default:0" json:"points"`
|
|
CharacterClass CharacterClass `gorm:"foreignKey:CharacterClassID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"character_class"`
|
|
SkillCategory SkillCategory `gorm:"foreignKey:SkillCategoryID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"skill_category"`
|
|
}
|
|
|
|
// ClassSpellPoints stores the spell learning points for a character class
|
|
type ClassSpellPoints struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
CharacterClassID uint `gorm:"uniqueIndex;not null" json:"character_class_id"`
|
|
SpellPoints int `gorm:"not null;default:0" json:"spell_points"` // Zauberlerneinheiten
|
|
CharacterClass CharacterClass `gorm:"foreignKey:CharacterClassID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"character_class"`
|
|
}
|
|
|
|
// ClassTypicalSkill stores typical skills for a character class with bonuses
|
|
type ClassTypicalSkill struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
CharacterClassID uint `gorm:"not null;index" json:"character_class_id"`
|
|
SkillID uint `gorm:"not null;index" json:"skill_id"`
|
|
Bonus int `gorm:"not null;default:0" json:"bonus"`
|
|
Attribute string `gorm:"size:10" json:"attribute,omitempty"` // z.B. "Gs", "In", "St"
|
|
Notes string `json:"notes,omitempty"` // Zusätzliche Notizen
|
|
CharacterClass CharacterClass `gorm:"foreignKey:CharacterClassID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"character_class"`
|
|
Skill Skill `gorm:"foreignKey:SkillID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"skill"`
|
|
}
|
|
|
|
// ClassTypicalSpell stores typical spells for a character class
|
|
type ClassTypicalSpell struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
CharacterClassID uint `gorm:"not null;index" json:"character_class_id"`
|
|
SpellID uint `gorm:"not null;index" json:"spell_id"`
|
|
Notes string `json:"notes,omitempty"` // z.B. "beliebig außer Dweomer"
|
|
CharacterClass CharacterClass `gorm:"foreignKey:CharacterClassID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"character_class"`
|
|
Spell Spell `gorm:"foreignKey:SpellID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"spell"`
|
|
}
|
|
|
|
// TableName specifies the table name for ClassLearningPoints
|
|
func (ClassLearningPoints) TableName() string {
|
|
return "class_learning_points"
|
|
}
|
|
|
|
// TableName specifies the table name for ClassSpellPoints
|
|
func (ClassSpellPoints) TableName() string {
|
|
return "class_spell_points"
|
|
}
|
|
|
|
// TableName specifies the table name for ClassTypicalSkill
|
|
func (ClassTypicalSkill) TableName() string {
|
|
return "class_typical_skills"
|
|
}
|
|
|
|
// TableName specifies the table name for ClassTypicalSpell
|
|
func (ClassTypicalSpell) TableName() string {
|
|
return "class_typical_spells"
|
|
}
|
|
|
|
// GetLearningPointsForClass retrieves all learning points for a character class
|
|
func GetLearningPointsForClass(classID uint) ([]ClassLearningPoints, error) {
|
|
var points []ClassLearningPoints
|
|
err := database.DB.Preload("SkillCategory").Where("character_class_id = ?", classID).Find(&points).Error
|
|
return points, err
|
|
}
|
|
|
|
// GetSpellPointsForClass retrieves spell points for a character class
|
|
func GetSpellPointsForClass(classID uint) (*ClassSpellPoints, error) {
|
|
var points ClassSpellPoints
|
|
err := database.DB.Where("character_class_id = ?", classID).First(&points).Error
|
|
if err != nil {
|
|
if err == gorm.ErrRecordNotFound {
|
|
return &ClassSpellPoints{SpellPoints: 0}, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
return &points, nil
|
|
}
|
|
|
|
// GetTypicalSkillsForClass retrieves typical skills for a character class
|
|
func GetTypicalSkillsForClass(classID uint) ([]ClassTypicalSkill, error) {
|
|
var skills []ClassTypicalSkill
|
|
err := database.DB.Preload("Skill").Where("character_class_id = ?", classID).Find(&skills).Error
|
|
return skills, err
|
|
}
|
|
|
|
// GetTypicalSpellsForClass retrieves typical spells for a character class
|
|
func GetTypicalSpellsForClass(classID uint) ([]ClassTypicalSpell, error) {
|
|
var spells []ClassTypicalSpell
|
|
err := database.DB.Preload("Spell").Where("character_class_id = ?", classID).Find(&spells).Error
|
|
return spells, err
|
|
}
|