33 lines
730 B
Go
33 lines
730 B
Go
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
|
|
}
|