-- +migrate Up

CREATE TABLE users (
 user_id     SERIAL PRIMARY KEY
,user_login  VARCHAR(500)
,user_token  VARCHAR(500)
,user_secret VARCHAR(500)
,user_email  VARCHAR(500)
,user_avatar VARCHAR(500)
,user_active BOOLEAN
,user_admin  BOOLEAN
,user_hash   VARCHAR(500)

,UNIQUE(user_login)
);

CREATE TABLE repos (
 repo_id            SERIAL PRIMARY KEY
,repo_user_id       INTEGER
,repo_owner         VARCHAR(500)
,repo_name          VARCHAR(500)
,repo_full_name     VARCHAR(1000)
,repo_avatar        VARCHAR(500)
,repo_link          VARCHAR(1000)
,repo_clone         VARCHAR(1000)
,repo_branch        VARCHAR(500)
,repo_timeout       INTEGER
,repo_private       BOOLEAN
,repo_trusted       BOOLEAN
,repo_allow_pr      BOOLEAN
,repo_allow_push    BOOLEAN
,repo_allow_deploys BOOLEAN
,repo_allow_tags    BOOLEAN
,repo_hash          VARCHAR(500)

,UNIQUE(repo_owner, repo_name)
);

CREATE TABLE stars (
 star_id      SERIAL PRIMARY KEY
,star_repo_id INTEGER
,star_user_id INTEGER

,UNIQUE(star_repo_id, star_user_id)
);

CREATE INDEX ix_star_user ON builds (star_user_id);

CREATE TABLE keys (
 key_id      SERIAL PRIMARY KEY
,key_repo_id INTEGER
,key_public  BYTEA
,key_private BYTEA

,UNIQUE(key_repo_id)
);

CREATE TABLE builds (
 build_id        SERIAL PRIMARY KEY
,build_repo_id   INTEGER
,build_number    INTEGER
,build_event     VARCHAR(500)
,build_status    VARCHAR(500)
,build_created   INTEGER
,build_started   INTEGER
,build_finished  INTEGER
,build_commit    VARCHAR(500)
,build_branch    VARCHAR(500)
,build_ref       VARCHAR(500)
,build_refspec   VARCHAR(1000)
,build_remote    VARCHAR(500)
,build_title     VARCHAR(1000)
,build_message   VARCHAR(2000)
,build_timestamp INTEGER
,build_author    VARCHAR(500)
,build_avatar    VARCHAR(1000)
,build_email     VARCHAR(500)
,build_link      VARCHAR(1000)

,UNIQUE(build_number, build_repo_id)
);

CREATE INDEX ix_build_repo ON builds (build_repo_id);

CREATE TABLE jobs (
 job_id          SERIAL PRIMARY KEY
,job_node_id     INTEGER
,job_build_id    INTEGER
,job_number      INTEGER
,job_status      VARCHAR(500)
,job_exit_code   INTEGER
,job_started     INTEGER
,job_finished    INTEGER
,job_environment VARCHAR(2000)

,UNIQUE(job_build_id, job_number)
);

CREATE INDEX ix_job_build ON jobs (job_build_id);
CREATE INDEX ix_job_node  ON jobs (job_node_id);

CREATE TABLE IF NOT EXISTS logs (
 log_id     SERIAL PRIMARY KEY
,log_job_id INTEGER
,log_data   BYTEA

,UNIQUE(log_job_id)
);

CREATE TABLE IF NOT EXISTS nodes (
 node_id     INTEGER PRIMARY KEY AUTOINCREMENT
,node_addr   VARCHAR(1024)
,node_arch   VARCHAR(50)
,node_cert   BYTEA
,node_key    BYTEA
,node_ca     BYTEA
);


INSERT INTO nodes VALUES(null, 'unix:///var/run/docker.sock', 'linux_amd64', '', '', '');
INSERT INTO nodes VALUES(null, 'unix:///var/run/docker.sock', 'linux_amd64', '', '', '');

-- +migrate Down

DROP TABLE nodes;
DROP TABLE logs;
DROP TABLE jobs;
DROP TABLE builds;
DROP TABLE keys;
DROP TABLE stars;
DROP TABLE repos;
DROP TABLE users;