From 369e438bf2b38854b2513f2656d1ca450c1724b3 Mon Sep 17 00:00:00 2001 From: Nicolas Duhamel Date: Tue, 16 Feb 2016 22:23:19 +0100 Subject: [PATCH] Use uuid --- shows/shows.go | 2 +- sql/0001_initial.down.sql | 2 ++ sql/0001_initial.up.sql | 56 +++++++++++++++++++++------------------ sqly/sqly.go | 2 +- users/users.go | 4 +-- 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/shows/shows.go b/shows/shows.go index ddff65d..80e7315 100644 --- a/shows/shows.go +++ b/shows/shows.go @@ -78,7 +78,7 @@ func (s *Show) IsTracked() bool { } func (s *Show) Add(db *sqlx.DB) error { - var id int + var id string r, err := db.NamedQuery(addShowQuery, s) if err != nil { return err diff --git a/sql/0001_initial.down.sql b/sql/0001_initial.down.sql index d52d74c..9bb2c81 100644 --- a/sql/0001_initial.down.sql +++ b/sql/0001_initial.down.sql @@ -5,5 +5,7 @@ DROP TABLE shows; DROP TABLE tokens; DROP TABLE users; +DROP TABLE base; + DROP FUNCTION update_modified_column(); diff --git a/sql/0001_initial.up.sql b/sql/0001_initial.up.sql index 0b902b4..7b8ab4d 100644 --- a/sql/0001_initial.up.sql +++ b/sql/0001_initial.up.sql @@ -1,3 +1,6 @@ +-- Enable UUID generation +CREATE EXTENSION IF NOT EXISTS pgcrypto; + CREATE OR REPLACE FUNCTION update_modified_column() RETURNS TRIGGER AS $$ BEGIN @@ -5,50 +8,51 @@ BEGIN RETURN NEW; END; $$ language 'plpgsql'; +CREATE TABLE base ( + updated timestamp DEFAULT current_timestamp, + created timestamp DEFAULT current_timestamp +); + CREATE TABLE users ( - id SERIAL PRIMARY KEY, - name text NOT NULL UNIQUE, - updated timestamp DEFAULT current_timestamp, - created timestamp DEFAULT current_timestamp + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + name text NOT NULL UNIQUE, + LIKE base INCLUDING DEFAULTS ); CREATE TRIGGER update_users BEFORE UPDATE ON users FOR EACH ROW EXECUTE PROCEDURE update_modified_column(); -CREATE TABLE tokens ( - id SERIAL, - value text NOT NULL UNIQUE, - users_id integer REFERENCES users (id) ON DELETE CASCADE, - updated timestamp DEFAULT current_timestamp, - created timestamp DEFAULT current_timestamp +CREATE TABLE tokens ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + value text NOT NULL UNIQUE, + users_id uuid REFERENCES users (id) ON DELETE CASCADE, +LIKE base INCLUDING DEFAULTS ); CREATE TRIGGER update_tokens BEFORE UPDATE ON tokens FOR EACH ROW EXECUTE PROCEDURE update_modified_column(); CREATE TABLE shows ( - id SERIAL PRIMARY KEY, - imdbid text NOT NULL UNIQUE, - title text NOT NULL, - updated timestamp DEFAULT current_timestamp, - created timestamp DEFAULT current_timestamp + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + imdbid text NOT NULL UNIQUE, + title text NOT NULL, + LIKE base INCLUDING DEFAULTS ); CREATE TRIGGER update_shows BEFORE UPDATE ON shows FOR EACH ROW EXECUTE PROCEDURE update_modified_column(); CREATE TABLE episodes ( - id SERIAL PRIMARY KEY, - shows_id integer REFERENCES shows (id) ON DELETE CASCADE, - title text NOT NULL, - season integer NOT NULL, - episode integer NOT NULL, - updated timestamp DEFAULT current_timestamp, - created timestamp DEFAULT current_timestamp + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + shows_id uuid REFERENCES shows (id) ON DELETE CASCADE, + title text NOT NULL, + season integer NOT NULL, + episode integer NOT NULL, + LIKE base INCLUDING DEFAULTS ); CREATE TRIGGER update_episodes BEFORE UPDATE ON episodes FOR EACH ROW EXECUTE PROCEDURE update_modified_column(); CREATE TABLE shows_tracked ( - shows_id integer NOT NULL REFERENCES shows (id) ON DELETE CASCADE, - users_id integer NOT NULL REFERENCES users (id) ON DELETE CASCADE, - season integer NOT NULL, - episode integer NOT NULL + shows_id uuid NOT NULL REFERENCES shows (id) ON DELETE CASCADE, + users_id uuid NOT NULL REFERENCES users (id) ON DELETE CASCADE, + season integer NOT NULL, + episode integer NOT NULL ); diff --git a/sqly/sqly.go b/sqly/sqly.go index c0e3713..670e8c4 100644 --- a/sqly/sqly.go +++ b/sqly/sqly.go @@ -11,7 +11,7 @@ import ( // BaseTable have to be embeded in all your struct which reflect a table type BaseTable struct { - ID int + ID string Updated time.Time Created time.Time } diff --git a/users/users.go b/users/users.go index 0f86f3b..4a4c9df 100644 --- a/users/users.go +++ b/users/users.go @@ -44,7 +44,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 int + var id string err := q.QueryRowx(addUserQuery, u.Name).Scan(&id) if err != nil { return err @@ -87,7 +87,7 @@ func (u *User) NewToken(ex *sqlx.DB) (*Token, error) { Value: random.String(50), } - var id int + var id string err := ex.QueryRowx(addTokenQuery, t.Value, u.ID).Scan(&id) if err != nil { return nil, err