diff --git a/db/Models/eta_rbac.mwb b/db/Models/eta_rbac.mwb index d916414..dc4ce00 100644 Binary files a/db/Models/eta_rbac.mwb and b/db/Models/eta_rbac.mwb differ diff --git a/db/Models/init/eta_rbac_init.sql b/db/Models/init/eta_rbac_init.sql index bb28869..516d9da 100644 --- a/db/Models/init/eta_rbac_init.sql +++ b/db/Models/init/eta_rbac_init.sql @@ -2,20 +2,46 @@ -- USE `u947463964_etaviaporte` ; -INSERT INTO `roles` (`name`, `description`) VALUES ('owner', 'Owner of the company'); -INSERT INTO `roles` (`name`, `description`) VALUES ('manager', 'Manager of the company'); -INSERT INTO `roles` (`name`, `description`) VALUES ('driver', 'Driver user type'); -INSERT INTO `roles` (`name`, `description`) VALUES ('staff', 'Member of the staff'); -INSERT INTO `roles` (`name`, `description`) VALUES ('warehouse', 'Observer type of member'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAConsole','console','ETA logistics console for Carriers and Shippers'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETADriver','driver','ETA driver application'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAObserverClient','client','ETA observer console for clients'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAObserverWarehouse','warehouse','ETA observer console for warehouse'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('owner', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('manager', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('driver', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('staff', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('warehouse', 'Compatibility with Legacy while refactor in progress'); +-- Roles for ETAConsole application (1) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'owner', '(ETAConsole): Owner of the company'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'manager', '(ETAConsole): Manager of the company'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'driver', '(ETAConsole): Driver user type'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'staff', '(ETAConsole): Member of the staff'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'warehouse', '(ETAConsole): Observer type of member'); +-- Roles for ETADriver application (2) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (2,'driver', '(ETADriver): Driver user type'); +-- Roles for ETAObserverClient application (3) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (3,'client', '(ETAObserverClient): Client user type'); +-- Roles for ETAObserverWarehouse application (4) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (4,'warehouse', '(ETAObserverWarehouse):Warehouse user type'); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (1,1); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (2,2); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (3,3); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (4,4); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (5,5); +-- Permissions for ETAConsole application (1) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'owner', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'manager', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'driver', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'staff', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'warehouse', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETADriver application (2) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (2,'driver', '(ETADriver): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETAObserverClient application (3) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (3,'client', '(ETAObserverClient): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETAObserverWarehouse application (4) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (4,'warehouse', '(ETAObserverWarehouse): Compatibility with Legacy while refactor in progress'); + +-- Role-Permissions link for ETAConsole application (1) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,1,1); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,2,2); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,3,3); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,4,4); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,5,5); +-- Role-Permissions link for ETADriver application (2) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (2,6,6); +-- Role-Permissions link for ETAObserverClient application (3) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (3,7,7); +-- Role-Permissions link for ETAObserverWarehouse application (4) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (4,8,8); diff --git a/db/Models/schemas/eta_rbac.sql b/db/Models/schemas/eta_rbac.sql index d99d05d..77b2b30 100644 --- a/db/Models/schemas/eta_rbac.sql +++ b/db/Models/schemas/eta_rbac.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Wed 01 Apr 2026 01:34:28 PM CST +-- Wed 01 Apr 2026 02:54:57 PM CST -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -54,17 +54,40 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`auth_identities` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`applications` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`applications` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(512) NOT NULL, + `slug` VARCHAR(512) NOT NULL, + `description` TEXT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `slug_UNIQUE` (`slug` ASC) VISIBLE, + UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) +ENGINE = InnoDB; + + -- ----------------------------------------------------- -- Table `u947463964_etaviaporte`.`roles` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) + UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, + INDEX `fk_roles_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_roles_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -73,10 +96,17 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`permissions` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`id`), - UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) + UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, + INDEX `fk_permissions_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -87,10 +117,12 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`role_permissions` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `role_id` INT UNSIGNED NOT NULL, `permission_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, PRIMARY KEY (`id`), INDEX `fk_role_permissions_roles1_idx` (`role_id` ASC) VISIBLE, INDEX `fk_role_permissions_permissions1_idx` (`permission_id` ASC) VISIBLE, UNIQUE INDEX `role_id_UNIQUE` (`role_id` ASC, `permission_id` ASC) VISIBLE, + INDEX `fk_role_permissions_applications1_idx` (`application_id` ASC) VISIBLE, CONSTRAINT `fk_role_permissions_roles1` FOREIGN KEY (`role_id`) REFERENCES `u947463964_etaviaporte`.`roles` (`id`) @@ -100,6 +132,11 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`role_permissions` ( FOREIGN KEY (`permission_id`) REFERENCES `u947463964_etaviaporte`.`permissions` (`id`) ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_role_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -111,12 +148,14 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` INT UNSIGNED NOT NULL, `role_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `expires_at` DATETIME NULL, PRIMARY KEY (`id`), INDEX `fk_user_roles_users1_idx` (`user_id` ASC) VISIBLE, INDEX `fk_user_roles_roles1_idx` (`role_id` ASC) VISIBLE, UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `role_id` ASC) VISIBLE, + INDEX `fk_user_roles_applications1_idx` (`application_id` ASC) VISIBLE, CONSTRAINT `fk_user_roles_users1` FOREIGN KEY (`user_id`) REFERENCES `u947463964_etaviaporte`.`users` (`id`) @@ -126,6 +165,11 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_roles` ( FOREIGN KEY (`role_id`) REFERENCES `u947463964_etaviaporte`.`roles` (`id`) ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_roles_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -179,7 +223,6 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `owner_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, `privacy_enabled` TINYINT NOT NULL DEFAULT 0, @@ -187,13 +230,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disabled` TINYINT NOT NULL DEFAULT 0 COMMENT 'This field allows blocking publications based on business rules', `disabled_at` VARCHAR(45) NULL, - PRIMARY KEY (`id`), - UNIQUE INDEX `owner_id_UNIQUE` (`owner_id` ASC) VISIBLE, - CONSTRAINT `fk_companies_users1` - FOREIGN KEY (`owner_id`) - REFERENCES `u947463964_etaviaporte`.`users` (`id`) - ON DELETE CASCADE - ON UPDATE NO ACTION) + PRIMARY KEY (`id`)) ENGINE = InnoDB; @@ -616,6 +653,140 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_templates` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`user_applications` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_applications` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `application_id` ASC) VISIBLE, + INDEX `fk_user_applications_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_user_applications_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_applications_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_users` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_users` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `company_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) VISIBLE, + INDEX `fk_company_users_companies1_idx` (`company_id` ASC) VISIBLE, + CONSTRAINT `fk_company_users_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_company_users_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`privacy_groups` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`privacy_groups` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `name` VARCHAR(128) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `company_id_UNIQUE` (`company_id` ASC, `name` ASC) VISIBLE, + CONSTRAINT `fk_privacy_groups_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`privacy_group_companies` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`privacy_group_companies` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `group_id` INT UNSIGNED NOT NULL, + `allowed_company_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `group_id_UNIQUE` (`group_id` ASC, `allowed_company_id` ASC) VISIBLE, + INDEX `fk_privacy_companies_companies1_idx` (`company_id` ASC) VISIBLE, + INDEX `fk_privacy_companies_companies2_idx` (`allowed_company_id` ASC) VISIBLE, + CONSTRAINT `fk_privacy_companies_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_privacy_companies_companies2` + FOREIGN KEY (`allowed_company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_privacy_companies_privacy_groups1` + FOREIGN KEY (`group_id`) + REFERENCES `u947463964_etaviaporte`.`privacy_groups` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`loads_alert_emails` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`loads_alert_emails` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `load_id` INT UNSIGNED NOT NULL, + `email` VARCHAR(512) NOT NULL, + PRIMARY KEY (`id`), + INDEX `fk_loads_alert_emails_loads1_idx` (`load_id` ASC) VISIBLE, + UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC, `email` ASC) VISIBLE, + CONSTRAINT `fk_loads_alert_emails_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`warehouse_alert_emails` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`warehouse_alert_emails` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `warehouse_id` INT UNSIGNED NOT NULL, + `email` VARCHAR(512) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `warehouse_id_UNIQUE` (`warehouse_id` ASC, `email` ASC) VISIBLE, + INDEX `fk_warehouse_alert_emails_locations1_idx` (`warehouse_id` ASC) VISIBLE, + CONSTRAINT `fk_warehouse_alert_emails_locations1` + FOREIGN KEY (`warehouse_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/db/service/initdb/00-schema.sql b/db/service/initdb/00-schema.sql index d99d05d..77b2b30 100644 --- a/db/service/initdb/00-schema.sql +++ b/db/service/initdb/00-schema.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Wed 01 Apr 2026 01:34:28 PM CST +-- Wed 01 Apr 2026 02:54:57 PM CST -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -54,17 +54,40 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`auth_identities` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`applications` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`applications` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(512) NOT NULL, + `slug` VARCHAR(512) NOT NULL, + `description` TEXT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `slug_UNIQUE` (`slug` ASC) VISIBLE, + UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) +ENGINE = InnoDB; + + -- ----------------------------------------------------- -- Table `u947463964_etaviaporte`.`roles` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) + UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, + INDEX `fk_roles_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_roles_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -73,10 +96,17 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`permissions` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`id`), - UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) + UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, + INDEX `fk_permissions_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -87,10 +117,12 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`role_permissions` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `role_id` INT UNSIGNED NOT NULL, `permission_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, PRIMARY KEY (`id`), INDEX `fk_role_permissions_roles1_idx` (`role_id` ASC) VISIBLE, INDEX `fk_role_permissions_permissions1_idx` (`permission_id` ASC) VISIBLE, UNIQUE INDEX `role_id_UNIQUE` (`role_id` ASC, `permission_id` ASC) VISIBLE, + INDEX `fk_role_permissions_applications1_idx` (`application_id` ASC) VISIBLE, CONSTRAINT `fk_role_permissions_roles1` FOREIGN KEY (`role_id`) REFERENCES `u947463964_etaviaporte`.`roles` (`id`) @@ -100,6 +132,11 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`role_permissions` ( FOREIGN KEY (`permission_id`) REFERENCES `u947463964_etaviaporte`.`permissions` (`id`) ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_role_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -111,12 +148,14 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` INT UNSIGNED NOT NULL, `role_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `expires_at` DATETIME NULL, PRIMARY KEY (`id`), INDEX `fk_user_roles_users1_idx` (`user_id` ASC) VISIBLE, INDEX `fk_user_roles_roles1_idx` (`role_id` ASC) VISIBLE, UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `role_id` ASC) VISIBLE, + INDEX `fk_user_roles_applications1_idx` (`application_id` ASC) VISIBLE, CONSTRAINT `fk_user_roles_users1` FOREIGN KEY (`user_id`) REFERENCES `u947463964_etaviaporte`.`users` (`id`) @@ -126,6 +165,11 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_roles` ( FOREIGN KEY (`role_id`) REFERENCES `u947463964_etaviaporte`.`roles` (`id`) ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_roles_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -179,7 +223,6 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `owner_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, `privacy_enabled` TINYINT NOT NULL DEFAULT 0, @@ -187,13 +230,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disabled` TINYINT NOT NULL DEFAULT 0 COMMENT 'This field allows blocking publications based on business rules', `disabled_at` VARCHAR(45) NULL, - PRIMARY KEY (`id`), - UNIQUE INDEX `owner_id_UNIQUE` (`owner_id` ASC) VISIBLE, - CONSTRAINT `fk_companies_users1` - FOREIGN KEY (`owner_id`) - REFERENCES `u947463964_etaviaporte`.`users` (`id`) - ON DELETE CASCADE - ON UPDATE NO ACTION) + PRIMARY KEY (`id`)) ENGINE = InnoDB; @@ -616,6 +653,140 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_templates` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`user_applications` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_applications` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `application_id` ASC) VISIBLE, + INDEX `fk_user_applications_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_user_applications_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_applications_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_users` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_users` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `company_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) VISIBLE, + INDEX `fk_company_users_companies1_idx` (`company_id` ASC) VISIBLE, + CONSTRAINT `fk_company_users_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_company_users_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`privacy_groups` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`privacy_groups` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `name` VARCHAR(128) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `company_id_UNIQUE` (`company_id` ASC, `name` ASC) VISIBLE, + CONSTRAINT `fk_privacy_groups_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`privacy_group_companies` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`privacy_group_companies` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `group_id` INT UNSIGNED NOT NULL, + `allowed_company_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `group_id_UNIQUE` (`group_id` ASC, `allowed_company_id` ASC) VISIBLE, + INDEX `fk_privacy_companies_companies1_idx` (`company_id` ASC) VISIBLE, + INDEX `fk_privacy_companies_companies2_idx` (`allowed_company_id` ASC) VISIBLE, + CONSTRAINT `fk_privacy_companies_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_privacy_companies_companies2` + FOREIGN KEY (`allowed_company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_privacy_companies_privacy_groups1` + FOREIGN KEY (`group_id`) + REFERENCES `u947463964_etaviaporte`.`privacy_groups` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`loads_alert_emails` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`loads_alert_emails` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `load_id` INT UNSIGNED NOT NULL, + `email` VARCHAR(512) NOT NULL, + PRIMARY KEY (`id`), + INDEX `fk_loads_alert_emails_loads1_idx` (`load_id` ASC) VISIBLE, + UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC, `email` ASC) VISIBLE, + CONSTRAINT `fk_loads_alert_emails_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`warehouse_alert_emails` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`warehouse_alert_emails` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `warehouse_id` INT UNSIGNED NOT NULL, + `email` VARCHAR(512) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `warehouse_id_UNIQUE` (`warehouse_id` ASC, `email` ASC) VISIBLE, + INDEX `fk_warehouse_alert_emails_locations1_idx` (`warehouse_id` ASC) VISIBLE, + CONSTRAINT `fk_warehouse_alert_emails_locations1` + FOREIGN KEY (`warehouse_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/db/service/initdb/01-initdb.sql b/db/service/initdb/01-initdb.sql index bb28869..516d9da 100644 --- a/db/service/initdb/01-initdb.sql +++ b/db/service/initdb/01-initdb.sql @@ -2,20 +2,46 @@ -- USE `u947463964_etaviaporte` ; -INSERT INTO `roles` (`name`, `description`) VALUES ('owner', 'Owner of the company'); -INSERT INTO `roles` (`name`, `description`) VALUES ('manager', 'Manager of the company'); -INSERT INTO `roles` (`name`, `description`) VALUES ('driver', 'Driver user type'); -INSERT INTO `roles` (`name`, `description`) VALUES ('staff', 'Member of the staff'); -INSERT INTO `roles` (`name`, `description`) VALUES ('warehouse', 'Observer type of member'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAConsole','console','ETA logistics console for Carriers and Shippers'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETADriver','driver','ETA driver application'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAObserverClient','client','ETA observer console for clients'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAObserverWarehouse','warehouse','ETA observer console for warehouse'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('owner', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('manager', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('driver', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('staff', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('warehouse', 'Compatibility with Legacy while refactor in progress'); +-- Roles for ETAConsole application (1) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'owner', '(ETAConsole): Owner of the company'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'manager', '(ETAConsole): Manager of the company'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'driver', '(ETAConsole): Driver user type'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'staff', '(ETAConsole): Member of the staff'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'warehouse', '(ETAConsole): Observer type of member'); +-- Roles for ETADriver application (2) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (2,'driver', '(ETADriver): Driver user type'); +-- Roles for ETAObserverClient application (3) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (3,'client', '(ETAObserverClient): Client user type'); +-- Roles for ETAObserverWarehouse application (4) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (4,'warehouse', '(ETAObserverWarehouse):Warehouse user type'); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (1,1); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (2,2); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (3,3); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (4,4); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (5,5); +-- Permissions for ETAConsole application (1) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'owner', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'manager', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'driver', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'staff', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'warehouse', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETADriver application (2) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (2,'driver', '(ETADriver): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETAObserverClient application (3) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (3,'client', '(ETAObserverClient): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETAObserverWarehouse application (4) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (4,'warehouse', '(ETAObserverWarehouse): Compatibility with Legacy while refactor in progress'); + +-- Role-Permissions link for ETAConsole application (1) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,1,1); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,2,2); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,3,3); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,4,4); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,5,5); +-- Role-Permissions link for ETADriver application (2) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (2,6,6); +-- Role-Permissions link for ETAObserverClient application (3) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (3,7,7); +-- Role-Permissions link for ETAObserverWarehouse application (4) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (4,8,8);