Add Get user
This commit is contained in:
parent
2aeb634287
commit
1a43dd6ba4
26
users.go
26
users.go
@ -5,10 +5,13 @@ import "github.com/jmoiron/sqlx"
|
||||
const usersCreate = `
|
||||
CREATE TABLE users (
|
||||
id SERIAL,
|
||||
name text NOT NULL
|
||||
name text NOT NULL UNIQUE
|
||||
);
|
||||
`
|
||||
const addUserQuery = `INSERT INTO users (name) VALUES ($1);`
|
||||
const (
|
||||
addUserQuery = `INSERT INTO users (name) VALUES ($1) RETURNING id;`
|
||||
getUserQuery = `SELECT * FROM users WHERE name=$1;`
|
||||
)
|
||||
|
||||
// User represents an user
|
||||
type User struct {
|
||||
@ -16,11 +19,26 @@ type User struct {
|
||||
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(ex sqlx.Execer) error {
|
||||
_, err := ex.Exec(addUserQuery, u.Name)
|
||||
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.Execer) error {
|
||||
|
@ -8,7 +8,8 @@ import (
|
||||
"gitlab.quimbo.fr/odwrtw/canape-sql/sqltest"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
_ "github.com/lib/pq"
|
||||
"github.com/kr/pretty"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
const drop = `DROP TABLE users;`
|
||||
@ -30,5 +31,28 @@ func init() {
|
||||
func TestAdd(t *testing.T) {
|
||||
sqltest.RunWithSchema(db, usersCreate, drop, t, func(db *sqlx.DB, t *testing.T) {
|
||||
|
||||
// Add a new user
|
||||
u := &User{Name: "plop"}
|
||||
err := u.Add(db)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Try add it twice
|
||||
err = u.Add(db)
|
||||
if err != nil {
|
||||
if err, ok := err.(*pq.Error); ok {
|
||||
if err.Code.Name() != "unique_violation" {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
u, err = Get(db, "plop")
|
||||
|
||||
pretty.Println(err)
|
||||
pretty.Println(u)
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user