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 }