diff --git a/testing/config.sqlite.yml b/testing/config.sqlite.yml index 208bc9b0..da067188 100644 --- a/testing/config.sqlite.yml +++ b/testing/config.sqlite.yml @@ -27,7 +27,7 @@ db: name: wakapi_testing.db dialect: sqlite3 charset: - max_conn: 2 + max_conn: 1 ssl: false automgirate_fail_silently: false diff --git a/testing/schema.sql b/testing/schema.sql index 114abb40..72f41178 100644 --- a/testing/schema.sql +++ b/testing/schema.sql @@ -5,25 +5,27 @@ BEGIN TRANSACTION; DROP TABLE IF EXISTS "aliases"; -CREATE TABLE `aliases` (`id` integer,`type` integer NOT NULL,`user_id` text NOT NULL,`key` text NOT NULL,`value` text NOT NULL,PRIMARY KEY (`id`),CONSTRAINT `fk_aliases_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); +CREATE TABLE `aliases` (`id` integer PRIMARY KEY AUTOINCREMENT,`type` integer NOT NULL,`user_id` text NOT NULL,`key` text NOT NULL,`value` text NOT NULL,CONSTRAINT `fk_aliases_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); DROP TABLE IF EXISTS "diagnostics"; -CREATE TABLE `diagnostics` (`id` integer,`platform` text,`architecture` text,`plugin` text,`cli_version` text,`logs` text,`stack_trace` text,PRIMARY KEY (`id`)); +CREATE TABLE `diagnostics` (`id` integer PRIMARY KEY AUTOINCREMENT,`platform` text,`architecture` text,`plugin` text,`cli_version` text,`logs` text,`stack_trace` text); +DROP TABLE IF EXISTS "durations"; +CREATE TABLE `durations` (`user_id` text NOT NULL,`time` timestamp NOT NULL,`duration` integer NOT NULL,`project` text,`language` text,`editor` text,`operating_system` text,`machine` text,`category` text,`branch` text,`entity` text,`num_heartbeats` integer,`group_hash` varchar(17),`interval` integer NOT NULL DEFAULT 600000000000); DROP TABLE IF EXISTS "heartbeats"; -CREATE TABLE `heartbeats` (`id` integer,`user_id` text NOT NULL,`entity` text NOT NULL,`type` text,`category` text,`project` text,`branch` text,`language` text,`is_write` numeric,`editor` text,`operating_system` text,`machine` text,`user_agent` varchar(255),`time` timestamp(3),`hash` varchar(17),`origin` varchar(255),`origin_id` varchar(255),`created_at` timestamp(3),PRIMARY KEY (`id`),CONSTRAINT `fk_heartbeats_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); +CREATE TABLE `heartbeats` (`id` integer PRIMARY KEY AUTOINCREMENT,`user_id` text NOT NULL,`entity` text NOT NULL,`type` text,`category` text,`project` text,`branch` text,`language` text,`is_write` numeric,`editor` text,`operating_system` text,`machine` text,`user_agent` varchar(255),`time` timestamp(3),`hash` varchar(17),`origin` varchar(255),`origin_id` varchar(255),`created_at` timestamp(3),`lines` integer,`line_no` integer,`cursor_pos` integer,`line_deletions` integer,`line_additions` integer,`project_root_count` integer,CONSTRAINT `fk_heartbeats_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); DROP TABLE IF EXISTS "key_string_values"; CREATE TABLE `key_string_values` (`key` text,`value` text,PRIMARY KEY (`key`)); DROP TABLE IF EXISTS "language_mappings"; -CREATE TABLE `language_mappings` (`id` integer,`user_id` text NOT NULL,`extension` varchar(16),`language` varchar(64),PRIMARY KEY (`id`),CONSTRAINT `fk_language_mappings_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); +CREATE TABLE `language_mappings` (`id` integer PRIMARY KEY AUTOINCREMENT,`user_id` text NOT NULL,`extension` varchar(16),`language` varchar(64),CONSTRAINT `fk_language_mappings_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); DROP TABLE IF EXISTS "leaderboard_items"; -CREATE TABLE `leaderboard_items` (`id` integer,`user_id` text NOT NULL,`rank` integer,`interval` text NOT NULL,`by` integer,`total` integer NOT NULL,`key` text,`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`),CONSTRAINT `fk_leaderboard_items_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); +CREATE TABLE `leaderboard_items` (`id` integer PRIMARY KEY AUTOINCREMENT,`user_id` text NOT NULL,`interval` text NOT NULL,`by` integer,`total` integer NOT NULL,`key` text,`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,CONSTRAINT `fk_leaderboard_items_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); DROP TABLE IF EXISTS "project_labels"; -CREATE TABLE `project_labels` (`id` integer,`user_id` text NOT NULL,`project_key` text,`label` varchar(64),PRIMARY KEY (`id`),CONSTRAINT `fk_project_labels_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); +CREATE TABLE `project_labels` (`id` integer PRIMARY KEY AUTOINCREMENT,`user_id` text NOT NULL,`project_key` text,`label` varchar(64),CONSTRAINT `fk_project_labels_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); DROP TABLE IF EXISTS "summaries"; -CREATE TABLE "summaries" (`id` integer,`user_id` text NOT NULL,`from_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`to_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`num_heartbeats` integer DEFAULT 0,PRIMARY KEY (`id`),CONSTRAINT `fk_summaries_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); +CREATE TABLE `summaries` (`id` integer PRIMARY KEY AUTOINCREMENT,`user_id` text NOT NULL,`from_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`to_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`num_heartbeats` integer,CONSTRAINT `fk_summaries_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); DROP TABLE IF EXISTS "summary_items"; -CREATE TABLE `summary_items` (`id` integer,`summary_id` integer,`type` integer,`key` text,`total` integer,PRIMARY KEY (`id`),CONSTRAINT `fk_summaries_machines` FOREIGN KEY (`summary_id`) REFERENCES `summaries`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_summaries_projects` FOREIGN KEY (`summary_id`) REFERENCES `summaries`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_summaries_languages` FOREIGN KEY (`summary_id`) REFERENCES `summaries`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_summaries_editors` FOREIGN KEY (`summary_id`) REFERENCES `summaries`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_summaries_operating_systems` FOREIGN KEY (`summary_id`) REFERENCES `summaries`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); +CREATE TABLE `summary_items` (`id` integer PRIMARY KEY AUTOINCREMENT,`summary_id` integer,`type` integer,`key` text,`total` integer,CONSTRAINT `fk_summaries_projects` FOREIGN KEY (`summary_id`) REFERENCES `summaries`(`id`) ON DELETE CASCADE ON UPDATE CASCADE); DROP TABLE IF EXISTS "users"; -CREATE TABLE "users" (`id` text,`api_key` text UNIQUE DEFAULT NULL,`email` text,`location` text,`password` text,`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,`last_logged_in_at` timestamp DEFAULT CURRENT_TIMESTAMP,`share_data_max_days` integer DEFAULT 0,`share_editors` numeric DEFAULT false,`share_languages` numeric DEFAULT false,`share_projects` numeric DEFAULT false,`share_oss` numeric DEFAULT false,`share_machines` numeric DEFAULT false,`share_labels` numeric DEFAULT false,`is_admin` numeric DEFAULT false,`has_data` numeric DEFAULT false,`wakatime_api_key` text,`wakatime_api_url` text,`reset_token` text,`reports_weekly` numeric DEFAULT false,`public_leaderboard` numeric DEFAULT false,PRIMARY KEY (`id`)); +CREATE TABLE `users` (`id` text,`api_key` text DEFAULT NULL,`email` text,`location` text,`password` text,`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,`last_logged_in_at` timestamp DEFAULT CURRENT_TIMESTAMP,`share_data_max_days` integer,`share_editors` numeric DEFAULT false,`share_languages` numeric DEFAULT false,`share_projects` numeric DEFAULT false,`share_oss` numeric DEFAULT false,`share_machines` numeric DEFAULT false,`share_labels` numeric DEFAULT false,`share_activity_chart` numeric DEFAULT false,`is_admin` numeric DEFAULT false,`has_data` numeric DEFAULT false,`wakatime_api_key` text,`wakatime_api_url` text,`reset_token` text,`reports_weekly` numeric DEFAULT false,`public_leaderboard` numeric DEFAULT false,`subscribed_until` timestamp,`subscription_renewal` timestamp,`stripe_customer_id` text,`invited_by` text,`exclude_unknown_projects` numeric,`heartbeats_timeout_sec` integer DEFAULT 600,PRIMARY KEY (`id`),CONSTRAINT `uni_users_api_key` UNIQUE (`api_key`)); DROP INDEX IF EXISTS "idx_alias_type_key"; CREATE INDEX `idx_alias_type_key` ON `aliases`(`type`,`key`); DROP INDEX IF EXISTS "idx_alias_user"; @@ -54,10 +56,12 @@ DROP INDEX IF EXISTS "idx_project_label_user"; CREATE INDEX `idx_project_label_user` ON `project_labels`(`user_id`); DROP INDEX IF EXISTS "idx_time"; CREATE INDEX `idx_time` ON `heartbeats`(`time`); +DROP INDEX IF EXISTS "idx_time_duration_user"; +CREATE INDEX `idx_time_duration_user` ON `durations`(`user_id`,`time`); DROP INDEX IF EXISTS "idx_time_summary_user"; CREATE INDEX `idx_time_summary_user` ON `summaries`(`user_id`,`from_time`,`to_time`); DROP INDEX IF EXISTS "idx_time_user"; -CREATE INDEX `idx_time_user` ON `heartbeats`(`user_id`); +CREATE INDEX `idx_time_user` ON `heartbeats`(`user_id`,`time`); DROP INDEX IF EXISTS "idx_type"; CREATE INDEX `idx_type` ON `summary_items`(`type`); DROP INDEX IF EXISTS "idx_user_email"; diff --git a/testing/wakapi_api_tests.postman_collection.json b/testing/wakapi_api_tests.postman_collection.json index 850bb957..c815df4a 100644 --- a/testing/wakapi_api_tests.postman_collection.json +++ b/testing/wakapi_api_tests.postman_collection.json @@ -3036,6 +3036,16 @@ ], "type": "text/javascript" } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "setTimeout(() => {}, 1000)" + ], + "type": "text/javascript", + "packages": {} + } } ], "protocolProfileBehavior": {