199 lines
4.5 KiB
Go
199 lines
4.5 KiB
Go
|
package schema
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
)
|
||
|
|
||
|
// SQL statement to create the User Table.
|
||
|
var userTableStmt = `
|
||
|
CREATE TABLE users (
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
||
|
,email VARCHAR(255) UNIQUE
|
||
|
,password VARCHAR(255)
|
||
|
,token VARCHAR(255) UNIQUE
|
||
|
,name VARCHAR(255)
|
||
|
,gravatar VARCHAR(255)
|
||
|
,created TIMESTAMP
|
||
|
,updated TIMESTAMP
|
||
|
,admin BOOLEAN
|
||
|
,github_login VARCHAR(255)
|
||
|
,github_token VARCHAR(255)
|
||
|
,bitbucket_login VARCHAR(255)
|
||
|
,bitbucket_token VARCHAR(255)
|
||
|
,bitbucket_secret VARCHAR(255)
|
||
|
);
|
||
|
`
|
||
|
|
||
|
// SQL statement to create the Team Table.
|
||
|
var teamTableStmt = `
|
||
|
CREATE TABLE teams (
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
||
|
,slug VARCHAR(255) UNIQUE
|
||
|
,name VARCHAR(255)
|
||
|
,email VARCHAR(255)
|
||
|
,gravatar VARCHAR(255)
|
||
|
,created TIMESTAMP
|
||
|
,updated TIMESTAMP
|
||
|
);
|
||
|
`
|
||
|
|
||
|
// SQL statement to create the Member Table.
|
||
|
var memberTableStmt = `
|
||
|
CREATE TABLE members (
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
||
|
,team_id INTEGER
|
||
|
,user_id INTEGER
|
||
|
,role INTEGER
|
||
|
);
|
||
|
`
|
||
|
|
||
|
// SQL statement to create the Repo Table.
|
||
|
var repoTableStmt = `
|
||
|
CREATE TABLE repos (
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
||
|
,slug VARCHAR(1024) UNIQUE
|
||
|
,host VARCHAR(255)
|
||
|
,owner VARCHAR(255)
|
||
|
,name VARCHAR(255)
|
||
|
,private BOOLEAN
|
||
|
,disabled BOOLEAN
|
||
|
,disabled_pr BOOLEAN
|
||
|
,priveleged BOOLEAN
|
||
|
,timeout INTEGER
|
||
|
,scm VARCHAR(25)
|
||
|
,url VARCHAR(1024)
|
||
|
,username VARCHAR(255)
|
||
|
,password VARCHAR(255)
|
||
|
,public_key VARCHAR(1024)
|
||
|
,private_key VARCHAR(1024)
|
||
|
,params VARCHAR(2000)
|
||
|
,created TIMESTAMP
|
||
|
,updated TIMESTAMP
|
||
|
,user_id INTEGER
|
||
|
,team_id INTEGER
|
||
|
);
|
||
|
`
|
||
|
|
||
|
// SQL statement to create the Commit Table.
|
||
|
var commitTableStmt = `
|
||
|
CREATE TABLE commits (
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
||
|
,repo_id INTEGER
|
||
|
,status VARCHAR(255)
|
||
|
,started TIMESTAMP
|
||
|
,finished TIMESTAMP
|
||
|
,duration INTEGER
|
||
|
,attempts INTEGER
|
||
|
,hash VARCHAR(255)
|
||
|
,branch VARCHAR(255)
|
||
|
,pull_request VARCHAR(255)
|
||
|
,author VARCHAR(255)
|
||
|
,gravatar VARCHAR(255)
|
||
|
,timestamp VARCHAR(255)
|
||
|
,message VARCHAR(255)
|
||
|
,created TIMESTAMP
|
||
|
,updated TIMESTAMP
|
||
|
);
|
||
|
`
|
||
|
|
||
|
// SQL statement to create the Build Table.
|
||
|
var buildTableStmt = `
|
||
|
CREATE TABLE builds (
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
||
|
,commit_id INTEGER
|
||
|
,slug VARCHAR(255)
|
||
|
,status VARCHAR(255)
|
||
|
,started TIMESTAMP
|
||
|
,finished TIMESTAMP
|
||
|
,duration INTEGER
|
||
|
,created TIMESTAMP
|
||
|
,updated TIMESTAMP
|
||
|
,stdout BLOB
|
||
|
);
|
||
|
`
|
||
|
|
||
|
// SQL statement to create the Settings
|
||
|
var settingsTableStmt = `
|
||
|
CREATE TABLE settings (
|
||
|
id INTEGER PRIMARY KEY
|
||
|
,github_key VARCHAR(255)
|
||
|
,github_secret VARCHAR(255)
|
||
|
,bitbucket_key VARCHAR(255)
|
||
|
,bitbucket_secret VARCHAR(255)
|
||
|
,smtp_server VARCHAR(1024)
|
||
|
,smtp_port VARCHAR(5)
|
||
|
,smtp_address VARCHAR(1024)
|
||
|
,smtp_username VARCHAR(1024)
|
||
|
,smtp_password VARCHAR(1024)
|
||
|
,hostname VARCHAR(1024)
|
||
|
,scheme VARCHAR(5)
|
||
|
);
|
||
|
`
|
||
|
|
||
|
var memberUniqueIndex = `
|
||
|
CREATE UNIQUE INDEX member_uix ON members (team_id, user_id);
|
||
|
`
|
||
|
|
||
|
var memberTeamIndex = `
|
||
|
CREATE INDEX member_team_ix ON members (team_id);
|
||
|
`
|
||
|
|
||
|
var memberUserIndex = `
|
||
|
CREATE INDEX member_user_ix ON members (user_id);
|
||
|
`
|
||
|
|
||
|
var commitUniqueIndex = `
|
||
|
CREATE UNIQUE INDEX commits_uix ON commits (repo_id, hash, branch);
|
||
|
`
|
||
|
|
||
|
var commitRepoIndex = `
|
||
|
CREATE INDEX commits_repo_ix ON commits (repo_id);
|
||
|
`
|
||
|
|
||
|
var commitBranchIndex = `
|
||
|
CREATE INDEX commits_repo_ix ON commits (repo_id, branch);
|
||
|
`
|
||
|
|
||
|
var repoTeamIndex = `
|
||
|
CREATE INDEX repo_team_ix ON repos (team_id);
|
||
|
`
|
||
|
|
||
|
var repoUserIndex = `
|
||
|
CREATE INDEX repo_user_ix ON repos (user_id);
|
||
|
`
|
||
|
|
||
|
var buildCommitIndex = `
|
||
|
CREATE INDEX builds_commit_ix ON builds (commit_id);
|
||
|
`
|
||
|
|
||
|
var buildSlugIndex = `
|
||
|
CREATE INDEX builds_commit_slug_ix ON builds (commit_id, slug);
|
||
|
`
|
||
|
|
||
|
// Load will apply the DDL commands to
|
||
|
// the provided database.
|
||
|
func Load(db *sql.DB) error {
|
||
|
|
||
|
// created tables
|
||
|
db.Exec(userTableStmt)
|
||
|
db.Exec(teamTableStmt)
|
||
|
db.Exec(memberTableStmt)
|
||
|
db.Exec(repoTableStmt)
|
||
|
db.Exec(commitTableStmt)
|
||
|
db.Exec(buildTableStmt)
|
||
|
db.Exec(settingsTableStmt)
|
||
|
|
||
|
db.Exec(memberUniqueIndex)
|
||
|
db.Exec(memberTeamIndex)
|
||
|
db.Exec(memberUserIndex)
|
||
|
db.Exec(commitUniqueIndex)
|
||
|
db.Exec(commitRepoIndex)
|
||
|
db.Exec(commitBranchIndex)
|
||
|
db.Exec(repoTeamIndex)
|
||
|
db.Exec(repoUserIndex)
|
||
|
db.Exec(buildCommitIndex)
|
||
|
db.Exec(buildSlugIndex)
|
||
|
|
||
|
return nil
|
||
|
}
|