69 lines
1.6 KiB
Go
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
|
|
}
|
|
|