package data import ( "database/sql" "errors" "time" ) type User struct { Username string Password string // bcrypt hash CreatedAt time.Time } func GetUser(username string) (*User, error) { const q = `SELECT username, password, created_at FROM users WHERE username = $1` var u User err := DB().QueryRow(q, username).Scan(&u.Username, &u.Password, &u.CreatedAt) if err != nil { if errors.Is(err, sql.ErrNoRows) { return nil, nil } return nil, err } return &u, nil } func CreateUser(username, passwordHash string) error { const q = `INSERT INTO users (username, password, created_at) VALUES ($1, $2, NOW()) ON CONFLICT (username) DO NOTHING` _, err := DB().Exec(q, username, passwordHash) return err }