package user import ( "errors" "gorm.io/gorm" ) type User struct { gorm.Model Id string `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"` ApiKey []struct { Name string `gorm:"primaryKey uniqueIndex" json:"name"` Key string `json:"key"` } `gorm:"foreignKey:Name" json:"api_key"` } func (user *User) Get(db *gorm.DB, id string) { db.Where("id = ?", id).Take(&user) } func (user User) Update(db *gorm.DB) error { result := db.Save(&user) if result.Error != nil { return result.Error } return nil } func (user User) Create(db *gorm.DB) error { result := db.Create(&user) if result.Error != nil { return result.Error } 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 { var queryUser User result := db.Where("id = ?", id).Take(&queryUser) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return false } else { return true } } func GetTokenFromUserId(db *gorm.DB, id string) string { var dbUser User result := db.Where("id = ?", id).Select("login_token").Take(&dbUser) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return "" } else { return dbUser.LoginToken } } func GetLoggedInFromOAuthToken(db *gorm.DB, oauthTokenJSON string) bool { var queryUser User result := db.Where("login_token = ?", oauthTokenJSON).Take(&queryUser) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return false } else { return queryUser.LoggedIn } } func GetLoggedInFromDiscordId(db *gorm.DB, discordId string) bool { var queryUser User result := db.Where("id = ?", discordId).Take(&queryUser) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return false } else { return queryUser.LoggedIn } }