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

452 lines
12 KiB
Go

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