summaryrefslogtreecommitdiff
path: root/database/users.go
diff options
context:
space:
mode:
Diffstat (limited to 'database/users.go')
-rw-r--r--database/users.go47
1 files changed, 44 insertions, 3 deletions
diff --git a/database/users.go b/database/users.go
index 6f9456e..804b723 100644
--- a/database/users.go
+++ b/database/users.go
@@ -24,6 +24,11 @@ type User struct {
Mail string `json:"email"`
Username string `json:"preferred_username"`
DisplayName string `json:"name"`
+ Bio string `json:"bio"`
+ Location string `json:"location"`
+ Website string `json:"website"`
+ Pronouns string `json:"pronouns"` // liberals!! :O
+ Avatar string `json:"avatar"`
CreatedAt time.Time `json:"created_at"`
}
@@ -33,13 +38,38 @@ type UserSession struct {
ExpireAt time.Time `json:"expire_at"`
}
+func ListUsers(dbConn *sql.DB) ([]*User, error) {
+ log.Println("listing users")
+
+ rows, err := dbConn.Query(`SELECT id, mail, username, display_name, bio, location, website, avatar, pronouns, created_at FROM users;`)
+ if err != nil {
+ log.Println(err)
+ return nil, err
+ }
+ defer rows.Close()
+
+ var users []*User
+ for rows.Next() {
+ var user User
+ err := rows.Scan(&user.ID, &user.Mail, &user.Username, &user.DisplayName, &user.Bio, &user.Location, &user.Website, &user.Avatar, &user.Pronouns, &user.CreatedAt)
+ if err != nil {
+ log.Println(err)
+ return nil, err
+ }
+
+ users = append(users, &user)
+ }
+
+ return users, nil
+}
+
func GetUser(dbConn *sql.DB, id string) (*User, error) {
log.Println("getting user", id)
- row := dbConn.QueryRow(`SELECT id, mail, username, display_name, created_at FROM users WHERE id = ?;`, id)
+ row := dbConn.QueryRow(`SELECT id, mail, username, display_name, bio, location, website, avatar, pronouns, created_at FROM users WHERE id = ?;`, id)
var user User
- err := row.Scan(&user.ID, &user.Mail, &user.Username, &user.DisplayName, &user.CreatedAt)
+ err := row.Scan(&user.ID, &user.Mail, &user.Username, &user.DisplayName, &user.Bio, &user.Location, &user.Website, &user.Avatar, &user.Pronouns, &user.CreatedAt)
if err != nil {
log.Println(err)
return nil, err
@@ -48,7 +78,7 @@ func GetUser(dbConn *sql.DB, id string) (*User, error) {
return &user, nil
}
-func FindOrSaveUser(dbConn *sql.DB, user *User) (*User, error) {
+func FindOrSaveBaseUser(dbConn *sql.DB, user *User) (*User, error) {
log.Println("finding or saving user", user.ID)
_, err := dbConn.Exec(`INSERT INTO users (id, mail, username, display_name) VALUES (?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET mail = excluded.mail, username = excluded.username, display_name = excluded.display_name;`, user.ID, user.Mail, user.Username, user.DisplayName)
@@ -59,6 +89,17 @@ func FindOrSaveUser(dbConn *sql.DB, user *User) (*User, error) {
return user, nil
}
+func SaveUser(dbConn *sql.DB, user *User) (*User, error) {
+ log.Println("saving user", user.ID)
+
+ _, err := dbConn.Exec(`INSERT INTO users (id, mail, username, display_name, bio, location, website, pronouns, avatar) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET mail = excluded.mail, username = excluded.username, display_name = excluded.display_name, bio = excluded.bio, location = excluded.location, website = excluded.website, pronouns = excluded.pronouns, avatar = excluded.avatar;`, user.ID, user.Mail, user.Username, user.DisplayName, user.Bio, user.Location, user.Website, user.Pronouns, user.Avatar)
+ if err != nil {
+ return nil, err
+ }
+
+ return user, nil
+}
+
func MakeUserSessionFor(dbConn *sql.DB, user *User) (*UserSession, error) {
log.Println("making session for user", user.ID)