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

125 lines
3 KiB
Go
Raw Normal View History

package user
import (
"log"
"gorm.io/gorm"
)
type User struct {
gorm.Model
Id string `gorm:"primaryKey uniqueIndex" json:"id"`
DisplayName string `json:"display_name"`
Username string `json:"user_name"`
Avatar string `json:"avatar"`
AvatarDecoration string `json:"avatar_decoration"`
LoginToken string `json:"login_token"`
LoggedIn bool `json:"logged_in"`
ApiKeys []struct {
Name string `json:"name"`
Key string `json:"key"`
} `gorm:"foreignKey:Name" json:"api_key"`
}
func (user User) Create(db *gorm.DB) error {
result := db.Create(&user)
if result.Error != nil {
return result.Error
}
return nil
}
func (user *User) Get(db *gorm.DB, id string) error {
result := db.Where("id = ?", id).Take(&user)
if result.Error == gorm.ErrRecordNotFound {
result := db.Where("login_token = ?", id).Take(&user)
if result.Error != nil {
return result.Error
}
}
return nil
}
func (user User) Update(db *gorm.DB) error {
var originalUser User
originalUser.Get(db, user.Id)
result := db.Model(&originalUser).Updates(&user)
if result.Error != nil {
return result.Error
}
return nil
}
func (user User) Delete(db *gorm.DB) error {
result := db.Delete(&user)
if result.Error != nil {
return result.Error
}
return nil
}
func (user User) Logout(db *gorm.DB) error {
result := db.Model(&user).Update("logged_in", false)
if result.Error != nil {
return result.Error
}
return nil
}
func Logout(db *gorm.DB, oauthToken string) error {
var user User
user.Get(db, oauthToken)
return user.Logout(db)
2025-04-29 00:42:57 -05:00
}
func Exists(db *gorm.DB, id string) bool {
var queryUser User
err := queryUser.Get(db, id)
return (err == nil)
}
func Create(db *gorm.DB, id string, displayName string, username string, avatar string, avatarDecoration string, loginToken string, loggedIn bool) error {
return User{
Id: id,
DisplayName: displayName,
Username: username,
Avatar: avatar,
AvatarDecoration: avatarDecoration,
LoginToken: loginToken,
LoggedIn: loggedIn,
ApiKeys: nil,
}.Create(db)
}
func Get(db *gorm.DB, inputUsers []string) *[]User {
var outputUsers []User
for _, inputUser := range inputUsers {
var outputUser User
outputUser.Get(db, inputUser)
outputUsers = append(outputUsers, outputUser)
}
return &outputUsers
}
func GetAll(db *gorm.DB) *[]User {
var outputUserIDs []string
result := db.Model(&User{}).Select("id").Find(&outputUserIDs)
if result.Error != nil {
log.Println(result.Error)
}
return Get(db, outputUserIDs)
}
func Update(db *gorm.DB, id string, displayName string, username string, avatar string, avatarDecoration string, loginToken string, loggedIn bool) error {
return User{
Id: id,
DisplayName: displayName,
Username: username,
Avatar: avatar,
AvatarDecoration: avatarDecoration,
LoginToken: loginToken,
LoggedIn: loggedIn,
ApiKeys: nil,
}.Update(db)
}