init
This commit is contained in:
commit
b38c39030b
22 changed files with 1925 additions and 0 deletions
77
internal/app/db.go
Normal file
77
internal/app/db.go
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
package app
|
||||
|
||||
import "context"
|
||||
|
||||
func (a *App) migrate(ctx context.Context) error {
|
||||
ddl := []string{
|
||||
`CREATE TABLE IF NOT EXISTS workspaces (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
unix_user TEXT NOT NULL,
|
||||
UNIQUE(user_id, name),
|
||||
UNIQUE(user_id, unix_user)
|
||||
);`,
|
||||
`CREATE TABLE IF NOT EXISTS projects (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id TEXT NOT NULL,
|
||||
workspace_id BIGINT REFERENCES workspaces(id) ON DELETE RESTRICT,
|
||||
name TEXT NOT NULL,
|
||||
slug TEXT NOT NULL,
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
repo_url TEXT NOT NULL DEFAULT '',
|
||||
service_name TEXT NOT NULL,
|
||||
route_host TEXT NOT NULL DEFAULT '',
|
||||
target_port INT NOT NULL DEFAULT 8000,
|
||||
deploy_token TEXT NOT NULL DEFAULT '',
|
||||
provision_state TEXT NOT NULL DEFAULT 'provisioned',
|
||||
provision_error TEXT NOT NULL DEFAULT '',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
UNIQUE (user_id, slug)
|
||||
);`,
|
||||
`CREATE TABLE IF NOT EXISTS project_env_vars (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
project_id BIGINT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||||
key TEXT NOT NULL,
|
||||
value TEXT NOT NULL,
|
||||
UNIQUE(project_id, key)
|
||||
);`,
|
||||
}
|
||||
for _, q := range ddl {
|
||||
if _, err := a.db.ExecContext(ctx, q); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
alter := []string{
|
||||
`ALTER TABLE projects ADD COLUMN IF NOT EXISTS route_host TEXT NOT NULL DEFAULT '';`,
|
||||
`ALTER TABLE projects ADD COLUMN IF NOT EXISTS target_port INT NOT NULL DEFAULT 8000;`,
|
||||
`ALTER TABLE projects ADD COLUMN IF NOT EXISTS workspace_id BIGINT REFERENCES workspaces(id) ON DELETE RESTRICT;`,
|
||||
`ALTER TABLE projects ADD COLUMN IF NOT EXISTS deploy_token TEXT NOT NULL DEFAULT '';`,
|
||||
`ALTER TABLE projects ADD COLUMN IF NOT EXISTS provision_state TEXT NOT NULL DEFAULT 'provisioned';`,
|
||||
`ALTER TABLE projects ADD COLUMN IF NOT EXISTS provision_error TEXT NOT NULL DEFAULT '';`,
|
||||
}
|
||||
for _, q := range alter {
|
||||
if _, err := a.db.ExecContext(ctx, q); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
rows, err := a.db.QueryContext(ctx, `SELECT id FROM projects WHERE deploy_token=''`)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var id int64
|
||||
if err := rows.Scan(&id); err != nil {
|
||||
return err
|
||||
}
|
||||
tok, err := newDeployToken()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := a.db.ExecContext(ctx, `UPDATE projects SET deploy_token=$1 WHERE id=$2`, tok, id); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return rows.Err()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue