mirror of
https://github.com/soconnor0919/hristudio.git
synced 2025-12-11 22:54:45 -05:00
- Remove outdated root-level documentation files - Delete IMPLEMENTATION_STATUS.md, WORK_IN_PROGRESS.md, UI_IMPROVEMENTS_SUMMARY.md, CLAUDE.md - Reorganize documentation into docs/ folder - Move UNIFIED_EDITOR_EXPERIENCES.md → docs/unified-editor-experiences.md - Move DATATABLE_MIGRATION_PROGRESS.md → docs/datatable-migration-progress.md - Move SEED_SCRIPT_README.md → docs/seed-script-readme.md - Create comprehensive new documentation - Add docs/implementation-status.md with production readiness assessment - Add docs/work-in-progress.md with active development tracking - Add docs/development-achievements.md consolidating all major accomplishments - Update documentation hub - Enhance docs/README.md with complete 13-document structure - Organize into logical categories: Core, Status, Achievements - Provide clear navigation and purpose for each document Features: - 73% code reduction achievement through unified editor experiences - Complete DataTable migration with enterprise features - Comprehensive seed database with realistic research scenarios - Production-ready status with 100% backend, 95% frontend completion - Clean documentation architecture supporting future development Breaking Changes: None - documentation restructuring only Migration: Documentation moved to docs/ folder, no code changes required
461 lines
26 KiB
SQL
461 lines
26 KiB
SQL
CREATE TYPE "public"."communication_protocol" AS ENUM('rest', 'ros2', 'custom');--> statement-breakpoint
|
|
CREATE TYPE "public"."experiment_status" AS ENUM('draft', 'testing', 'ready', 'deprecated');--> statement-breakpoint
|
|
CREATE TYPE "public"."export_status" AS ENUM('pending', 'processing', 'completed', 'failed');--> statement-breakpoint
|
|
CREATE TYPE "public"."media_type" AS ENUM('video', 'audio', 'image');--> statement-breakpoint
|
|
CREATE TYPE "public"."plugin_status" AS ENUM('active', 'deprecated', 'disabled');--> statement-breakpoint
|
|
CREATE TYPE "public"."step_type" AS ENUM('wizard', 'robot', 'parallel', 'conditional');--> statement-breakpoint
|
|
CREATE TYPE "public"."study_member_role" AS ENUM('owner', 'researcher', 'wizard', 'observer');--> statement-breakpoint
|
|
CREATE TYPE "public"."study_status" AS ENUM('draft', 'active', 'completed', 'archived');--> statement-breakpoint
|
|
CREATE TYPE "public"."system_role" AS ENUM('administrator', 'researcher', 'wizard', 'observer');--> statement-breakpoint
|
|
CREATE TYPE "public"."trial_status" AS ENUM('scheduled', 'in_progress', 'completed', 'aborted', 'failed');--> statement-breakpoint
|
|
CREATE TYPE "public"."trust_level" AS ENUM('official', 'verified', 'community');--> statement-breakpoint
|
|
CREATE TABLE "hs_account" (
|
|
"user_id" uuid NOT NULL,
|
|
"type" varchar(255) NOT NULL,
|
|
"provider" varchar(255) NOT NULL,
|
|
"provider_account_id" varchar(255) NOT NULL,
|
|
"refresh_token" text,
|
|
"access_token" text,
|
|
"expires_at" integer,
|
|
"token_type" varchar(255),
|
|
"scope" varchar(255),
|
|
"id_token" text,
|
|
"session_state" varchar(255),
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_account_provider_provider_account_id_pk" PRIMARY KEY("provider","provider_account_id")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_action" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"step_id" uuid NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
"description" text,
|
|
"type" varchar(100) NOT NULL,
|
|
"order_index" integer NOT NULL,
|
|
"parameters" jsonb DEFAULT '{}'::jsonb,
|
|
"validation_schema" jsonb,
|
|
"timeout" integer,
|
|
"retry_count" integer DEFAULT 0 NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_action_step_id_order_index_unique" UNIQUE("step_id","order_index")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_activity_log" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"study_id" uuid,
|
|
"user_id" uuid,
|
|
"action" varchar(100) NOT NULL,
|
|
"resource_type" varchar(50),
|
|
"resource_id" uuid,
|
|
"description" text,
|
|
"ip_address" "inet",
|
|
"user_agent" text,
|
|
"metadata" jsonb DEFAULT '{}'::jsonb,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_annotation" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"trial_id" uuid NOT NULL,
|
|
"annotator_id" uuid NOT NULL,
|
|
"timestamp_start" timestamp with time zone NOT NULL,
|
|
"timestamp_end" timestamp with time zone,
|
|
"category" varchar(100),
|
|
"label" varchar(100),
|
|
"description" text,
|
|
"tags" jsonb DEFAULT '[]'::jsonb,
|
|
"metadata" jsonb DEFAULT '{}'::jsonb,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_attachment" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"resource_type" varchar(50) NOT NULL,
|
|
"resource_id" uuid NOT NULL,
|
|
"file_name" varchar(255) NOT NULL,
|
|
"file_size" bigint NOT NULL,
|
|
"file_path" text NOT NULL,
|
|
"content_type" varchar(100),
|
|
"description" text,
|
|
"uploaded_by" uuid NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_audit_log" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"user_id" uuid,
|
|
"action" varchar(100) NOT NULL,
|
|
"resource_type" varchar(50),
|
|
"resource_id" uuid,
|
|
"changes" jsonb DEFAULT '{}'::jsonb,
|
|
"ip_address" "inet",
|
|
"user_agent" text,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_comment" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"parent_id" uuid,
|
|
"resource_type" varchar(50) NOT NULL,
|
|
"resource_id" uuid NOT NULL,
|
|
"author_id" uuid NOT NULL,
|
|
"content" text NOT NULL,
|
|
"metadata" jsonb,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_consent_form" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"study_id" uuid NOT NULL,
|
|
"version" integer DEFAULT 1 NOT NULL,
|
|
"title" varchar(255) NOT NULL,
|
|
"content" text NOT NULL,
|
|
"active" boolean DEFAULT true NOT NULL,
|
|
"created_by" uuid NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"storage_path" text,
|
|
CONSTRAINT "hs_consent_form_study_id_version_unique" UNIQUE("study_id","version")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_experiment" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"study_id" uuid NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
"description" text,
|
|
"version" integer DEFAULT 1 NOT NULL,
|
|
"robot_id" uuid,
|
|
"status" "experiment_status" DEFAULT 'draft' NOT NULL,
|
|
"estimated_duration" integer,
|
|
"created_by" uuid NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"metadata" jsonb DEFAULT '{}'::jsonb,
|
|
"deleted_at" timestamp with time zone,
|
|
CONSTRAINT "hs_experiment_study_id_name_version_unique" UNIQUE("study_id","name","version")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_export_job" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"study_id" uuid NOT NULL,
|
|
"requested_by" uuid NOT NULL,
|
|
"export_type" varchar(50) NOT NULL,
|
|
"format" varchar(20) NOT NULL,
|
|
"filters" jsonb DEFAULT '{}'::jsonb,
|
|
"status" "export_status" DEFAULT 'pending' NOT NULL,
|
|
"storage_path" text,
|
|
"expires_at" timestamp with time zone,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"completed_at" timestamp with time zone,
|
|
"error_message" text
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_media_capture" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"trial_id" uuid NOT NULL,
|
|
"media_type" "media_type",
|
|
"storage_path" text NOT NULL,
|
|
"file_size" bigint,
|
|
"duration" integer,
|
|
"format" varchar(20),
|
|
"resolution" varchar(20),
|
|
"start_timestamp" timestamp with time zone,
|
|
"end_timestamp" timestamp with time zone,
|
|
"metadata" jsonb DEFAULT '{}'::jsonb,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_participant_consent" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"participant_id" uuid NOT NULL,
|
|
"consent_form_id" uuid NOT NULL,
|
|
"signed_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"signature_data" text,
|
|
"ip_address" "inet",
|
|
"storage_path" text,
|
|
CONSTRAINT "hs_participant_consent_participant_id_consent_form_id_unique" UNIQUE("participant_id","consent_form_id")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_participant" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"study_id" uuid NOT NULL,
|
|
"participant_code" varchar(50) NOT NULL,
|
|
"email" varchar(255),
|
|
"name" varchar(255),
|
|
"demographics" jsonb DEFAULT '{}'::jsonb,
|
|
"consent_given" boolean DEFAULT false NOT NULL,
|
|
"consent_date" timestamp with time zone,
|
|
"notes" text,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_participant_study_id_participant_code_unique" UNIQUE("study_id","participant_code")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_permission" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"name" varchar(100) NOT NULL,
|
|
"description" text,
|
|
"resource" varchar(50) NOT NULL,
|
|
"action" varchar(50) NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_permission_name_unique" UNIQUE("name")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_plugin" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"robot_id" uuid,
|
|
"name" varchar(255) NOT NULL,
|
|
"version" varchar(50) NOT NULL,
|
|
"description" text,
|
|
"author" varchar(255),
|
|
"repository_url" text,
|
|
"trust_level" "trust_level",
|
|
"status" "plugin_status" DEFAULT 'active' NOT NULL,
|
|
"configuration_schema" jsonb,
|
|
"action_definitions" jsonb DEFAULT '[]'::jsonb,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"metadata" jsonb DEFAULT '{}'::jsonb,
|
|
CONSTRAINT "hs_plugin_name_version_unique" UNIQUE("name","version")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_robot" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
"manufacturer" varchar(255),
|
|
"model" varchar(255),
|
|
"description" text,
|
|
"capabilities" jsonb DEFAULT '[]'::jsonb,
|
|
"communication_protocol" "communication_protocol",
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_role_permission" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"role" "system_role" NOT NULL,
|
|
"permission_id" uuid NOT NULL,
|
|
CONSTRAINT "hs_role_permission_role_permission_id_unique" UNIQUE("role","permission_id")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_sensor_data" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"trial_id" uuid NOT NULL,
|
|
"sensor_type" varchar(50) NOT NULL,
|
|
"timestamp" timestamp with time zone NOT NULL,
|
|
"data" jsonb NOT NULL,
|
|
"robot_state" jsonb DEFAULT '{}'::jsonb,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_session" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"session_token" varchar(255) NOT NULL,
|
|
"user_id" uuid NOT NULL,
|
|
"expires" timestamp with time zone NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_session_session_token_unique" UNIQUE("session_token")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_shared_resource" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"study_id" uuid NOT NULL,
|
|
"resource_type" varchar(50) NOT NULL,
|
|
"resource_id" uuid NOT NULL,
|
|
"shared_by" uuid NOT NULL,
|
|
"share_token" varchar(255),
|
|
"permissions" jsonb DEFAULT '["read"]'::jsonb,
|
|
"expires_at" timestamp with time zone,
|
|
"access_count" integer DEFAULT 0 NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_shared_resource_share_token_unique" UNIQUE("share_token")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_step" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"experiment_id" uuid NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
"description" text,
|
|
"type" "step_type" NOT NULL,
|
|
"order_index" integer NOT NULL,
|
|
"duration_estimate" integer,
|
|
"required" boolean DEFAULT true NOT NULL,
|
|
"conditions" jsonb DEFAULT '{}'::jsonb,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_step_experiment_id_order_index_unique" UNIQUE("experiment_id","order_index")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_study" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
"description" text,
|
|
"institution" varchar(255),
|
|
"irb_protocol" varchar(100),
|
|
"status" "study_status" DEFAULT 'draft' NOT NULL,
|
|
"created_by" uuid NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"metadata" jsonb DEFAULT '{}'::jsonb,
|
|
"settings" jsonb DEFAULT '{}'::jsonb,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_study_member" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"study_id" uuid NOT NULL,
|
|
"user_id" uuid NOT NULL,
|
|
"role" "study_member_role" NOT NULL,
|
|
"permissions" jsonb DEFAULT '[]'::jsonb,
|
|
"joined_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"invited_by" uuid,
|
|
CONSTRAINT "hs_study_member_study_id_user_id_unique" UNIQUE("study_id","user_id")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_study_plugin" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"study_id" uuid NOT NULL,
|
|
"plugin_id" uuid NOT NULL,
|
|
"configuration" jsonb DEFAULT '{}'::jsonb,
|
|
"installed_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"installed_by" uuid NOT NULL,
|
|
CONSTRAINT "hs_study_plugin_study_id_plugin_id_unique" UNIQUE("study_id","plugin_id")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_system_setting" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"key" varchar(100) NOT NULL,
|
|
"value" jsonb NOT NULL,
|
|
"description" text,
|
|
"updated_by" uuid,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_system_setting_key_unique" UNIQUE("key")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_trial_event" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"trial_id" uuid NOT NULL,
|
|
"event_type" varchar(50) NOT NULL,
|
|
"action_id" uuid,
|
|
"timestamp" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"data" jsonb DEFAULT '{}'::jsonb,
|
|
"created_by" uuid
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_trial" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"experiment_id" uuid NOT NULL,
|
|
"participant_id" uuid,
|
|
"wizard_id" uuid,
|
|
"session_number" integer DEFAULT 1 NOT NULL,
|
|
"status" "trial_status" DEFAULT 'scheduled' NOT NULL,
|
|
"scheduled_at" timestamp with time zone,
|
|
"started_at" timestamp with time zone,
|
|
"completed_at" timestamp with time zone,
|
|
"duration" integer,
|
|
"notes" text,
|
|
"parameters" jsonb DEFAULT '{}'::jsonb,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"metadata" jsonb DEFAULT '{}'::jsonb
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_user_system_role" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"user_id" uuid NOT NULL,
|
|
"role" "system_role" NOT NULL,
|
|
"granted_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"granted_by" uuid,
|
|
CONSTRAINT "hs_user_system_role_user_id_role_unique" UNIQUE("user_id","role")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_user" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"email" varchar(255) NOT NULL,
|
|
"email_verified" timestamp with time zone,
|
|
"name" varchar(255),
|
|
"image" text,
|
|
"password" varchar(255),
|
|
"active_study_id" uuid,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
CONSTRAINT "hs_user_email_unique" UNIQUE("email")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_verification_token" (
|
|
"identifier" varchar(255) NOT NULL,
|
|
"token" varchar(255) NOT NULL,
|
|
"expires" timestamp with time zone NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT "hs_verification_token_identifier_token_pk" PRIMARY KEY("identifier","token"),
|
|
CONSTRAINT "hs_verification_token_token_unique" UNIQUE("token")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "hs_wizard_intervention" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"trial_id" uuid NOT NULL,
|
|
"wizard_id" uuid NOT NULL,
|
|
"intervention_type" varchar(100) NOT NULL,
|
|
"description" text,
|
|
"timestamp" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"parameters" jsonb DEFAULT '{}'::jsonb,
|
|
"reason" text
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "hs_account" ADD CONSTRAINT "hs_account_user_id_hs_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."hs_user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_action" ADD CONSTRAINT "hs_action_step_id_hs_step_id_fk" FOREIGN KEY ("step_id") REFERENCES "public"."hs_step"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_activity_log" ADD CONSTRAINT "hs_activity_log_study_id_hs_study_id_fk" FOREIGN KEY ("study_id") REFERENCES "public"."hs_study"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_activity_log" ADD CONSTRAINT "hs_activity_log_user_id_hs_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_annotation" ADD CONSTRAINT "hs_annotation_trial_id_hs_trial_id_fk" FOREIGN KEY ("trial_id") REFERENCES "public"."hs_trial"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_annotation" ADD CONSTRAINT "hs_annotation_annotator_id_hs_user_id_fk" FOREIGN KEY ("annotator_id") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_attachment" ADD CONSTRAINT "hs_attachment_uploaded_by_hs_user_id_fk" FOREIGN KEY ("uploaded_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_audit_log" ADD CONSTRAINT "hs_audit_log_user_id_hs_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_comment" ADD CONSTRAINT "hs_comment_author_id_hs_user_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_consent_form" ADD CONSTRAINT "hs_consent_form_study_id_hs_study_id_fk" FOREIGN KEY ("study_id") REFERENCES "public"."hs_study"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_consent_form" ADD CONSTRAINT "hs_consent_form_created_by_hs_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_experiment" ADD CONSTRAINT "hs_experiment_study_id_hs_study_id_fk" FOREIGN KEY ("study_id") REFERENCES "public"."hs_study"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_experiment" ADD CONSTRAINT "hs_experiment_robot_id_hs_robot_id_fk" FOREIGN KEY ("robot_id") REFERENCES "public"."hs_robot"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_experiment" ADD CONSTRAINT "hs_experiment_created_by_hs_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_export_job" ADD CONSTRAINT "hs_export_job_study_id_hs_study_id_fk" FOREIGN KEY ("study_id") REFERENCES "public"."hs_study"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_export_job" ADD CONSTRAINT "hs_export_job_requested_by_hs_user_id_fk" FOREIGN KEY ("requested_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_media_capture" ADD CONSTRAINT "hs_media_capture_trial_id_hs_trial_id_fk" FOREIGN KEY ("trial_id") REFERENCES "public"."hs_trial"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_participant_consent" ADD CONSTRAINT "hs_participant_consent_participant_id_hs_participant_id_fk" FOREIGN KEY ("participant_id") REFERENCES "public"."hs_participant"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_participant_consent" ADD CONSTRAINT "hs_participant_consent_consent_form_id_hs_consent_form_id_fk" FOREIGN KEY ("consent_form_id") REFERENCES "public"."hs_consent_form"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_participant" ADD CONSTRAINT "hs_participant_study_id_hs_study_id_fk" FOREIGN KEY ("study_id") REFERENCES "public"."hs_study"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_plugin" ADD CONSTRAINT "hs_plugin_robot_id_hs_robot_id_fk" FOREIGN KEY ("robot_id") REFERENCES "public"."hs_robot"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_role_permission" ADD CONSTRAINT "hs_role_permission_permission_id_hs_permission_id_fk" FOREIGN KEY ("permission_id") REFERENCES "public"."hs_permission"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_sensor_data" ADD CONSTRAINT "hs_sensor_data_trial_id_hs_trial_id_fk" FOREIGN KEY ("trial_id") REFERENCES "public"."hs_trial"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_session" ADD CONSTRAINT "hs_session_user_id_hs_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."hs_user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_shared_resource" ADD CONSTRAINT "hs_shared_resource_study_id_hs_study_id_fk" FOREIGN KEY ("study_id") REFERENCES "public"."hs_study"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_shared_resource" ADD CONSTRAINT "hs_shared_resource_shared_by_hs_user_id_fk" FOREIGN KEY ("shared_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_step" ADD CONSTRAINT "hs_step_experiment_id_hs_experiment_id_fk" FOREIGN KEY ("experiment_id") REFERENCES "public"."hs_experiment"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_study" ADD CONSTRAINT "hs_study_created_by_hs_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_study_member" ADD CONSTRAINT "hs_study_member_study_id_hs_study_id_fk" FOREIGN KEY ("study_id") REFERENCES "public"."hs_study"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_study_member" ADD CONSTRAINT "hs_study_member_user_id_hs_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."hs_user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_study_member" ADD CONSTRAINT "hs_study_member_invited_by_hs_user_id_fk" FOREIGN KEY ("invited_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_study_plugin" ADD CONSTRAINT "hs_study_plugin_study_id_hs_study_id_fk" FOREIGN KEY ("study_id") REFERENCES "public"."hs_study"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_study_plugin" ADD CONSTRAINT "hs_study_plugin_plugin_id_hs_plugin_id_fk" FOREIGN KEY ("plugin_id") REFERENCES "public"."hs_plugin"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_study_plugin" ADD CONSTRAINT "hs_study_plugin_installed_by_hs_user_id_fk" FOREIGN KEY ("installed_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_system_setting" ADD CONSTRAINT "hs_system_setting_updated_by_hs_user_id_fk" FOREIGN KEY ("updated_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_trial_event" ADD CONSTRAINT "hs_trial_event_trial_id_hs_trial_id_fk" FOREIGN KEY ("trial_id") REFERENCES "public"."hs_trial"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_trial_event" ADD CONSTRAINT "hs_trial_event_action_id_hs_action_id_fk" FOREIGN KEY ("action_id") REFERENCES "public"."hs_action"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_trial_event" ADD CONSTRAINT "hs_trial_event_created_by_hs_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_trial" ADD CONSTRAINT "hs_trial_experiment_id_hs_experiment_id_fk" FOREIGN KEY ("experiment_id") REFERENCES "public"."hs_experiment"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_trial" ADD CONSTRAINT "hs_trial_participant_id_hs_participant_id_fk" FOREIGN KEY ("participant_id") REFERENCES "public"."hs_participant"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_trial" ADD CONSTRAINT "hs_trial_wizard_id_hs_user_id_fk" FOREIGN KEY ("wizard_id") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_user_system_role" ADD CONSTRAINT "hs_user_system_role_user_id_hs_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."hs_user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_user_system_role" ADD CONSTRAINT "hs_user_system_role_granted_by_hs_user_id_fk" FOREIGN KEY ("granted_by") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_user" ADD CONSTRAINT "hs_user_active_study_id_hs_study_id_fk" FOREIGN KEY ("active_study_id") REFERENCES "public"."hs_study"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_wizard_intervention" ADD CONSTRAINT "hs_wizard_intervention_trial_id_hs_trial_id_fk" FOREIGN KEY ("trial_id") REFERENCES "public"."hs_trial"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "hs_wizard_intervention" ADD CONSTRAINT "hs_wizard_intervention_wizard_id_hs_user_id_fk" FOREIGN KEY ("wizard_id") REFERENCES "public"."hs_user"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
CREATE INDEX "account_user_id_idx" ON "hs_account" USING btree ("user_id");--> statement-breakpoint
|
|
CREATE INDEX "activity_logs_study_created_idx" ON "hs_activity_log" USING btree ("study_id","created_at");--> statement-breakpoint
|
|
CREATE INDEX "audit_logs_created_idx" ON "hs_audit_log" USING btree ("created_at");--> statement-breakpoint
|
|
CREATE INDEX "sensor_data_trial_timestamp_idx" ON "hs_sensor_data" USING btree ("trial_id","timestamp");--> statement-breakpoint
|
|
CREATE INDEX "session_user_id_idx" ON "hs_session" USING btree ("user_id");--> statement-breakpoint
|
|
CREATE INDEX "trial_events_trial_timestamp_idx" ON "hs_trial_event" USING btree ("trial_id","timestamp"); |