2025-04-24 13:58:05 -05:00
|
|
|
package databasecommands
|
2025-04-21 23:05:50 -05:00
|
|
|
|
|
|
|
import (
|
2025-04-22 16:21:40 -05:00
|
|
|
"errors"
|
2025-04-21 23:05:50 -05:00
|
|
|
"log"
|
|
|
|
|
2025-04-24 13:58:05 -05:00
|
|
|
databasemodels "example.com/database/models"
|
|
|
|
|
2025-04-21 23:05:50 -05:00
|
|
|
"gorm.io/driver/sqlite"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
func InitializeDatabase() *gorm.DB {
|
2025-04-24 13:58:05 -05:00
|
|
|
db, err := gorm.Open(sqlite.Open("../db/main.db"), &gorm.Config{})
|
2025-04-21 23:05:50 -05:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal("Failed to connect to database.")
|
|
|
|
}
|
2025-04-25 17:39:40 -05:00
|
|
|
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{},
|
|
|
|
)
|
2025-04-21 23:05:50 -05:00
|
|
|
return db
|
|
|
|
}
|
2025-04-22 16:21:40 -05:00
|
|
|
|
2025-04-25 17:39:40 -05:00
|
|
|
// 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 CreateDatabaseGroup(db *gorm.DB, group databasemodels.Group) error {
|
|
|
|
result := db.Create(&group)
|
|
|
|
if result.Error != nil {
|
|
|
|
return result.Error
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func CreateDatabaseFunction(db *gorm.DB, function databasemodels.Function) error {
|
|
|
|
log.Println(function)
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read Functions
|
|
|
|
|
2025-04-22 16:21:40 -05:00
|
|
|
func GetDatabaseUserToken(db *gorm.DB, id string) string {
|
2025-04-24 13:58:05 -05:00
|
|
|
var dbUser databasemodels.User
|
2025-04-22 16:21:40 -05:00
|
|
|
result := db.Where("id = ?", id).Select("login_token").Take(&dbUser)
|
|
|
|
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
|
|
|
return ""
|
|
|
|
} else {
|
|
|
|
return dbUser.LoginToken
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-24 20:17:30 -05:00
|
|
|
func GetDatabaseUserExists(db *gorm.DB, id string) bool {
|
2025-04-24 13:58:05 -05:00
|
|
|
var queryUser databasemodels.User
|
2025-04-22 16:21:40 -05:00
|
|
|
result := db.Where("id = ?", id).Take(&queryUser)
|
|
|
|
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
|
|
|
return false
|
|
|
|
} else {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-24 20:17:30 -05:00
|
|
|
func GetDatabaseUserLoggedIn(db *gorm.DB, oauthTokenJSON string) bool {
|
2025-04-24 13:58:05 -05:00
|
|
|
var queryUser databasemodels.User
|
2025-04-24 20:17:30 -05:00
|
|
|
result := db.Where("login_token = ?", oauthTokenJSON).Take(&queryUser)
|
2025-04-22 19:04:17 -05:00
|
|
|
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
|
|
|
return false
|
|
|
|
} else {
|
|
|
|
return queryUser.LoggedIn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-25 17:39:40 -05:00
|
|
|
func GetDatabaseUserLoggedInFromDiscordId(db *gorm.DB, discordId string) bool {
|
|
|
|
var queryUser databasemodels.User
|
|
|
|
var result *gorm.DB
|
|
|
|
result = db.Where("id = ?", discordId).Take(&queryUser)
|
|
|
|
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
|
|
|
return false
|
|
|
|
} else {
|
|
|
|
return queryUser.LoggedIn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetDatabaseGroup(db *gorm.DB, inputGroup string) databasemodels.Group {
|
|
|
|
var outputGroup databasemodels.Group
|
|
|
|
result := db.Model(&databasemodels.Group{}).Where("name = ?", inputGroup).Take(&outputGroup)
|
2025-04-22 16:21:40 -05:00
|
|
|
if result.Error != nil {
|
2025-04-25 17:39:40 -05:00
|
|
|
return databasemodels.Group{}
|
2025-04-22 16:21:40 -05:00
|
|
|
}
|
2025-04-25 17:39:40 -05:00
|
|
|
return outputGroup
|
2025-04-22 16:21:40 -05:00
|
|
|
}
|
|
|
|
|
2025-04-25 17:39:40 -05:00
|
|
|
func GetDatabaseGroups(db *gorm.DB) []string {
|
|
|
|
var outputGroups []databasemodels.Group
|
|
|
|
var outputGroupsList []string
|
|
|
|
result := db.Find(&outputGroups)
|
2025-04-22 16:21:40 -05:00
|
|
|
if result.Error != nil {
|
2025-04-25 17:39:40 -05:00
|
|
|
return outputGroupsList
|
|
|
|
} else {
|
|
|
|
for _, group := range outputGroups {
|
|
|
|
outputGroupsList = append(outputGroupsList, group.Name)
|
|
|
|
}
|
|
|
|
return outputGroupsList
|
2025-04-22 16:21:40 -05:00
|
|
|
}
|
|
|
|
}
|
2025-04-22 19:04:17 -05:00
|
|
|
|
2025-04-25 17:39:40 -05:00
|
|
|
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
|
2025-04-24 20:17:30 -05:00
|
|
|
}
|
|
|
|
|
2025-04-25 17:39:40 -05:00
|
|
|
func GetDatabaseFunctions(db *gorm.DB) []databasemodels.Function {
|
|
|
|
var outputFunctions []databasemodels.Function
|
|
|
|
db.Find(&outputFunctions)
|
|
|
|
for outputFunctionId, outputFunction := range outputFunctions {
|
|
|
|
var outputFunctionTags []databasemodels.FunctionTag
|
|
|
|
db.Model(&outputFunction).Association("Tags").Find(&outputFunctionTags)
|
|
|
|
var outputFunctionRequirements []databasemodels.Function
|
|
|
|
db.Model(&outputFunction).Association("Requirements").Find(&outputFunctionRequirements)
|
|
|
|
outputFunctions[outputFunctionId].Tags = outputFunctionTags
|
|
|
|
outputFunctions[outputFunctionId].Requirements = outputFunctionRequirements
|
|
|
|
}
|
|
|
|
log.Printf("Functions: %v", outputFunctions)
|
|
|
|
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)
|
2025-04-24 20:17:30 -05:00
|
|
|
if result.Error != nil {
|
2025-04-25 17:39:40 -05:00
|
|
|
return databasemodels.FunctionTag{}
|
2025-04-24 20:17:30 -05:00
|
|
|
}
|
2025-04-25 17:39:40 -05:00
|
|
|
return outputFunctionTag
|
2025-04-24 20:17:30 -05:00
|
|
|
}
|
|
|
|
|
2025-04-25 17:39:40 -05:00
|
|
|
func GetDatabaseFunctionTags(db *gorm.DB) []string {
|
|
|
|
var outputFunctionTags []databasemodels.FunctionTag
|
|
|
|
var outputFunctionTagsList []string
|
|
|
|
result := db.Find(&outputFunctionTags)
|
2025-04-24 20:17:30 -05:00
|
|
|
if result.Error != nil {
|
2025-04-25 17:39:40 -05:00
|
|
|
return outputFunctionTagsList
|
|
|
|
} else {
|
|
|
|
for _, functionTag := range outputFunctionTags {
|
|
|
|
outputFunctionTagsList = append(outputFunctionTagsList, functionTag.Name)
|
|
|
|
}
|
|
|
|
return outputFunctionTagsList
|
2025-04-24 20:17:30 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-25 17:39:40 -05:00
|
|
|
// 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)
|
2025-04-24 20:17:30 -05:00
|
|
|
if result.Error != nil {
|
2025-04-25 17:39:40 -05:00
|
|
|
return result.Error
|
2025-04-24 20:17:30 -05:00
|
|
|
}
|
2025-04-25 17:39:40 -05:00
|
|
|
return nil
|
2025-04-22 19:04:17 -05:00
|
|
|
}
|
2025-04-25 17:39:40 -05:00
|
|
|
|
|
|
|
// Delete Functions
|