55 lines
2.1 KiB
Go
55 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
func ensureRuntimeDeviceSchema(ctx context.Context, db *pgxpool.Pool) error {
|
|
queries := []string{
|
|
`CREATE EXTENSION IF NOT EXISTS pgcrypto`,
|
|
`ALTER TABLE IF EXISTS devices ADD COLUMN IF NOT EXISTS phone_number TEXT NOT NULL DEFAULT ''`,
|
|
`ALTER TABLE IF EXISTS devices ADD COLUMN IF NOT EXISTS computer_name TEXT NOT NULL DEFAULT ''`,
|
|
`ALTER TABLE IF EXISTS devices ADD COLUMN IF NOT EXISTS device_category TEXT NOT NULL DEFAULT ''`,
|
|
`ALTER TABLE IF EXISTS devices ADD COLUMN IF NOT EXISTS loaned_to_user_id UUID REFERENCES users(id) ON DELETE SET NULL`,
|
|
`ALTER TABLE IF EXISTS devices ADD COLUMN IF NOT EXISTS loaned_until DATE`,
|
|
`
|
|
CREATE TABLE IF NOT EXISTS device_relations (
|
|
device_id UUID NOT NULL REFERENCES devices(id) ON DELETE CASCADE,
|
|
related_device_id UUID NOT NULL REFERENCES devices(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
PRIMARY KEY (device_id, related_device_id),
|
|
CONSTRAINT device_relations_no_self_reference CHECK (device_id <> related_device_id)
|
|
)
|
|
`,
|
|
`
|
|
CREATE TABLE IF NOT EXISTS milestone_hardware_child_devices (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
milestone_hardware_id TEXT NOT NULL,
|
|
milestone_device_id TEXT NOT NULL,
|
|
device_type TEXT NOT NULL,
|
|
name TEXT NOT NULL DEFAULT '',
|
|
display_name TEXT NOT NULL DEFAULT '',
|
|
short_name TEXT NOT NULL DEFAULT '',
|
|
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
recording_enabled BOOLEAN NOT NULL DEFAULT false,
|
|
recording_storage_id TEXT NOT NULL DEFAULT '',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
UNIQUE (milestone_hardware_id, milestone_device_id, device_type)
|
|
)
|
|
`,
|
|
`ALTER TABLE IF EXISTS milestone_hardware_child_devices ADD COLUMN IF NOT EXISTS recording_enabled BOOLEAN NOT NULL DEFAULT false`,
|
|
`ALTER TABLE IF EXISTS milestone_hardware_child_devices ADD COLUMN IF NOT EXISTS recording_storage_id TEXT NOT NULL DEFAULT ''`,
|
|
}
|
|
|
|
for _, query := range queries {
|
|
if _, err := db.Exec(ctx, query); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|