canape/users.go

62 lines
1.2 KiB
Go

package users
import "github.com/jmoiron/sqlx"
const usersCreate = `
CREATE TABLE users (
id SERIAL,
name text NOT NULL UNIQUE
);
`
const (
addUserQuery = `INSERT INTO users (name) VALUES ($1) RETURNING id;`
getUserQuery = `SELECT * FROM users WHERE name=$1;`
updateUserQuery = `UPDATE users SET (name)=(:name);`
deleteUseQuery = `DELETE FROM users WHERE id=:id;`
)
// User represents an user
type User struct {
ID int
Name string
}
// Get returns user with specified name
func Get(q sqlx.Queryer, name string) (*User, error) {
u := &User{}
err := q.QueryRowx(getUserQuery, name).StructScan(u)
if err != nil {
return nil, err
}
return u, nil
}
// Add user to database or raises an error
func (u *User) Add(q sqlx.Queryer) error {
var id int
err := q.QueryRowx(addUserQuery, u.Name).Scan(&id)
if err != nil {
return err
}
u.ID = id
return nil
}
// Update user on database or raise an error
func (u *User) Update(ex *sqlx.DB) error {
_, err := ex.NamedExec(updateUserQuery, u)
if err != nil {
return err
}
return nil
}
// Delete user from database or raise an error
func (u *User) Delete(ex *sqlx.DB) error {
_, err := ex.NamedExec(deleteUseQuery, u)
if err != nil {
return err
}
return nil
}