2025-04-28 12:38:15 -05:00
|
|
|
package user
|
|
|
|
|
|
|
|
import (
|
2025-04-30 00:45:40 -05:00
|
|
|
"log"
|
2025-04-28 12:38:15 -05:00
|
|
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
type User struct {
|
|
|
|
gorm.Model
|
2025-04-30 00:45:40 -05:00
|
|
|
Id string `gorm:"primaryKey uniqueIndex" json:"id"`
|
2025-04-28 12:38:15 -05:00
|
|
|
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"`
|
2025-04-30 00:45:40 -05:00
|
|
|
ApiKeys []struct {
|
|
|
|
Name string `json:"name"`
|
2025-04-28 12:38:15 -05:00
|
|
|
Key string `json:"key"`
|
|
|
|
} `gorm:"foreignKey:Name" json:"api_key"`
|
|
|
|
}
|
|
|
|
|
2025-04-30 00:45:40 -05:00
|
|
|
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
|
2025-04-28 12:38:15 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
func (user User) Update(db *gorm.DB) error {
|
2025-04-30 00:45:40 -05:00
|
|
|
var originalUser User
|
|
|
|
originalUser.Get(db, user.Id)
|
|
|
|
result := db.Model(&originalUser).Updates(&user)
|
2025-04-28 12:38:15 -05:00
|
|
|
if result.Error != nil {
|
|
|
|
return result.Error
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2025-04-30 00:45:40 -05:00
|
|
|
func (user User) Delete(db *gorm.DB) error {
|
|
|
|
result := db.Delete(&user)
|
2025-04-28 12:38:15 -05:00
|
|
|
if result.Error != nil {
|
|
|
|
return result.Error
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2025-04-30 00:45:40 -05:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2025-04-28 12:38:15 -05:00
|
|
|
func Exists(db *gorm.DB, id string) bool {
|
|
|
|
var queryUser User
|
2025-04-30 00:45:40 -05:00
|
|
|
err := queryUser.Get(db, id)
|
|
|
|
return (err == nil)
|
2025-04-28 12:38:15 -05:00
|
|
|
}
|
|
|
|
|
2025-04-30 00:45:40 -05:00
|
|
|
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)
|
2025-04-28 12:38:15 -05:00
|
|
|
}
|
|
|
|
|
2025-04-30 00:45:40 -05:00
|
|
|
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)
|
2025-04-28 12:38:15 -05:00
|
|
|
}
|
2025-04-30 00:45:40 -05:00
|
|
|
return &outputUsers
|
2025-04-28 12:38:15 -05:00
|
|
|
}
|
|
|
|
|
2025-04-30 00:45:40 -05:00
|
|
|
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)
|
2025-04-28 12:38:15 -05:00
|
|
|
}
|
2025-04-30 00:45:40 -05:00
|
|
|
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)
|
2025-04-28 12:38:15 -05:00
|
|
|
}
|