Starting to update CRUD methods.

This commit is contained in:
Ada Werefox 2025-04-28 22:42:57 -07:00
parent 767499a9ed
commit 3756e275d3
15 changed files with 241 additions and 222 deletions

View file

@ -3,13 +3,13 @@ package main
import ( import (
api "example.com/api" api "example.com/api"
authdiscord "example.com/auth/discord" authdiscord "example.com/auth/discord"
databasecommands "example.com/database/commands" database "example.com/database"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
func main() { func main() {
api.GlobalDatabase = databasecommands.InitializeDatabase() api.GlobalDatabase = database.InitializeDatabase()
api.GlobalConfig.ParseConfig("../config.toml") api.GlobalConfig.ParseConfig("../config.toml")
api.GlobalOAuth = authdiscord.CreateDiscordOAuthConfig(api.GlobalConfig) api.GlobalOAuth = authdiscord.CreateDiscordOAuthConfig(api.GlobalConfig)
app := gin.Default() app := gin.Default()
@ -19,18 +19,18 @@ func main() {
app.GET("/auth/logout", api.AuthLogoutRedirect) app.GET("/auth/logout", api.AuthLogoutRedirect)
// Create & Update // Create & Update
app.POST("/post/user/update", api.CreateOrUpdateUser) app.POST("/post/user/update", api.CreateOrUpdateUser)
app.POST("/post/group", api.CreateDatabaseGroup) app.POST("/post/group", api.CreateGroup)
app.POST("/post/function", api.CreateDatabaseFunction) app.POST("/post/function", api.CreateFunction)
app.POST("/post/function-tag", api.CreateDatabaseFunctionTag) app.POST("/post/function-tag", api.CreateFunctionTag)
// Read // Read
app.GET("/get/user/info", api.GetUserInfo) app.GET("/get/user/info", api.GetDiscordUser)
app.GET("/get/user/authorized", api.GetIsUserAuthorized) app.GET("/get/user/authorized", api.GetUserLoggedIn)
app.GET("/get/groups", api.GetDatabaseGroups) app.GET("/get/groups", api.GetGroups)
app.GET("/get/all/groups", api.GetAllDatabaseGroups) app.GET("/get/all/groups", api.GetAllGroups)
app.GET("/get/functions", api.GetDatabaseFunctions) app.GET("/get/functions", api.GetFunctions)
app.GET("/get/all/functions", api.GetAllDatabaseFunctions) app.GET("/get/all/functions", api.GetAllFunctions)
app.GET("/get/function-tags", api.GetDatabaseFunctionTags) app.GET("/get/function-tags", api.GetFunctionTags)
app.GET("/get/all/function-tags", api.GetAllDatabaseFunctionTags) app.GET("/get/all/function-tags", api.GetAllFunctionTags)
// Delete // Delete
app.Run(":31337") app.Run(":31337")
} }

View file

@ -2,7 +2,7 @@ module gin-cpularp
go 1.24.2 go 1.24.2
replace example.com/database/commands => ./lib/database/commands replace example.com/database => ./lib/database
replace example.com/database/user => ./lib/database/user replace example.com/database/user => ./lib/database/user
@ -41,7 +41,7 @@ replace example.com/api => ./lib/api
require ( require (
example.com/api v0.0.0 example.com/api v0.0.0
example.com/auth/discord v0.0.0 example.com/auth/discord v0.0.0
example.com/database/commands v0.0.0 example.com/database v0.0.0
github.com/gin-gonic/gin v1.10.0 github.com/gin-gonic/gin v1.10.0
) )

View file

@ -8,7 +8,6 @@ import (
authdiscord "example.com/auth/discord" authdiscord "example.com/auth/discord"
configserver "example.com/config/server" configserver "example.com/config/server"
databasecommands "example.com/database/commands"
function "example.com/database/function" function "example.com/database/function"
functiontag "example.com/database/functiontag" functiontag "example.com/database/functiontag"
group "example.com/database/group" group "example.com/database/group"
@ -50,7 +49,7 @@ func AuthLoginRedirect(context *gin.Context) {
func AuthLogoutRedirect(context *gin.Context) { func AuthLogoutRedirect(context *gin.Context) {
oauthTokenJSON, err := context.Cookie("discord-oauthtoken") oauthTokenJSON, err := context.Cookie("discord-oauthtoken")
if err == nil { if err == nil {
databasecommands.LogoutDatabaseUser(GlobalDatabase, oauthTokenJSON) user.Logout(GlobalDatabase, oauthTokenJSON)
context.SetCookie("discord-oauthtoken", "", -1, "", GlobalConfig.API.Domain, false, true) context.SetCookie("discord-oauthtoken", "", -1, "", GlobalConfig.API.Domain, false, true)
} else { } else {
log.Println(err) log.Println(err)
@ -58,8 +57,6 @@ func AuthLogoutRedirect(context *gin.Context) {
context.Redirect(http.StatusTemporaryRedirect, GlobalConfig.GetFrontendRootDomain()) context.Redirect(http.StatusTemporaryRedirect, GlobalConfig.GetFrontendRootDomain())
} }
// Create & Update Endpoints (post/, put/, patch)
func CreateOrUpdateUser(context *gin.Context) { func CreateOrUpdateUser(context *gin.Context) {
oauthTokenJSON := context.GetString("discord-oauthtoken") oauthTokenJSON := context.GetString("discord-oauthtoken")
err := error(nil) err := error(nil)
@ -110,43 +107,15 @@ func CreateOrUpdateUser(context *gin.Context) {
} }
} }
func CreateDatabaseGroup(context *gin.Context) { // Create Endpoints (post/)
GetIsUserAuthorized(context)
isAuthorized := context.GetBool("is-authorized")
if isAuthorized {
name := context.Query("name")
if name != "" {
group.Group{Name: name}.Create(GlobalDatabase)
context.Status(http.StatusOK)
} else {
context.AbortWithStatus(http.StatusBadRequest)
}
} else {
context.AbortWithStatus(http.StatusUnauthorized)
}
}
func CreateDatabaseFunction(context *gin.Context) { func CreateGroup(context *gin.Context) {
GetIsUserAuthorized(context) GetUserLoggedIn(context)
isAuthorized := context.GetBool("is-authorized") isAuthorized := context.GetBool("is-authorized")
if isAuthorized { if isAuthorized {
name, nameOk := context.GetQuery("name") name, nameOk := context.GetQuery("name")
tags, tagsOk := context.GetQueryArray("tags")
requirements, requirementsOk := context.GetQueryArray("requirements")
if nameOk { if nameOk {
var newTags []functiontag.FunctionTag group.Create(GlobalDatabase, name)
var newRequirements []function.Function
if tagsOk {
newTags = *functiontag.Get(GlobalDatabase, tags)
}
if requirementsOk {
newRequirements = *function.Get(GlobalDatabase, requirements)
}
function.Function{
Name: name,
Tags: newTags,
Requirements: newRequirements,
}.Create(GlobalDatabase)
context.Status(http.StatusOK) context.Status(http.StatusOK)
} else { } else {
context.AbortWithStatus(http.StatusBadRequest) context.AbortWithStatus(http.StatusBadRequest)
@ -156,15 +125,31 @@ func CreateDatabaseFunction(context *gin.Context) {
} }
} }
func CreateDatabaseFunctionTag(context *gin.Context) { func CreateFunction(context *gin.Context) {
GetIsUserAuthorized(context) GetUserLoggedIn(context)
isAuthorized := context.GetBool("is-authorized")
if isAuthorized {
name, nameOk := context.GetQuery("name")
tags := context.QueryArray("tags")
requirements := context.QueryArray("requirements")
if nameOk {
function.Create(GlobalDatabase, name, tags, requirements)
context.Status(http.StatusOK)
} else {
context.AbortWithStatus(http.StatusBadRequest)
}
} else {
context.AbortWithStatus(http.StatusUnauthorized)
}
}
func CreateFunctionTag(context *gin.Context) {
GetUserLoggedIn(context)
isAuthorized := context.GetBool("is-authorized") isAuthorized := context.GetBool("is-authorized")
if isAuthorized { if isAuthorized {
name := context.Query("name") name := context.Query("name")
if name != "" { if name != "" {
functiontag.FunctionTag{ functiontag.Create(GlobalDatabase, name)
Name: name,
}.Create(GlobalDatabase)
context.Status(http.StatusOK) context.Status(http.StatusOK)
} else { } else {
context.AbortWithStatus(http.StatusBadRequest) context.AbortWithStatus(http.StatusBadRequest)
@ -174,9 +159,11 @@ func CreateDatabaseFunctionTag(context *gin.Context) {
} }
} }
// Update Endpoints (put/)
// Read Endpoints (get/) // Read Endpoints (get/)
func GetUserInfo(context *gin.Context) { func GetDiscordUser(context *gin.Context) {
oauthTokenJSON, err := context.Cookie("discord-oauthtoken") oauthTokenJSON, err := context.Cookie("discord-oauthtoken")
if err == nil { if err == nil {
var oauthToken *oauth2.Token var oauthToken *oauth2.Token
@ -206,7 +193,7 @@ func GetUserInfo(context *gin.Context) {
context.Redirect(http.StatusTemporaryRedirect, GlobalConfig.GetFrontendRootDomain()) context.Redirect(http.StatusTemporaryRedirect, GlobalConfig.GetFrontendRootDomain())
} }
func GetIsUserAuthorized(context *gin.Context) { func GetUserLoggedIn(context *gin.Context) {
oauthTokenJSON, err := context.Cookie("discord-oauthtoken") oauthTokenJSON, err := context.Cookie("discord-oauthtoken")
if err == nil { if err == nil {
var oauthToken *oauth2.Token var oauthToken *oauth2.Token
@ -229,66 +216,54 @@ func GetIsUserAuthorized(context *gin.Context) {
context.Set("is-authorized", false) context.Set("is-authorized", false)
} }
func GetDatabaseGroups(context *gin.Context) { func GetGroups(context *gin.Context) {
groupNames, ok := context.GetQueryArray("groups") groupNames, ok := context.GetQueryArray("groups")
if ok { if ok {
groups := group.Get(GlobalDatabase, groupNames)
context.JSON(http.StatusOK, gin.H{ context.JSON(http.StatusOK, gin.H{
"groups": groups, "groups": group.Get(GlobalDatabase, groupNames),
}) })
} else { } else {
context.JSON(http.StatusOK, gin.H{ context.Status(http.StatusBadRequest)
"groups": []group.Group{},
})
} }
} }
func GetAllDatabaseGroups(context *gin.Context) { func GetAllGroups(context *gin.Context) {
groups := group.GetAll(GlobalDatabase)
context.JSON(http.StatusOK, gin.H{ context.JSON(http.StatusOK, gin.H{
"groups": groups, "groups": group.GetAll(GlobalDatabase),
}) })
} }
func GetDatabaseFunctions(context *gin.Context) { func GetFunctions(context *gin.Context) {
functionNames, ok := context.GetQueryArray("functions") functionNames, ok := context.GetQueryArray("functions")
if ok { if ok {
functions := function.Get(GlobalDatabase, functionNames)
context.JSON(http.StatusOK, gin.H{ context.JSON(http.StatusOK, gin.H{
"functions": functions, "functions": function.Get(GlobalDatabase, functionNames),
}) })
} else { } else {
context.JSON(http.StatusOK, gin.H{ context.Status(http.StatusBadRequest)
"functions": function.Function{},
})
} }
} }
func GetAllDatabaseFunctions(context *gin.Context) { func GetAllFunctions(context *gin.Context) {
functions := function.GetAll(GlobalDatabase)
context.JSON(http.StatusOK, gin.H{ context.JSON(http.StatusOK, gin.H{
"functions": functions, "functions": function.GetAll(GlobalDatabase),
}) })
} }
func GetDatabaseFunctionTags(context *gin.Context) { func GetFunctionTags(context *gin.Context) {
functionTagNames, ok := context.GetQueryArray("functiontags") functionTagNames, ok := context.GetQueryArray("functiontags")
if ok { if ok {
functionTags := functiontag.Get(GlobalDatabase, functionTagNames)
context.JSON(http.StatusOK, gin.H{ context.JSON(http.StatusOK, gin.H{
"function_tags": functionTags, "function_tags": functiontag.Get(GlobalDatabase, functionTagNames),
}) })
} else { } else {
context.JSON(http.StatusOK, gin.H{ context.Status(http.StatusBadRequest)
"function_tags": []functiontag.FunctionTag{},
})
} }
} }
func GetAllDatabaseFunctionTags(context *gin.Context) { func GetAllFunctionTags(context *gin.Context) {
functionTags := functiontag.GetAll(GlobalDatabase)
context.JSON(http.StatusOK, gin.H{ context.JSON(http.StatusOK, gin.H{
"function_tags": functionTags, "function_tags": functiontag.GetAll(GlobalDatabase),
}) })
} }

View file

@ -1,6 +1,6 @@
module example.com/api module example.com/api
replace example.com/database/commands => ../database/commands replace example.com/database => ../database
replace example.com/database/user => ../database/user replace example.com/database/user => ../database/user
@ -39,7 +39,6 @@ go 1.24.2
require ( require (
example.com/auth/discord v0.0.0 example.com/auth/discord v0.0.0
example.com/config/server v0.0.0 example.com/config/server v0.0.0
example.com/database/commands v0.0.0
example.com/database/function v0.0.0 example.com/database/function v0.0.0
example.com/database/functiontag v0.0.0 example.com/database/functiontag v0.0.0
example.com/database/group v0.0.0 example.com/database/group v0.0.0
@ -51,16 +50,6 @@ require (
) )
require ( require (
example.com/database/character v0.0.0 // indirect
example.com/database/customization v0.0.0 // indirect
example.com/database/functionset v0.0.0 // indirect
example.com/database/inventoryslot v0.0.0 // indirect
example.com/database/item v0.0.0 // indirect
example.com/database/itemtag v0.0.0 // indirect
example.com/database/person v0.0.0 // indirect
example.com/database/role v0.0.0 // indirect
example.com/database/schematic v0.0.0 // indirect
example.com/database/tier v0.0.0 // indirect
github.com/bytedance/sonic v1.11.6 // indirect github.com/bytedance/sonic v1.11.6 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/base64x v0.1.4 // indirect
@ -77,7 +66,6 @@ require (
github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/leodido/go-urn v1.4.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-sqlite3 v1.14.22 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect
@ -91,5 +79,4 @@ require (
golang.org/x/text v0.15.0 // indirect golang.org/x/text v0.15.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/sqlite v1.5.7 // indirect
) )

View file

@ -42,8 +42,6 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@ -93,8 +91,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=

View file

@ -1,4 +1,4 @@
package databasecommands package database
import ( import (
"log" "log"
@ -45,7 +45,3 @@ func InitializeDatabase() *gorm.DB {
) )
return db return db
} }
func LogoutDatabaseUser(db *gorm.DB, oauthToken string) {
db.Model(&user.User{}).Where("login_token = ?", oauthToken).Update("logged_in", false)
}

View file

@ -15,6 +15,14 @@ type Function struct {
Requirements []Function `gorm:"many2many:function_requirement_associations" json:"requirements"` Requirements []Function `gorm:"many2many:function_requirement_associations" json:"requirements"`
} }
func (function Function) Create(db *gorm.DB) error {
result := db.Create(&function)
if result.Error != nil {
return result.Error
}
return nil
}
func (function *Function) getAssociations(db *gorm.DB) { func (function *Function) getAssociations(db *gorm.DB) {
db.Model(&function).Association("Tags").Find(&function.Tags) db.Model(&function).Association("Tags").Find(&function.Tags)
db.Model(&function).Association("Requirements").Find(&function.Requirements) db.Model(&function).Association("Requirements").Find(&function.Requirements)
@ -33,12 +41,12 @@ func (function Function) Update(db *gorm.DB) error {
return nil return nil
} }
func (function Function) Create(db *gorm.DB) error { func Create(db *gorm.DB, name string, tags []string, requirements []string) error {
result := db.Create(&function) return Function{
if result.Error != nil { Name: name,
return result.Error Tags: *functiontag.Get(db, tags),
} Requirements: *Get(db, requirements),
return nil }.Create(db)
} }
func Get(db *gorm.DB, inputFunctions []string) *[]Function { func Get(db *gorm.DB, inputFunctions []string) *[]Function {
@ -52,12 +60,18 @@ func Get(db *gorm.DB, inputFunctions []string) *[]Function {
} }
func GetAll(db *gorm.DB) *[]Function { func GetAll(db *gorm.DB) *[]Function {
var outputFunctions []Function
var outputFunctionNames []string var outputFunctionNames []string
result := db.Model(&Function{}).Select("name").Find(&outputFunctionNames) result := db.Model(&Function{}).Select("name").Find(&outputFunctionNames)
if result.Error != nil { if result.Error != nil {
log.Println(result.Error) log.Println(result.Error)
} }
outputFunctions = *Get(db, outputFunctionNames) return Get(db, outputFunctionNames)
return &outputFunctions }
func Update(db *gorm.DB, name string, tags []string, requirements []string) error {
return Function{
Name: name,
Tags: *functiontag.Get(db, tags),
Requirements: *Get(db, requirements),
}.Update(db)
} }

View file

@ -13,7 +13,7 @@ type FunctionSet struct {
Functions []function.Function `gorm:"many2many:functionset_function_associations" json:"functions"` Functions []function.Function `gorm:"many2many:functionset_function_associations" json:"functions"`
} }
func CreateDatabaseFunctionSet(db *gorm.DB, functionSet FunctionSet) error { func (functionSet FunctionSet) Create(db *gorm.DB) error {
result := db.Create(&functionSet) result := db.Create(&functionSet)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
@ -21,41 +21,52 @@ func CreateDatabaseFunctionSet(db *gorm.DB, functionSet FunctionSet) error {
return nil return nil
} }
func GetDatabaseFunctionSet(db *gorm.DB, inputFunctionSet int) FunctionSet { func (functionSet *FunctionSet) getAssociations(db *gorm.DB) {
var outputFunctionSet FunctionSet db.Model(&functionSet).Association("Functions").Find(&functionSet.Functions)
result := db.Model(&FunctionSet{}).Where("id = ?", inputFunctionSet).Take(&outputFunctionSet)
if result.Error != nil {
return FunctionSet{}
}
db.Model(&outputFunctionSet).Association("Functions").Find(&outputFunctionSet.Functions)
return outputFunctionSet
} }
func GetDatabaseFunctionSets(db *gorm.DB, inputFunctionSets []int) []FunctionSet { func (functionSet *FunctionSet) Get(db *gorm.DB, inputFunctionSet int) {
var outputFunctionSets []FunctionSet db.Where("id = ?", inputFunctionSet).Take(&functionSet)
db.Find(&outputFunctionSets) functionSet.getAssociations(db)
for _, inputFunctionSet := range inputFunctionSets {
outputFunctionSets = append(outputFunctionSets, GetDatabaseFunctionSet(db, inputFunctionSet))
}
return outputFunctionSets
} }
func GetAllDatabaseFunctionSets(db *gorm.DB) []FunctionSet { func (functionSet FunctionSet) Update(db *gorm.DB) error {
var outputFunctionSets []FunctionSet
result := db.Find(&outputFunctionSets)
if result.Error != nil {
log.Println(result.Error)
}
for index, outputFunctionSet := range outputFunctionSets {
outputFunctionSets[index] = GetDatabaseFunctionSet(db, int(outputFunctionSet.ID))
}
return outputFunctionSets
}
func UpdateDatabaseFunctionSet(db *gorm.DB, functionSet FunctionSet) error {
result := db.Save(&functionSet) result := db.Save(&functionSet)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
} }
return nil return nil
} }
func Create(db *gorm.DB, functions []string) error {
return FunctionSet{
Functions: *function.Get(db, functions),
}.Create(db)
}
func Get(db *gorm.DB, inputFunctionSets []int) *[]FunctionSet {
var outputFunctionSets []FunctionSet
for _, inputFunctionSet := range inputFunctionSets {
var outputFunctionSet FunctionSet
outputFunctionSet.Get(db, inputFunctionSet)
outputFunctionSets = append(outputFunctionSets, outputFunctionSet)
}
return &outputFunctionSets
}
func GetAll(db *gorm.DB) *[]FunctionSet {
var outputFunctionSetIDs []int
result := db.Model(&FunctionSet{}).Select("id").Find(&outputFunctionSetIDs)
if result.Error != nil {
log.Println(result.Error)
}
return Get(db, outputFunctionSetIDs)
}
func Update(db *gorm.DB, id int, functions []string) error {
outputFunctionSet := FunctionSet{
Functions: *function.Get(db, functions),
}
outputFunctionSet.ID = uint(id)
return outputFunctionSet.Update(db)
}

View file

@ -11,11 +11,11 @@ type FunctionTag struct {
Name string `gorm:"primaryKey uniqueIndex" json:"name"` Name string `gorm:"primaryKey uniqueIndex" json:"name"`
} }
func (functionTag *FunctionTag) Get(db *gorm.DB, inputFunctionTag string) { func (functionTag *FunctionTag) get(db *gorm.DB, inputFunctionTag string) {
db.Where("name = ?", inputFunctionTag).Take(&functionTag) db.Where("name = ?", inputFunctionTag).Take(&functionTag)
} }
func (functionTag FunctionTag) Update(db *gorm.DB) error { func (functionTag FunctionTag) update(db *gorm.DB) error {
result := db.Save(&functionTag) result := db.Save(&functionTag)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
@ -23,7 +23,7 @@ func (functionTag FunctionTag) Update(db *gorm.DB) error {
return nil return nil
} }
func (functionTag FunctionTag) Create(db *gorm.DB) error { func (functionTag FunctionTag) create(db *gorm.DB) error {
result := db.Create(&functionTag) result := db.Create(&functionTag)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
@ -31,11 +31,17 @@ func (functionTag FunctionTag) Create(db *gorm.DB) error {
return nil return nil
} }
func Create(db *gorm.DB, name string) error {
return FunctionTag{
Name: name,
}.create(db)
}
func Get(db *gorm.DB, inputFunctionTags []string) *[]FunctionTag { func Get(db *gorm.DB, inputFunctionTags []string) *[]FunctionTag {
var outputFunctionTags []FunctionTag var outputFunctionTags []FunctionTag
for _, inputFunctionTag := range inputFunctionTags { for _, inputFunctionTag := range inputFunctionTags {
var outputFunctionTag FunctionTag var outputFunctionTag FunctionTag
outputFunctionTag.Get(db, inputFunctionTag) outputFunctionTag.get(db, inputFunctionTag)
outputFunctionTags = append(outputFunctionTags, outputFunctionTag) outputFunctionTags = append(outputFunctionTags, outputFunctionTag)
} }
return &outputFunctionTags return &outputFunctionTags
@ -51,3 +57,9 @@ func GetAll(db *gorm.DB) *[]FunctionTag {
outputFunctionTags = *Get(db, outputFunctionTagNames) outputFunctionTags = *Get(db, outputFunctionTagNames)
return &outputFunctionTags return &outputFunctionTags
} }
func Update(db *gorm.DB, name string) error {
return FunctionTag{
Name: name,
}.update(db)
}

View file

@ -1,34 +1,34 @@
module example.com/database/commands module example.com/database
go 1.24.2 go 1.24.2
replace example.com/database/user => ../user replace example.com/database/user => ./user
replace example.com/database/character => ../character replace example.com/database/character => ./character
replace example.com/database/functionset => ../functionset replace example.com/database/functionset => ./functionset
replace example.com/database/inventoryslot => ../inventoryslot replace example.com/database/inventoryslot => ./inventoryslot
replace example.com/database/customization => ../customization replace example.com/database/customization => ./customization
replace example.com/database/item => ../item replace example.com/database/item => ./item
replace example.com/database/itemtag => ../itemtag replace example.com/database/itemtag => ./itemtag
replace example.com/database/person => ../person replace example.com/database/person => ./person
replace example.com/database/role => ../role replace example.com/database/role => ./role
replace example.com/database/schematic => ../schematic replace example.com/database/schematic => ./schematic
replace example.com/database/tier => ../tier replace example.com/database/tier => ./tier
replace example.com/database/group => ../group replace example.com/database/group => ./group
replace example.com/database/function => ../function replace example.com/database/function => ./function
replace example.com/database/functiontag => ../functiontag replace example.com/database/functiontag => ./functiontag
require ( require (
example.com/database/character v0.0.0 example.com/database/character v0.0.0

View file

@ -31,6 +31,12 @@ func (group Group) Create(db *gorm.DB) error {
return nil return nil
} }
func Create(db *gorm.DB, name string) error {
return Group{
Name: name,
}.Create(db)
}
func Get(db *gorm.DB, inputGroups []string) *[]Group { func Get(db *gorm.DB, inputGroups []string) *[]Group {
var outputGroups []Group var outputGroups []Group
for _, inputGroup := range inputGroups { for _, inputGroup := range inputGroups {

View file

@ -11,7 +11,7 @@ type ItemTag struct {
Name string `gorm:"primaryKey uniqueIndex" json:"name"` Name string `gorm:"primaryKey uniqueIndex" json:"name"`
} }
func CreateDatabaseItemTag(db *gorm.DB, itemTag ItemTag) error { func (itemTag ItemTag) Create(db *gorm.DB) error {
result := db.Create(&itemTag) result := db.Create(&itemTag)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
@ -19,39 +19,45 @@ func CreateDatabaseItemTag(db *gorm.DB, itemTag ItemTag) error {
return nil return nil
} }
func GetDatabaseItemTag(db *gorm.DB, inputItemTag string) ItemTag { func (itemTag *ItemTag) Get(db *gorm.DB, inputItemTag string) {
var outputItemTag ItemTag db.Where("name = ?", inputItemTag).Take(&itemTag)
result := db.Model(&ItemTag{}).Where("name = ?", outputItemTag).Take(&outputItemTag)
if result.Error != nil {
return ItemTag{}
}
return outputItemTag
} }
func GetDatabaseItemTags(db *gorm.DB, inputItemTags []string) []ItemTag { func (itemTag ItemTag) Update(db *gorm.DB) error {
var outputItemTags []ItemTag
for _, inputItemTag := range inputItemTags {
outputItemTags = append(outputItemTags, GetDatabaseItemTag(db, inputItemTag))
}
return outputItemTags
}
func GetAllDatabaseItemTags(db *gorm.DB) []ItemTag {
var outputItemTags []ItemTag
result := db.Find(&outputItemTags)
if result.Error != nil {
log.Println(result.Error)
}
for index, outputItemTag := range outputItemTags {
outputItemTags[index] = GetDatabaseItemTag(db, outputItemTag.Name)
}
return outputItemTags
}
func UpdateDatabaseItemTag(db *gorm.DB, itemTag ItemTag) error {
result := db.Save(&itemTag) result := db.Save(&itemTag)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
} }
return nil return nil
} }
func Create(db *gorm.DB, name string) error {
return ItemTag{
Name: name,
}.Create(db)
}
func Get(db *gorm.DB, inputItemTags []string) *[]ItemTag {
var outputItemTags []ItemTag
for _, inputItemTag := range inputItemTags {
var outputItemTag ItemTag
outputItemTag.Get(db, inputItemTag)
outputItemTags = append(outputItemTags, outputItemTag)
}
return &outputItemTags
}
func GetAll(db *gorm.DB) *[]ItemTag {
var outputItemTagNames []string
result := db.Model(&ItemTag{}).Select("name").Find(&outputItemTagNames)
if result.Error != nil {
log.Println(result.Error)
}
return Get(db, outputItemTagNames)
}
func Update(db *gorm.DB, name string) error {
return ItemTag{
Name: name,
}.Update(db)
}

View file

@ -13,7 +13,7 @@ type Tier struct {
FunctionSets []functionset.FunctionSet `gorm:"many2many:tier_functionset_associations" json:"function_sets"` FunctionSets []functionset.FunctionSet `gorm:"many2many:tier_functionset_associations" json:"function_sets"`
} }
func CreateDatabaseTier(db *gorm.DB, tier Tier) error { func (tier Tier) Create(db *gorm.DB) error {
result := db.Create(&tier) result := db.Create(&tier)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
@ -21,40 +21,52 @@ func CreateDatabaseTier(db *gorm.DB, tier Tier) error {
return nil return nil
} }
func GetDatabaseTier(db *gorm.DB, inputTier int) Tier { func (tier *Tier) getAssociations(db *gorm.DB) {
var outputTier Tier db.Model(&tier).Association("FunctionSets").Find(&tier.FunctionSets)
result := db.Model(&Tier{}).Where("id = ?", inputTier).Take(&outputTier)
if result.Error != nil {
return Tier{}
}
db.Model(&outputTier).Association("FunctionSets").Find(&outputTier.FunctionSets)
return outputTier
} }
func GetDatabaseTiers(db *gorm.DB, inputTiers []int) []Tier { func (tier *Tier) Get(db *gorm.DB, inputTier int) {
var outputTiers []Tier db.Where("id = ?", inputTier).Take(&tier)
for _, inputTier := range inputTiers { tier.getAssociations(db)
outputTiers = append(outputTiers, GetDatabaseTier(db, inputTier))
}
return outputTiers
} }
func GetAllDatabaseTiers(db *gorm.DB) []Tier { func (tier Tier) Update(db *gorm.DB) error {
var outputTiers []Tier
result := db.Find(&outputTiers)
if result.Error != nil {
log.Println(result.Error)
}
for index, outputTier := range outputTiers {
outputTiers[index] = GetDatabaseTier(db, int(outputTier.ID))
}
return outputTiers
}
func UpdateDatabaseTier(db *gorm.DB, tier Tier) error {
result := db.Save(&tier) result := db.Save(&tier)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
} }
return nil return nil
} }
func Create(db *gorm.DB, functionSets []int) error {
return Tier{
FunctionSets: *functionset.Get(db, functionSets),
}.Create(db)
}
func Get(db *gorm.DB, inputTiers []int) *[]Tier {
var outputTiers []Tier
for _, inputTier := range inputTiers {
var outputTier Tier
outputTier.Get(db, inputTier)
outputTiers = append(outputTiers, outputTier)
}
return &outputTiers
}
func GetAll(db *gorm.DB) *[]Tier {
var outputTierIDs []int
result := db.Find(&outputTierIDs)
if result.Error != nil {
log.Println(result.Error)
}
return Get(db, outputTierIDs)
}
func Update(db *gorm.DB, id int, functionSets []int) error {
outputTier := Tier{
FunctionSets: *functionset.Get(db, functionSets),
}
outputTier.ID = uint(id)
return outputTier.Update(db)
}

View file

@ -41,6 +41,10 @@ func (user User) Create(db *gorm.DB) error {
return nil return nil
} }
func Logout(db *gorm.DB, oauthToken string) {
db.Model(&User{}).Where("login_token = ?", oauthToken).Update("logged_in", false)
}
func Exists(db *gorm.DB, id string) bool { func Exists(db *gorm.DB, id string) bool {
var queryUser User var queryUser User
result := db.Where("id = ?", id).Take(&queryUser) result := db.Where("id = ?", id).Take(&queryUser)