You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

47 lines
1017 B

package models
import (
"database/sql"
"errors"
)
type User struct {
ID int
Username string
PasswordHash string
CreatedAt string
}
type UserStore struct {
DB *sql.DB
}
func (s *UserStore) GetByUsername(username string) (*User, error) {
var u User
err := s.DB.QueryRow(`SELECT id, username, password_hash, created_at FROM admin_users WHERE username = ?`, username).
Scan(&u.ID, &u.Username, &u.PasswordHash, &u.CreatedAt)
if err == sql.ErrNoRows {
return nil, nil
}
return &u, err
}
func (s *UserStore) Create(username, passwordHash string) error {
_, err := s.DB.Exec(`INSERT INTO admin_users (username, password_hash) VALUES (?, ?)`, username, passwordHash)
return err
}
func (s *UserStore) SeedAdmin(username, passwordHash string) error {
existing, err := s.GetByUsername(username)
if err != nil {
return err
}
if existing != nil {
return nil
}
err = s.Create(username, passwordHash)
if err != nil && errors.Is(err, sql.ErrNoRows) {
return nil
}
return err
}