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