diff --git a/shows/shows.go b/shows/shows.go index 0799dd4..1174b70 100644 --- a/shows/shows.go +++ b/shows/shows.go @@ -111,6 +111,8 @@ func (s *Show) GetDetails(db *sqlx.DB, log *logrus.Entry) error { // Unexpected error return err } + + // so we got ErrNotFound so GetDetails from a detailer err = s.Show.GetDetails(log) if err != nil { return err diff --git a/sql/0001_initial.up.sql b/sql/0001_initial.up.sql index e04d723..6703605 100644 --- a/sql/0001_initial.up.sql +++ b/sql/0001_initial.up.sql @@ -16,6 +16,7 @@ CREATE TABLE base ( CREATE TABLE users ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), name text NOT NULL UNIQUE, + hash text NOT NULL, LIKE base INCLUDING DEFAULTS ); CREATE TRIGGER update_users BEFORE UPDATE ON users FOR EACH ROW EXECUTE PROCEDURE update_modified_column(); diff --git a/users/users.go b/users/users.go index 4a4c9df..b837d73 100644 --- a/users/users.go +++ b/users/users.go @@ -9,9 +9,9 @@ import ( ) const ( - addUserQuery = `INSERT INTO users (name) VALUES ($1) RETURNING id;` + addUserQuery = `INSERT INTO users (name, hash) VALUES ($1, $2) RETURNING id;` getUserQuery = `SELECT * FROM users WHERE name=$1;` - updateUserQuery = `UPDATE users SET name=$1 RETURNING *;` + updateUserQuery = `UPDATE users SET name=:name, hash=:hash RETURNING *;` deleteUseQuery = `DELETE FROM users WHERE id=:id;` addTokenQuery = `INSERT INTO tokens (value, users_id) VALUES ($1, $2) RETURNING id;` @@ -24,6 +24,7 @@ const ( type User struct { sqly.BaseTable Name string + Hash string } // Token represents a token @@ -45,7 +46,7 @@ func Get(q sqlx.Queryer, name string) (*User, error) { // Add user to database or raises an error func (u *User) Add(q sqlx.Queryer) error { var id string - err := q.QueryRowx(addUserQuery, u.Name).Scan(&id) + err := q.QueryRowx(addUserQuery, u.Name, u.Hash).Scan(&id) if err != nil { return err } @@ -55,10 +56,13 @@ func (u *User) Add(q sqlx.Queryer) error { // Update user on database or raise an error func (u *User) Update(ex *sqlx.DB) error { - err := ex.Get(u, updateUserQuery, u.Name) + rows, err := ex.NamedQuery(updateUserQuery, u) if err != nil { return err } + for rows.Next() { + rows.StructScan(u) + } return nil } diff --git a/users/users_test.go b/users/users_test.go index 08a1cc8..8b3ab08 100644 --- a/users/users_test.go +++ b/users/users_test.go @@ -31,7 +31,7 @@ func TestUser(t *testing.T) { sqly.RunWithLastestMigration(db, pgdsn, t, func(db *sqlx.DB, t *testing.T) { // Add a new user - u := &User{Name: "plop"} + u := &User{Name: "plop", Hash: "plop"} err := u.Add(db) if err != nil { t.Fatal(err) @@ -98,7 +98,7 @@ func TestUser(t *testing.T) { func TestTokenAddDelete(t *testing.T) { sqly.RunWithLastestMigration(db, pgdsn, t, func(db *sqlx.DB, t *testing.T) { // Add a new user - u := &User{Name: "plop"} + u := &User{Name: "plop", Hash: "plop"} err := u.Add(db) if err != nil { t.Fatal(err) @@ -157,7 +157,7 @@ func TestTokenAddDelete(t *testing.T) { func TestTokenCheck(t *testing.T) { sqly.RunWithLastestMigration(db, pgdsn, t, func(db *sqlx.DB, t *testing.T) { - u := &User{Name: "plop"} + u := &User{Name: "plop", Hash: "plop"} u.Add(db) token, err := u.NewToken(db) @@ -183,7 +183,7 @@ func TestTokenCheck(t *testing.T) { func TestAutoUpdateCols(t *testing.T) { sqly.RunWithLastestMigration(db, pgdsn, t, func(db *sqlx.DB, t *testing.T) { - u := &User{Name: "plop"} + u := &User{Name: "plop", Hash: "plop"} u.Add(db) u.Name = "toto" u.Update(db)