2fas-server/migrations/20210925135635_initial_schema.sql
2022-12-31 10:22:38 +01:00

171 lines
7.4 KiB
SQL

-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS `browser_extensions` (
`id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`browser_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`browser_version` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`public_key` varchar(768) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `browser_extensions_2fa_requests` (
`id` char(36) NOT NULL,
`extension_id` char(36) NOT NULL,
`domain` varchar(256) NOT NULL,
`status` enum('pending','completed','terminated') NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `icons_requests` (
`id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
`caller_id` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
`service_name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`issuers` json NOT NULL,
`description` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL,
`light_icon_url` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
`dark_icon_url` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `icons` (
`id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`url` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
`width` smallint NOT NULL,
`height` smallint NOT NULL,
`type` enum('light','dark') COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `icons_collections` (
`id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`description` tinytext COLLATE utf8mb4_unicode_ci,
`icons` json DEFAULT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `mobile_debug_logs_audit` (
`id` char(36) NOT NULL,
`username` varchar(128) NOT NULL,
`file` varchar(255) DEFAULT NULL,
`description` text,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
`expire_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `mobile_devices` (
`id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`platform` enum('android','ios','huawei') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`fcm_token` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `mobile_device_browser_extension` (
`device_id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`extension_id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`device_id`,`extension_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `mobile_notifications` (
`id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
`icon` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
`link` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
`message` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
`push` tinyint(1) NOT NULL,
`platform` enum('android','ios','huawei') COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`version` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
`published_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `web_services` (
`id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`description` mediumtext COLLATE utf8mb4_unicode_ci,
`issuers` json NOT NULL,
`tags` json NOT NULL,
`icons_collections` json NOT NULL,
`match_rules` json DEFAULT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE OR REPLACE VIEW web_services_dump AS
SELECT
JSON_OBJECT(
"id", ws.id,
"name", ws.name,
"issuers", ws.issuers,
"tags", ws.tags,
"match_rules", ws.match_rules,
"icons_collections", IF(JSON_LENGTH(icons_collections) > 0, JSON_ARRAYAGG(
JSON_OBJECT(
"id", ic.id,
"name", ic.name,
"icons", IF(JSON_LENGTH(ic.icons) > 0,
(
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
"id", i.id,
"name", i.name,
"url", i.url,
"type", i.type,
"width", i.width,
"height", i.height,
"created_at", i.created_at,
"updated_at", i.updated_at
)
) FROM icons i WHERE i.id MEMBER OF (ic.icons)
), JSON_ARRAY())
)), JSON_ARRAY()),
"created_at", ws.created_at,
"updated_at", ws.updated_at
) as web_service
FROM web_services ws
LEFT JOIN icons_collections ic ON ic.id MEMBER OF (ws.icons_collections)
WHERE ws.deleted_at IS NULL
GROUP BY ws.id;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
SELECT 'down SQL query';
-- +goose StatementEnd