package databasecommands import ( "errors" "log" databasemodels "example.com/database/models" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func InitializeDatabase() *gorm.DB { db, err := gorm.Open(sqlite.Open("../db/main.db"), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database.") } db.AutoMigrate( &databasemodels.User{}, &databasemodels.Group{}, &databasemodels.FunctionTag{}, &databasemodels.ItemTag{}, &databasemodels.Function{}, &databasemodels.FunctionSet{}, &databasemodels.Tier{}, &databasemodels.Role{}, &databasemodels.Person{}, &databasemodels.Item{}, &databasemodels.InventorySlot{}, &databasemodels.Character{}, &databasemodels.Customization{}, &databasemodels.Schematic{}, ) return db } // Create Functions func CreateDatabaseUser(db *gorm.DB, user databasemodels.User) error { result := db.Create(&user) if result.Error != nil { return result.Error } return nil } func CreateDatabasePerson(db *gorm.DB, person databasemodels.Person) error { result := db.Create(&person) if result.Error != nil { return result.Error } return nil } func CreateDatabaseGroup(db *gorm.DB, group databasemodels.Group) error { result := db.Create(&group) if result.Error != nil { return result.Error } return nil } func CreateDatabaseCharacter(db *gorm.DB, character databasemodels.Character) error { result := db.Create(&character) if result.Error != nil { return result.Error } return nil } func CreateDatabaseRole(db *gorm.DB, role databasemodels.Role) error { result := db.Create(&role) if result.Error != nil { return result.Error } return nil } func CreateDatabaseTier(db *gorm.DB, tier databasemodels.Tier) error { result := db.Create(&tier) if result.Error != nil { return result.Error } return nil } func CreateDatabaseFunctionSet(db *gorm.DB, functionSet databasemodels.FunctionSet) error { result := db.Create(&functionSet) if result.Error != nil { return result.Error } return nil } func CreateDatabaseFunction(db *gorm.DB, function databasemodels.Function) error { result := db.Create(&function) if result.Error != nil { return result.Error } return nil } func CreateDatabaseFunctionTag(db *gorm.DB, functionTag databasemodels.FunctionTag) error { result := db.Create(&functionTag) if result.Error != nil { return result.Error } return nil } func CreateDatabaseInventorySlot(db *gorm.DB, inventorySlot databasemodels.InventorySlot) error { result := db.Create(&inventorySlot) if result.Error != nil { return result.Error } return nil } func CreateDatabaseItem(db *gorm.DB, item databasemodels.Item) error { result := db.Create(&item) if result.Error != nil { return result.Error } return nil } func CreateDatabaseItemTag(db *gorm.DB, itemTag databasemodels.ItemTag) error { result := db.Create(&itemTag) if result.Error != nil { return result.Error } return nil } func CreateDatabaseCustomization(db *gorm.DB, customization databasemodels.Customization) error { result := db.Create(&customization) if result.Error != nil { return result.Error } return nil } func CreateDatabaseSchematic(db *gorm.DB, schematic databasemodels.Schematic) error { result := db.Create(&schematic) if result.Error != nil { return result.Error } return nil } // Read Functions func GetDatabaseUserToken(db *gorm.DB, id string) string { var dbUser databasemodels.User result := db.Where("id = ?", id).Select("login_token").Take(&dbUser) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return "" } else { return dbUser.LoginToken } } func GetDatabaseUserExists(db *gorm.DB, id string) bool { var queryUser databasemodels.User result := db.Where("id = ?", id).Take(&queryUser) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return false } else { return true } } func GetDatabaseUserLoggedIn(db *gorm.DB, oauthTokenJSON string) bool { var queryUser databasemodels.User result := db.Where("login_token = ?", oauthTokenJSON).Take(&queryUser) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return false } else { return queryUser.LoggedIn } } func GetDatabaseUserLoggedInFromDiscordId(db *gorm.DB, discordId string) bool { var queryUser databasemodels.User result := db.Where("id = ?", discordId).Take(&queryUser) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return false } else { return queryUser.LoggedIn } } func GetDatabasePerson(db *gorm.DB, inputPerson string) databasemodels.Person { var outputPerson databasemodels.Person result := db.Model(&databasemodels.Person{}).Where("name = ?", inputPerson).Take(&outputPerson) if result.Error != nil { return databasemodels.Person{} } return outputPerson } func GetDatabasePersons(db *gorm.DB) []databasemodels.Person { var outputPersons []databasemodels.Person db.Find(&outputPersons) for index, outputPerson := range outputPersons { db.Model(&outputPerson).Association("Groups").Find(&outputPersons[index].Groups) } return outputPersons } func GetDatabaseGroup(db *gorm.DB, inputGroup string) databasemodels.Group { var outputGroup databasemodels.Group result := db.Model(&databasemodels.Group{}).Where("name = ?", inputGroup).Take(&outputGroup) if result.Error != nil { return databasemodels.Group{} } return outputGroup } func GetDatabaseGroups(db *gorm.DB) []string { var outputGroups []databasemodels.Group var outputGroupsList []string result := db.Find(&outputGroups) if result.Error != nil { return outputGroupsList } else { for _, group := range outputGroups { outputGroupsList = append(outputGroupsList, group.Name) } return outputGroupsList } } func GetDatabaseCharacter(db *gorm.DB, inputCharacter string) databasemodels.Character { var outputCharacter databasemodels.Character result := db.Model(&databasemodels.Character{}).Where("name = ?", inputCharacter).Take(&outputCharacter) if result.Error != nil { return databasemodels.Character{} } return outputCharacter } func GetDatabaseCharacters(db *gorm.DB) []databasemodels.Character { var outputCharacters []databasemodels.Character db.Find(&outputCharacters) for index, outputCharacter := range outputCharacters { db.Model(&outputCharacter).Association("Owners").Find(&outputCharacters[index].Owners) db.Model(&outputCharacter).Association("Roles").Find(&outputCharacters[index].Roles) db.Model(&outputCharacter).Association("FunctionSets").Find(&outputCharacters[index].FunctionSets) db.Model(&outputCharacter).Association("Inventory").Find(&outputCharacters[index].Inventory) } return outputCharacters } func GetDatabaseRole(db *gorm.DB, inputRole string) databasemodels.Role { var outputRole databasemodels.Role result := db.Model(&databasemodels.Role{}).Where("name = ?", inputRole).Take(&outputRole) if result.Error != nil { return databasemodels.Role{} } return outputRole } func GetDatabaseRoles(db *gorm.DB) []databasemodels.Role { var outputRoles []databasemodels.Role db.Find(&outputRoles) for index, outputRole := range outputRoles { db.Model(&outputRole).Association("Tiers").Find(&outputRoles[index].Tiers) db.Model(&outputRole).Association("Visibility").Find(&outputRoles[index].Visibility) } return outputRoles } func GetDatabaseTier(db *gorm.DB, inputTier int) databasemodels.Tier { var outputTier databasemodels.Tier result := db.Model(&databasemodels.Tier{}).Where("id = ?", inputTier).Take(&outputTier) if result.Error != nil { return databasemodels.Tier{} } return outputTier } func GetDatabaseTiers(db *gorm.DB) []databasemodels.Tier { var outputTiers []databasemodels.Tier db.Find(&outputTiers) for index, outputTier := range outputTiers { db.Model(&outputTier).Association("FunctionSets").Find(&outputTiers[index].FunctionSets) } return outputTiers } func GetDatabaseFunction(db *gorm.DB, inputFunction string) databasemodels.Function { var outputFunction databasemodels.Function result := db.Model(&databasemodels.Function{}).Where("name = ?", inputFunction).Take(&outputFunction) if result.Error != nil { return databasemodels.Function{} } return outputFunction } func GetDatabaseFunctions(db *gorm.DB) []databasemodels.Function { var outputFunctions []databasemodels.Function db.Find(&outputFunctions) for index, outputFunction := range outputFunctions { db.Model(&outputFunction).Association("Tags").Find(&outputFunctions[index].Tags) db.Model(&outputFunction).Association("Requirements").Find(&outputFunctions[index].Requirements) } return outputFunctions } func GetDatabaseFunctionTag(db *gorm.DB, inputFunctionTag string) databasemodels.FunctionTag { var outputFunctionTag databasemodels.FunctionTag result := db.Model(&databasemodels.FunctionTag{}).Where("name = ?", inputFunctionTag).Take(&outputFunctionTag) if result.Error != nil { return databasemodels.FunctionTag{} } return outputFunctionTag } func GetDatabaseFunctionTags(db *gorm.DB) []string { var outputFunctionTags []databasemodels.FunctionTag var outputFunctionTagsList []string result := db.Find(&outputFunctionTags) if result.Error != nil { return outputFunctionTagsList } else { for _, functionTag := range outputFunctionTags { outputFunctionTagsList = append(outputFunctionTagsList, functionTag.Name) } return outputFunctionTagsList } } // Update Functions func LogoutDatabaseUser(db *gorm.DB, oauthToken string) { db.Model(&databasemodels.User{}).Where("login_token = ?", oauthToken).Update("logged_in", false) } func UpdateDatabaseUser(db *gorm.DB, user databasemodels.User) error { result := db.Save(&user) if result.Error != nil { return result.Error } return nil } func UpdateDatabasePerson(db *gorm.DB, person databasemodels.Person) error { result := db.Save(&person) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseGroup(db *gorm.DB, group databasemodels.Group) error { result := db.Save(&group) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseCharacter(db *gorm.DB, character databasemodels.Character) error { result := db.Save(&character) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseRole(db *gorm.DB, role databasemodels.Role) error { result := db.Save(&role) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseTier(db *gorm.DB, tier databasemodels.Tier) error { result := db.Save(&tier) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseFunctionSet(db *gorm.DB, functionSet databasemodels.FunctionSet) error { result := db.Save(&functionSet) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseFunction(db *gorm.DB, function databasemodels.Function) error { result := db.Save(&function) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseFunctionTag(db *gorm.DB, functionTag databasemodels.FunctionTag) error { result := db.Save(&functionTag) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseInventorySlot(db *gorm.DB, inventoySlot databasemodels.InventorySlot) error { result := db.Save(&inventoySlot) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseItem(db *gorm.DB, item databasemodels.Item) error { result := db.Save(&item) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseItemTag(db *gorm.DB, itemTag databasemodels.ItemTag) error { result := db.Save(&itemTag) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseCustomization(db *gorm.DB, customization databasemodels.Customization) error { result := db.Save(&customization) if result.Error != nil { return result.Error } return nil } func UpdateDatabaseSchematic(db *gorm.DB, schematic databasemodels.Schematic) error { result := db.Save(&schematic) if result.Error != nil { return result.Error } return nil } // Delete Functions