Files
dockhand/drizzle/0000_initial_schema.sql
2025-12-29 09:08:06 +01:00

401 lines
15 KiB
SQL

CREATE TABLE `audit_logs` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer,
`username` text NOT NULL,
`action` text NOT NULL,
`entity_type` text NOT NULL,
`entity_id` text,
`entity_name` text,
`environment_id` integer,
`description` text,
`details` text,
`ip_address` text,
`user_agent` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE set null
);
--> statement-breakpoint
CREATE INDEX `audit_logs_user_id_idx` ON `audit_logs` (`user_id`);--> statement-breakpoint
CREATE INDEX `audit_logs_created_at_idx` ON `audit_logs` (`created_at`);--> statement-breakpoint
CREATE TABLE `auth_settings` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`auth_enabled` integer DEFAULT false,
`default_provider` text DEFAULT 'local',
`session_timeout` integer DEFAULT 86400,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE TABLE `auto_update_settings` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`environment_id` integer,
`container_name` text NOT NULL,
`enabled` integer DEFAULT false,
`schedule_type` text DEFAULT 'daily',
`cron_expression` text,
`vulnerability_criteria` text DEFAULT 'never',
`last_checked` text,
`last_updated` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `auto_update_settings_environment_id_container_name_unique` ON `auto_update_settings` (`environment_id`,`container_name`);--> statement-breakpoint
CREATE TABLE `config_sets` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`description` text,
`env_vars` text,
`labels` text,
`ports` text,
`volumes` text,
`network_mode` text DEFAULT 'bridge',
`restart_policy` text DEFAULT 'no',
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE UNIQUE INDEX `config_sets_name_unique` ON `config_sets` (`name`);--> statement-breakpoint
CREATE TABLE `container_events` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`environment_id` integer,
`container_id` text NOT NULL,
`container_name` text,
`image` text,
`action` text NOT NULL,
`actor_attributes` text,
`timestamp` text NOT NULL,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `container_events_env_timestamp_idx` ON `container_events` (`environment_id`,`timestamp`);--> statement-breakpoint
CREATE TABLE `environment_notifications` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`environment_id` integer NOT NULL,
`notification_id` integer NOT NULL,
`enabled` integer DEFAULT true,
`event_types` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`notification_id`) REFERENCES `notification_settings`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `environment_notifications_environment_id_notification_id_unique` ON `environment_notifications` (`environment_id`,`notification_id`);--> statement-breakpoint
CREATE TABLE `environments` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`host` text,
`port` integer DEFAULT 2375,
`protocol` text DEFAULT 'http',
`tls_ca` text,
`tls_cert` text,
`tls_key` text,
`tls_skip_verify` integer DEFAULT false,
`icon` text DEFAULT 'globe',
`collect_activity` integer DEFAULT true,
`collect_metrics` integer DEFAULT true,
`highlight_changes` integer DEFAULT true,
`labels` text,
`connection_type` text DEFAULT 'socket',
`socket_path` text DEFAULT '/var/run/docker.sock',
`hawser_token` text,
`hawser_last_seen` text,
`hawser_agent_id` text,
`hawser_agent_name` text,
`hawser_version` text,
`hawser_capabilities` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE UNIQUE INDEX `environments_name_unique` ON `environments` (`name`);--> statement-breakpoint
CREATE TABLE `git_credentials` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`auth_type` text DEFAULT 'none' NOT NULL,
`username` text,
`password` text,
`ssh_private_key` text,
`ssh_passphrase` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE UNIQUE INDEX `git_credentials_name_unique` ON `git_credentials` (`name`);--> statement-breakpoint
CREATE TABLE `git_repositories` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`url` text NOT NULL,
`branch` text DEFAULT 'main',
`credential_id` integer,
`compose_path` text DEFAULT 'docker-compose.yml',
`environment_id` integer,
`auto_update` integer DEFAULT false,
`auto_update_schedule` text DEFAULT 'daily',
`auto_update_cron` text DEFAULT '0 3 * * *',
`webhook_enabled` integer DEFAULT false,
`webhook_secret` text,
`last_sync` text,
`last_commit` text,
`sync_status` text DEFAULT 'pending',
`sync_error` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`credential_id`) REFERENCES `git_credentials`(`id`) ON UPDATE no action ON DELETE set null
);
--> statement-breakpoint
CREATE UNIQUE INDEX `git_repositories_name_unique` ON `git_repositories` (`name`);--> statement-breakpoint
CREATE TABLE `git_stacks` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`stack_name` text NOT NULL,
`environment_id` integer,
`repository_id` integer NOT NULL,
`compose_path` text DEFAULT 'docker-compose.yml',
`auto_update` integer DEFAULT false,
`auto_update_schedule` text DEFAULT 'daily',
`auto_update_cron` text DEFAULT '0 3 * * *',
`webhook_enabled` integer DEFAULT false,
`webhook_secret` text,
`last_sync` text,
`last_commit` text,
`sync_status` text DEFAULT 'pending',
`sync_error` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`repository_id`) REFERENCES `git_repositories`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `git_stacks_stack_name_environment_id_unique` ON `git_stacks` (`stack_name`,`environment_id`);--> statement-breakpoint
CREATE TABLE `hawser_tokens` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`token` text NOT NULL,
`token_prefix` text NOT NULL,
`name` text NOT NULL,
`environment_id` integer,
`is_active` integer DEFAULT true,
`last_used` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`expires_at` text,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `hawser_tokens_token_unique` ON `hawser_tokens` (`token`);--> statement-breakpoint
CREATE TABLE `host_metrics` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`environment_id` integer,
`cpu_percent` real NOT NULL,
`memory_percent` real NOT NULL,
`memory_used` integer,
`memory_total` integer,
`timestamp` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `host_metrics_env_timestamp_idx` ON `host_metrics` (`environment_id`,`timestamp`);--> statement-breakpoint
CREATE TABLE `ldap_config` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`enabled` integer DEFAULT false,
`server_url` text NOT NULL,
`bind_dn` text,
`bind_password` text,
`base_dn` text NOT NULL,
`user_filter` text DEFAULT '(uid={{username}})',
`username_attribute` text DEFAULT 'uid',
`email_attribute` text DEFAULT 'mail',
`display_name_attribute` text DEFAULT 'cn',
`group_base_dn` text,
`group_filter` text,
`admin_group` text,
`role_mappings` text,
`tls_enabled` integer DEFAULT false,
`tls_ca` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE TABLE `notification_settings` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`type` text NOT NULL,
`name` text NOT NULL,
`enabled` integer DEFAULT true,
`config` text NOT NULL,
`event_types` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE TABLE `oidc_config` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`enabled` integer DEFAULT false,
`issuer_url` text NOT NULL,
`client_id` text NOT NULL,
`client_secret` text NOT NULL,
`redirect_uri` text NOT NULL,
`scopes` text DEFAULT 'openid profile email',
`username_claim` text DEFAULT 'preferred_username',
`email_claim` text DEFAULT 'email',
`display_name_claim` text DEFAULT 'name',
`admin_claim` text,
`admin_value` text,
`role_mappings_claim` text DEFAULT 'groups',
`role_mappings` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE TABLE `registries` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`url` text NOT NULL,
`username` text,
`password` text,
`is_default` integer DEFAULT false,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE UNIQUE INDEX `registries_name_unique` ON `registries` (`name`);--> statement-breakpoint
CREATE TABLE `roles` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`description` text,
`is_system` integer DEFAULT false,
`permissions` text NOT NULL,
`environment_ids` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE UNIQUE INDEX `roles_name_unique` ON `roles` (`name`);--> statement-breakpoint
CREATE TABLE `schedule_executions` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`schedule_type` text NOT NULL,
`schedule_id` integer NOT NULL,
`environment_id` integer,
`entity_name` text NOT NULL,
`triggered_by` text NOT NULL,
`triggered_at` text NOT NULL,
`started_at` text,
`completed_at` text,
`duration` integer,
`status` text NOT NULL,
`error_message` text,
`details` text,
`logs` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `schedule_executions_type_id_idx` ON `schedule_executions` (`schedule_type`,`schedule_id`);--> statement-breakpoint
CREATE TABLE `sessions` (
`id` text PRIMARY KEY NOT NULL,
`user_id` integer NOT NULL,
`provider` text NOT NULL,
`expires_at` text NOT NULL,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `sessions_user_id_idx` ON `sessions` (`user_id`);--> statement-breakpoint
CREATE INDEX `sessions_expires_at_idx` ON `sessions` (`expires_at`);--> statement-breakpoint
CREATE TABLE `settings` (
`key` text PRIMARY KEY NOT NULL,
`value` text NOT NULL,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE TABLE `stack_events` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`environment_id` integer,
`stack_name` text NOT NULL,
`event_type` text NOT NULL,
`timestamp` text DEFAULT CURRENT_TIMESTAMP,
`metadata` text,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `stack_sources` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`stack_name` text NOT NULL,
`environment_id` integer,
`source_type` text DEFAULT 'internal' NOT NULL,
`git_repository_id` integer,
`git_stack_id` integer,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`git_repository_id`) REFERENCES `git_repositories`(`id`) ON UPDATE no action ON DELETE set null,
FOREIGN KEY (`git_stack_id`) REFERENCES `git_stacks`(`id`) ON UPDATE no action ON DELETE set null
);
--> statement-breakpoint
CREATE UNIQUE INDEX `stack_sources_stack_name_environment_id_unique` ON `stack_sources` (`stack_name`,`environment_id`);--> statement-breakpoint
CREATE TABLE `user_preferences` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer,
`environment_id` integer,
`key` text NOT NULL,
`value` text NOT NULL,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `user_preferences_user_id_environment_id_key_unique` ON `user_preferences` (`user_id`,`environment_id`,`key`);--> statement-breakpoint
CREATE TABLE `user_roles` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`role_id` integer NOT NULL,
`environment_id` integer,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `user_roles_user_id_role_id_environment_id_unique` ON `user_roles` (`user_id`,`role_id`,`environment_id`);--> statement-breakpoint
CREATE TABLE `users` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`username` text NOT NULL,
`email` text,
`password_hash` text NOT NULL,
`display_name` text,
`avatar` text,
`auth_provider` text DEFAULT 'local',
`mfa_enabled` integer DEFAULT false,
`mfa_secret` text,
`is_active` integer DEFAULT true,
`last_login` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
`updated_at` text DEFAULT CURRENT_TIMESTAMP
);
--> statement-breakpoint
CREATE UNIQUE INDEX `users_username_unique` ON `users` (`username`);--> statement-breakpoint
CREATE TABLE `vulnerability_scans` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`environment_id` integer,
`image_id` text NOT NULL,
`image_name` text NOT NULL,
`scanner` text NOT NULL,
`scanned_at` text NOT NULL,
`scan_duration` integer,
`critical_count` integer DEFAULT 0,
`high_count` integer DEFAULT 0,
`medium_count` integer DEFAULT 0,
`low_count` integer DEFAULT 0,
`negligible_count` integer DEFAULT 0,
`unknown_count` integer DEFAULT 0,
`vulnerabilities` text,
`error` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `vulnerability_scans_env_image_idx` ON `vulnerability_scans` (`environment_id`,`image_id`);