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) } 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) }