s1llyw0rdz/storage/user.go
2021-11-22 09:05:57 +01:00

69 lines
1.6 KiB
Go

package storage
import (
"status/model"
)
const queryFindName = `SELECT name, hash, created_at FROM users WHERE name=lower($1);`
const queryFindDomain = `SELECT name, hash, created_at FROM users WHERE domain=$1;`
func (s *Storage) queryUser(q string, params ...interface{}) (user model.User, err error) {
err = s.db.QueryRow(q, params...).Scan(&user.Name, &user.Hash, &user.CreatedAt)
return
}
func (s *Storage) UserExists(name string) bool {
var rv bool
s.db.QueryRow(`SELECT true FROM users WHERE name=lower($1)`, name).Scan(&rv)
return rv
}
func (s *Storage) UserByName(name string) (model.User, error) {
return s.queryUser(queryFindName, name)
}
func (s *Storage) CreateUser(user model.User) error {
hash, err := user.HashPassword()
if err != nil {
return err
}
insertUser := `INSERT INTO users (name, hash) VALUES (lower($1), $2)`
statement, err := s.db.Prepare(insertUser)
if err != nil {
return err
}
_, err = statement.Exec(user.Name, hash)
return err
}
func (s *Storage) Users() ([]string, error) {
rows, err := s.db.Query("select name from users")
if err != nil {
return nil, err
}
var users []string
for rows.Next() {
var user string
err := rows.Scan(&user)
if err != nil {
return users, err
}
users = append(users, user)
}
return users, nil
}
func (s *Storage) DeleteUser(username string) error {
stmt, err := s.db.Prepare(`DELETE from status WHERE author = $1;`)
if err != nil {
return err
}
_, err = stmt.Exec(username)
stmt, err = s.db.Prepare(`DELETE from users WHERE name = $1;`)
if err != nil {
return err
}
_, err = stmt.Exec(username)
return err
}