From 4fcd3f01a5a4e22b3957b654ffc10e5848751724 Mon Sep 17 00:00:00 2001 From: Josepablo Cruz Date: Wed, 1 Apr 2026 13:11:07 -0600 Subject: [PATCH] feat(SQL): Adding working schema script --- db/Models/Initializations/eta_rbac_init.sql | 34 + .../rbac_root_init.sql} | 0 db/Models/assets/ETA_RBAC_model.svg | 5561 +++++++++++++++++ db/Models/eta_rbac.mwb | Bin 0 -> 38575 bytes db/Models/model.mwb | Bin 21745 -> 0 bytes db/Models/rbac.mwb | Bin 0 -> 21714 bytes db/Models/sql_generated/db_init.sql | 55 - db/Models/sql_generated/eta_rbac.sql | 621 ++ .../sql_generated/{schema.sql => rbac.sql} | 2 +- db/{ => container}/Dockerfile | 2 +- db/{ => container}/README.md | 4 +- db/{ => container}/scripts/migrate.sh | 0 db/{ => container}/scripts/run.sh | 7 - 13 files changed, 6221 insertions(+), 65 deletions(-) create mode 100644 db/Models/Initializations/eta_rbac_init.sql rename db/Models/{sql_generated/root.sql => Initializations/rbac_root_init.sql} (100%) create mode 100644 db/Models/assets/ETA_RBAC_model.svg create mode 100644 db/Models/eta_rbac.mwb delete mode 100644 db/Models/model.mwb create mode 100644 db/Models/rbac.mwb delete mode 100644 db/Models/sql_generated/db_init.sql create mode 100644 db/Models/sql_generated/eta_rbac.sql rename db/Models/sql_generated/{schema.sql => rbac.sql} (99%) rename db/{ => container}/Dockerfile (92%) rename db/{ => container}/README.md (85%) rename db/{ => container}/scripts/migrate.sh (100%) rename db/{ => container}/scripts/run.sh (87%) diff --git a/db/Models/Initializations/eta_rbac_init.sql b/db/Models/Initializations/eta_rbac_init.sql new file mode 100644 index 0000000..4fde2cc --- /dev/null +++ b/db/Models/Initializations/eta_rbac_init.sql @@ -0,0 +1,34 @@ +-- Creation of init content. Scheme assumed to be empty +-- +INSERT INTO roles (name, description) VALUES ('owner', "Owner of the company"); -- 1 +INSERT INTO roles (name, description) VALUES ('manager', "Manager of the company"); -- 2 +INSERT INTO roles (name, description) VALUES ('driver', "Driver user type"); -- 3 +INSERT INTO roles (name, description) VALUES ('staff', "Member of the staff"); -- 4 +INSERT INTO roles (name, description) VALUES ('warehouse', "Observer type of member"); -- 5 + +INSERT INTO permissions (name, description) VALUES ('owner', "Compatibility with Legacy while refactor in progress"); -- 1 +INSERT INTO permissions (name, description) VALUES ('manager', "Compatibility with Legacy while refactor in progress"); -- 2 +INSERT INTO permissions (name, description) VALUES ('driver', "Compatibility with Legacy while refactor in progress"); -- 3 +INSERT INTO permissions (name, description) VALUES ('staff', "Compatibility with Legacy while refactor in progress"); -- 4 +INSERT INTO permissions (name, description) VALUES ('warehouse', "Compatibility with Legacy while refactor in progress"); -- 5 + +INSERT INTO permissions (name, description) VALUES ('user.update', "Update user data"); -- 6 +INSERT INTO permissions (name, description) VALUES ('user.create', "Create new users"); -- 7 +INSERT INTO permissions (name, description) VALUES ('user.delete', "Delete users"); -- 8 + +INSERT INTO permissions (name, description) VALUES ('company.update', "Update company data"); -- 9 +INSERT INTO permissions (name, description) VALUES ('company.delete', "Delete company"); -- 10 + +INSERT INTO permissions (name, description) VALUES ('loads.create', "Create loads"); -- 11 +INSERT INTO permissions (name, description) VALUES ('loads.update', "Update loads data"); -- 12 +INSERT INTO permissions (name, description) VALUES ('loads.delete', "Delete loads"); -- 13 + +INSERT INTO permissions (name, description) VALUES ('proposals.delete', "Delete loads"); -- 13 +INSERT INTO permissions (name, description) VALUES ('proposals.delete', "Delete loads"); -- 13 +INSERT INTO permissions (name, description) VALUES ('proposals.delete', "Delete loads"); -- 13 + +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); diff --git a/db/Models/sql_generated/root.sql b/db/Models/Initializations/rbac_root_init.sql similarity index 100% rename from db/Models/sql_generated/root.sql rename to db/Models/Initializations/rbac_root_init.sql diff --git a/db/Models/assets/ETA_RBAC_model.svg b/db/Models/assets/ETA_RBAC_model.svg new file mode 100644 index 0000000..223d484 --- /dev/null +++ b/db/Models/assets/ETA_RBAC_model.svg @@ -0,0 +1,5561 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/db/Models/eta_rbac.mwb b/db/Models/eta_rbac.mwb new file mode 100644 index 0000000000000000000000000000000000000000..d916414bfdb95de544fa68a3559fde9fbd08108f GIT binary patch literal 38575 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%0Dr9v| zkJOg|N(J4o!>g7;Chsq5Pu_=u*+G<1_#B9~V3?00h+nZqc%wxVPTAq_x7mXxQd&bF zYZ+P(T%TWtzuQBbwiF@6qJU$-dA%EXoXC;BZ!Eo@SCr0hk z7ev#TJz1j{@Lq+2mCa*hIE4v@OElp>!Eo9OS2l5r7 zjI8AwObM`IacDqngbu8;6Mz;*9pUev1OuI>mmN7q{w%69Zri5`-ruPT_hi*Puf54( zm`n-ES4m!w+??pd9)RC*-!#j@;a}eD0mqQzBkP*|I4Vk)-9SUmnSQ0n=u5tNd_J$# ze_QDlYB*?L<87t7DAKB28=_0%^Hs3Y1(nmvO#o@P^o4d|nkxDI%NIZdHeTJ^d)0Pl z(M&nT#J}9c;C9BA+bV~veBhgC53V&Pb9h0XhfPHayC8?pna6c+WB0YLiZ%Izn2TpCCdmY8nuWeJDX zU}1Vp&D4*kY}qkBK3jJeQxCnMRPLoB5CxQ2$GN%J2^_I8(;<;5M(&Q`2tH%U(gzMJ;`IeJB%%z_omp!?QAB>3*4$g|4DX$-dg|7vZ{#j% zBf(7)*mEQLiUlw0fp0J7*@rMt5*7UN5)oqI^<-gsz^@98(-Lya!aqXv8AP4Kk7#_X3Or&5fm7iiY82?j%e-xCB#}LR-$}bp2{5bKT4is!e7is@_QFc3qa2kD~u zU5SDr9N9trCcLD9fxa8Z{yf9~!V*fiseuwk-G{MFXSO%<`Bwn%`ojxs2dlIghaJ-$ zNYfP89T*(T9ndGbSL$5kj1j)%T>Eqbp1L=TFBk z{G7rSUDg139=Bd!fPBDx3D`}N79E1 z7vZdK{DFR2l29ePiZ7tCgJ9SB{HhoI9R6YmHeI@8sq9~_Q5ZKMxFEQ|12PS29OBcw z!g2LYFROnc5gL`wYK(r-AN<~fJSyBIf%s+MHm4fI`-L=1ruqv|?m-SFJhkh-o5_Zs z*dZqOtx+Wv_t^jhPlW(HOXyI@esFM>(|`j!KLig1Pw>wygYH41P(=6Tz$}nQ?=iO) z7;Zs92iF#N(9^E2x=J?wOMy!c=EttQ1MZd9Lqtz7I9{nj<_VTER9}L}#V`1JJ6m6$ zp0>IV!k?HW!tE{k@cOd+4dBb&*yaQY?{OIJ#pxy)iytfNArL$)^`fDfVo4oQL0ZoA z;Mea6&T(K|!tU@C1@0?c`ZBvW?g*}bM{(2lj~IuVBf6<1^M-JTa0l~e8MGtkBD!ga zW`V3W5S%+=xYQC4^XymP0omjZY`*t^`-1x(Aap5GyTT2=zMydfPmY320$FQR59Ew? z#Y3kdCpN%w!~F9m5NO_MD8RSizC|LN!?3?>S6WI-lfc2V!uyMcrE4^=nqa#RY&Su| zvy7U_9%$S_vwiU!G2!J1CX^~fer_5D_VHW9#oe()yU1NO58~bwY}!b|0wVxV0YSp* zZCQNZ@q)$>Z!;FD@7|W(@e1FGe6ge_dM?6#e2OKF3O7#LJ&g1KXVPP!nu(3)a#MoF9ds*d$0lu$n(V?E2z9utL?xSCN~EU6P7X%lxoa59Mpoe zgS0y$Xaao!@mC6yWAOPX8vH ze^2q<;a8kiCEVl=8nbVQFNS$b#&~QAiooHNR6+G^z3l_77ig|8Q=+@p7YT=~c@0nq z0TrxJl*oebGxr3=^lwjjkI{%h2tjabGN7Xy((?<25JF;5LYzAhaVg(m>RnjDm9W$^ z%9lgqR1*AXH$Rw?>z?`uQgM2wa-(3DjDL@)?Co1P#cO8xmp+-@vsX5 zlq$Ptd%g7<(HBf74>lSPZmU=j)Ew5AJBc)*itAoOgka1U!51!!zxvv+7g7k6a~lT& zvDgcACcq&x_M8C0-1{3aE~u~Gp5h235dz>#&I2N$znN_QZ2JkqtQB%m>c}Ogrfe#NYdWC(cRC;ewyMTqETrjnqAmdpD)|%0Bx1#)=f` zJl;($z3B)<%HF*40e+CFw?5wViR|<>)J$*Jczbx*}DGF811onXBq*3 zf>0g9$1_xj3M5|;BSF3v8|j4I<%P|vJBZcBpb|pIT~I(A(N&<6BjmVI(PZo z$=}W&eUT>A{K!l-Y&i=Dk2|zw@5j8D)|ei~g{>|sq5&9LFCDoK_NWhtcYT!YoW`XjK`=j$4vwq=Ivj0 z^mt6p<=z<*RW|xf=gHU)S~@Gy&|XU3o&_5-VGsBEA|o-jrrdC%fe%qQy1f!%@Zl;D z3`hd`(;ki6?K~;ZX4FDte`uSK05s<8<`GCYW~|<3sDkN7vv#%vukaq!qvV%D;i={K z6{qMCpN*8KJEI!%@9r8`+X~S~X1hUAo3R(R5Y4zeD!#}q)G*|#-=BfoUAc5JPUOA< zX-P(GmR#ylcZV|_S2Nr-7aAhQ9J;o%pJ~EOcpUVpYm-e3U47j`xAM4FNV7g1*5p8q z)+!Mq#Dyoa`J&D)j)^MJ43l~gBrjf|B6c#Yyur<}!xKKpvp>ftqc7%C;x@gU`kgl1 zdG2-`X?n+`X|Sw;R=XWkS;8ktxucqN@bk*$?IHwpIMp8CsN zV)CH~jB`i4wTO=EH0&4K-Iwgj^=f)SXKf^iJPzw}g}Ls|Aw4AX`3VjiB79*6z-u2=ga1K@l@ zxn33rxuCN0BT3noIFEr(3iSE;XMH=|td#eEzPoAUl3hfR(cwkdYu5rU|CurAQ92n} z#61n(!CmV~I=;)@Z2ZQUDO;V0=Uf<>toBY#z`)@!*Zy!gIEX%nnC$y6vICtD1N#S8 zvq}^$88J9R*24PPL}p{^trIBJ$gDP@EF8QDu;xoI_808JY>*t4bKm0`O zPS(*!10Y@Fc{r!0*er{XkZB*6vnXUdDFdm9caJacnqgU}7z#nJP zG8x6f14o&pnwepiQ#le*li|Iwu3#H^nKJlskcBXO zCg?JpOGhB^L4C|3=hjHBU!xIkCSkNw{RXv$!u?ui&7#LYbXF>l>|;8MV>Bh~s zC3(got*#GKTGN}P31#slw~-r_SY1DtbljGe0C13{rX_#@%*9g8af!)z4Dd?U3(D$D z#5dxEjS4deIr!nVSx~E8>cx3_EeGPYec)-`o)~4sKjW=_8zk$Qr%cob<7fr9K+SYr z2qI(dZIkA6)K1ws)*xwnAM!xFvv?KV4L2iagJv9vx zP!jm>h*!V9c5i#%`JU@>MRf^-Gk)4 zcpS_7aDLX0NX9QQYb&x5$bV98a5uWGOyP3({J@Vy+e81EX<}oAPhpDiI=uePG`~fk zIt$6F{}Gm`^nxY5g`hUKwF`*K;Q#J|)AR@0QEi-Pmm@4Fjcb!0L=7c2fFYes<+AEUe<5pPniQ597w4r^!RL{~mdB-E)gsDeSZEjW<(i?0Rj zj+p^=w+>2-sz4=$0lRq?&4684$HaMuQ0pkbC!nCK)~FUvRLtCv%Uj7Gxg|8+mhHlS z#}QDy_92lG%4$%h@C;24qVvg|w6tVhjovP4La4HQH<4t&)RKDYz@f2+a;HB)Dm***YJHPko?X}Mr>j!ZovlMl@5&4E z!Q0))hDrSR>+OKiDS5W?;Z5bvzeCxpx6`D~0%K8DHu5Am8Q_Qy@-$49KkF^tVGo$6 zlc~cyD`k7Mnj6W=I3S8aC7tE(oVr;8!_C8bC@#b6DBhl%Tq7BiI=VV^KF=|LA*-#- zZg&pyC{O>6`qgN!et){+^tiUzgLQ_6IkZe<->^!Yql3R$IFLnYC@+sf&|1irL#*RNoBQmur_{zH><&*2R12B-;}xQ zt&&>m`ozJdfD7Gx1YNe)N6EvVXIUHc(Ipo4!pG)0o7#Z~c$=N4gBQ?Ecfh%MieB^Z zzjR1NFcH(z@`#+Vg&9m6aU$~R3yU{&CAY=U#8DMgWrOWY84`ov>kj67-3z6ImA_1_9XS>Axsy}GY0FqPc7{YXL@uNCUR%G z=*)*MaJWq>Gd}5)*`1m2@jgDOetmOHYkK9Ne>Kzf3;0I;DqD9fp8f3y>WuQowo4K% z>rN)hteOMTg_ZG5k^Pc6E2&~Jr#fqW?HBf@s0tV}pan;C1O%C_P`WfM|G2a?(!#oM zy8V-{T04dN$N{v0@g=4|oO#sOrKk9|XuacP!`^g9=Yj7x`wK7kfZsdJ42p``p1Zpg zb&R7O!fmX*TUL~83ZE>IB_n*HWur;HRFakSY6H2*+7|8nlnoDw06vZ$nynFz>q2Cc z_~YdUx9GV})&~eK`zv~l5w7h6{`Typnq42woSNE=cHIiYaOJcqLsxozKcqF@r z`?$;@)aD72bubtd-wR|OS^v)4!E9>Mti@4ur%}WSGZ5DmEUznAT25rjtYV1q6~`}- zFrE_1Ie$d`*lqddJZq@ojI7A+BnJ!_e<)e3ZqMFHuh+*Q;=%)%ukCJuWo=2eviP6<@L#_DhQj*Dpg~gW$-hHe21(yhj(W>=(fmy|W64mJUf{7RaVIyp- zD)S7tJFPYH1q?Et-yF#}J*;l1I!%;t9=vu8a@;*H=<<3rYdfOTW>L}6?Vb)-gIVsJiW>u@TGlRy#|jAFn&)kmETSoAe%HAsC`0**O4@6vm4H~y}Rdm1t)!!+3#?X;bwZJ<5u&o;&$a$Y=^zVj7D0!94;QJCRQUe zQyk(zV|dhTa6S?ibh(aE6(-&a`PAWu{u*>KMYTS=hEl@7NhY}JVJ5TP`CKS3 z&7)Nmi4kS$Fr3H z%=X_HN@#ce4Q;Ee;m3_=Ra)kgoo@Ftd)IdtxA3)kW3Y#g@H3l_GkzuLO|H2g_T6)m z%bk5^SB8_gd<_`8?R94_rW45r%kR-_*EStjuV*$L+B(#enQrI@+1@wZC%QgvcA6?3 zKbFtOavJZ)18sEI57M7|njOxbM)B<$RCQnWbVH{dZkgCGJ9I^5w=Va{Y#*BkZC&p{ z;U>AmdS|0IFQ0<#*zXYFqIrJy{(88}ywJfp=L_m>ciFjY#>I)k>()2*Zo3$|>CE0j zCKivG4B&2by1h~l)1636rfo#0tG{Tt+v`t8U+afHKuh+%(T+$k9jJ z+NB?=dD_u5eAqZX_*jaaA{Ow&5rur?6OR#E{W$peTBO6e(!unt<=s-$9R=|=jcJ1bS!``|io>w?K6(k0`Xf?yXN-D7(|m@$^Qxze{->5;z+N06wX zsGF2C$L9_ojF?jp#WE&*zw^h8L2TrZ)Ka;m-cy8yG5%WVYmxiRcp#6&g>6hE8K@E{ zaWl-nbE9Q6GBiX^H?22y`Bf1ELNQT172S=oBv{(hk|~!+haP4J?wf0zU4&WFla855 z+g%x!$bMbJ#d496E)u?{UVVeMZ@fp=W+eI){CtB~lEiri{^T zLF4%tVoYc?PUbzHDYRNxno>(5e5geP=o9F60jW*oZDR)e+XbSn?~)$77i_$SyOZ6| zGo(O@)q0pU_3iyBr9_6j3xZYV!~^Q_5^H=KP1%?rjYH~i*4^cdflkY^)-YK@nSJYi z-`rAce#|qm6>oX(|A1>q?nm~g6Wu9-$&W0{Kj7evLb6Q?@!wZJPpKbeGojxwfL)P6 z`&s@wqRW{24hxmuKu2oftw)G=JU5Qd?5~?A7Na51A6 zm?96VPDadvlCh*cNNJMUKJB>?8(1qgp>DxxMd~I%5h9Ve4=P<~te!qDx4#dq{Tipo zw`rGl$VMj(XQb;^ERf8@;2j}XbW`}b=m2+t59{P%2ZvjHgquNO&KWzJ5Gl^+^341WCz0&Sg z9oiix2#t`KXl6qv>wczwV-!xX*W7LAh!>?5DbZVnNZksZcr5)tZCnRb6ImBV1q3Os z6sgid2-3R<0bJ=I9i+D?NFXt^Aiaxpq!%gDi-1TAod`(iNC&Aah=344B$Uh_c7Olf z|D2sUGjHCTd*7M4bHDH2bLX4~9{0HRTIX0+qmg$IP!1u+6AYVx#sGo-4d;=vM&7H} z6p z_B?x7vkZlhr?;vw$KUk7OPy|&`7paTTyt6Y=H8d?7Rus`5F%zhSHdCzF80+(#r&A& zCdM&zGL}RSIB+kzat$=#38j&)74c(rN#U{Gm)3pmqTFc%wI4OmC#$9@DOQGE z1p-!M!pXbyy9$;0XlCwIk~j!aULNgt=4ZR9oxco`d2xq7H2v;&DA#zalKLY2{Vb2S zfLf1EL~j(y$Vm){ffp6u_r^K4#^>>e!m5OlFiRrIxc;j^+u;q$M4r{MQ1&(@lhCw* z;EZ*5^crFOV9fOs%+DtUfHZ*!rg&`6tQu6Ynfn z6YmrTGxhn~s7H6ks3ogBjZz=~5OdJYWtQ04BjXlH$=_WEfauvH@bX@fzmjS6=~Zdu zkM2%Vq0+kj_KkTnhNCgc&=9$145%p%m_n>PgC5OO4)&Vr)ZM|8a4p=I4X~ z*qCDWeEz-fO6I;hhuD>_CdE0Ch%{Z#&#KfqUH9Id*yow;tFA8vSF!6xUAZJ^#aq&7vPo~!~@{DKL9Xx?<1fl(^B!?Wciyd;}`2WQiRsw zHFTcsYjcPpU5c?Zi6Ss6p1YCb9Ls3P`^~@fI?2HwPrLX*E|L#Hj`Q#xX+fctDj9fQ zqfx89vFlF4;qPcI6Rjst#jP!%qtoLfyU9B!v7v~N>73*$_MNm7TSZ{qDR{9702)c= z)-0?JG~XNf^=MAbHWaVQGZIC}&EYNrCc%*}OgfJ5kOI1(_|Tnd)|mF%Cu9pK+7v)Z6@^OB~7j4cfs@i>V=#uTGnEZHZx;nVuNzi{Q{QAtledjZS;pl98JG< ziRq$Eo!Dh$t2B=1>{>W&5=U%I-QYWh*edt-L|)vPYxMk<0`9EaULGp3Xrt4qHN|nd zl!(nV&AD~pqmJy08FRn`YO5W-&$rDxfYqGu=3hrk&==w7FN+qQ1#XQzKF)5wQnDl` z=7x9Q`tasWo9GEFysUZpejK9zC+8iyLHm>mf-~LvVJQ)LxI3gd5a-XQa74_zwzAg) zyc*dBRm{C}m05++#m7X3Fw{kIKiuXc^s%0TP>4CghZ&kTcC4$1&FLA}Eb8CbW#(M=7`(hN-F^7FlmC*yjl@Y({UPD(6)b_F8hAsD4w~&Icm#fb%Bc@1vRTYMPeYiG1b@ zJlw|Pj<$#5hjxJD;YECIywEPNX*O%e!dx3gYbZLRgJ2>9xj3Y|OTDTpFY{YWvEp^T z{qdMuB+~v}(W>CUp22CHCENB0I&&&<;1gqymGRw71w@;Cb88J3<8$^``O|A%>lse{ z$j@S?GOuG~X1vP@>j!p`;RzU0!9OI#25KxGV3z>Eo>>66b`WqO&$OoYZBKS%f2z`T zb_R+qEUg^-h}vQN#2xEFhp!Z@5moM+AMW>huY5~@su#p7M8F5Sep8ldNn;|<;Qf9O z0B#=yjL8{7l37GlyS8<$7nJlKwLCLVrGfc!m|Ak@VQ^oy3zk>z?jh?hGhII@psf;j z^ox`cO+%{|^R%wj%%$H3tG|snuw77p34iks9A%#ew*UAF4e&TsJVPRIEfu@|0UW{8 zsz<_%(&#%lr5Mb4(h(V>w8k8FX=P&P>(x%R3$E-oWxLUn8A13NyJ$E-ul79eS;K6p zc2{eY`Lmapllkfd>k&V}Qu+;Tfgs}g)rZ2StUl^9zKFu40B|Gt(n0r!orijlDv;5x zA%60$VRoV8No{YQp^JnxkVa<{h@LI;BUFQ@;_+AewjYBXe&##%L(aXe{V~Y)9 zB!-;muOASiaPUPc%5(T9d5NF0vjA=#9Y3VbkWar1rkcr`rUFG8qSNU~$!#z<>3&Z$|A?k+Q>KuGG#^pBMB6TEkk`HoC zRohx#S?`fe@7i9(_jizqmloSMEj2aV%x=qV^!|2>YT8?MdOVgQa-e=<&Ef;aP9Z7HCc{H z@wMpRe)3IU^eIj5?b6D=4XyPstYck6RSUJeK;qC`!vR^C?>p}Gj4u)5DYV8i!a<8a zojGl{9l`V=7!-GeKodoI>PeVcS)tJyUZ1D67q2yOTYBbyY3b-i!hraC1e}L5DTbYc zVXp(cL@NTkB`cWCqRJ0gbZD>j>NMntY+Y}`s&sglhR+VEC+q~*D#;T}fz6Dlc2MxAweP3197dxQCDT%6jKE{K64*0OWVma6%z z^#hB4EvF)rjYGKG=cIw_?kw`8lOZp?+sn7ykXSLQrKTyQhA{XDKQUub#k=DDtByt} znGr=f23uaVzqV_H3nh04gfra3T}15fdfSEEN4!-Q{S`vFjfRNm|K!Ab%&cH@qICYd z)lC=*j*RldmU2m|`bm>0W#hRWG4UwpHr{8BSp|pFBkUR+JjT;^V;E{++3v$VKiRSm zPvJe}smZ*Z>!Roo(mj5%$jCdq_Pbv9+L{A{=CNqvo1ks2TM=#{4j~*oT+5P^-anT& z;D<?IESHftY{%D!F5h=u4)&qFeuj)U(F=;$?Uto*j79#T2r{sL_?ZQ z*6*C>M#M_|J6ScTLFiILpC4iCFUB8T3s7~$d0jR0}hkW0j_=g4D6G)1#SI$JBrWyZOH@_ zvKa>{;@|B_jar}E$$||sYKsMMCZ8#`Msh=cvP(x5u?y23RQZ6pBsw)pIfv-f3d)Hq zirW2CxSSv8VrHXJo%-0~@XXphLtTeK2?>*ce33BNBVFE0@gLGvF;4>|lnu^B6=d(? zPYOd%G1m8t*3AYae{vqYVorWe<07CUGs0h&Vau5s6S;d@AbxXK*ycR;1~v!2%2|_{ z2S;`2X<#4xX+MHxFS~Z+l^+EA*e*|5hIVH9=u;G-1wv6w7}pUI_df zAN;NODe?c=;jb6Gc-(*Ehrjhs|EVXgr$s_~agT(sGhHGgl1(8ZQYX^!G1S-QFohvp z>>+LrP8>QgM+lU|4&mVB>;>Tv6BfPZdNCs8?%)J*wR6AA;VCC6BPlH*CoO3M@v!r9 Mwu8eE9*}GQ0lTBBoB#j- literal 0 HcmV?d00001 diff --git a/db/Models/model.mwb b/db/Models/model.mwb deleted file mode 100644 index bbaaa992d49df787146118115e824b577f274920..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21745 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 GNBJ+p8_7`s literal 0 HcmV?d00001 diff --git a/db/Models/sql_generated/db_init.sql b/db/Models/sql_generated/db_init.sql deleted file mode 100644 index 62d9621..0000000 --- a/db/Models/sql_generated/db_init.sql +++ /dev/null @@ -1,55 +0,0 @@ --- Creation of basic User Types -INSERT INTO user_types (name, description) VALUES ('root','An easy way to identify the root user of the system'); -INSERT INTO user_types (name, description) VALUES ('company_owner','Company Owner'); -INSERT INTO user_types (name, description) VALUES ('company_manager','Company Level manager'); -INSERT INTO user_types (name, description) VALUES ('staff','Company Level Staff Memeber'); -INSERT INTO user_types (name, description) VALUES ('driver','Company Level Driver Member'); -INSERT INTO user_types (name, description) VALUES ('observer','Read Only member'); - --- Creation of first user -INSERT INTO users (user_type,name,last_name,created_at,updated_at) VALUES (1,'Pablo','Cruz',NOW(),NOW()); -- root -> root - --- Creation of basic roles -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("root","Root role with no restricted access",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("system_admin","System Level Admin",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("system_developer","System Level Developer",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("system_reader","System Level Read Only",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("system_staff","System Level staff member",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("company_owner","Unrestricted access to company resources",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("company_manager","Access as manager to company resources",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("staff","Access as staff to company resources",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("driver","Simple access to company resources",NOW(),NOW()); -INSERT INTO roles (name, description, created_at, updated_at) VALUES ("observer","Limited access to only read company resources",NOW(),NOW()); - --- Creation of basic permissions -INSERT INTO permissions (name, description) VALUES ("root","Root role with no restricted access"); -INSERT INTO permissions (name, description) VALUES ("system.admin","System Level Admin"); -INSERT INTO permissions (name, description) VALUES ("system.developer","System Level Developer"); -INSERT INTO permissions (name, description) VALUES ("system.reader","System Level Reader"); -INSERT INTO permissions (name, description) VALUES ("system.staff","System Level Staff Member"); -INSERT INTO permissions (name, description) VALUES ("company.owner","Unrestricted access to company resources"); -INSERT INTO permissions (name, description) VALUES ("company.manager","Admin access to company resources"); -INSERT INTO permissions (name, description) VALUES ("company.staff","Staff access to company resources"); -INSERT INTO permissions (name, description) VALUES ("company.driver","Driver with simple access to company resources"); -INSERT INTO permissions (name, description) VALUES ("company.observer","Observer with simple access to company resources"); - --- Link of basic roles with its permissions -INSERT INTO role_permissions (role_id, permission_id) VALUES( 1, 1 ); -- root -> root -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 ); -INSERT INTO role_permissions (role_id, permission_id) VALUES( 6, 6 ); -INSERT INTO role_permissions (role_id, permission_id) VALUES( 7, 7 ); -INSERT INTO role_permissions (role_id, permission_id) VALUES( 8, 8 ); -INSERT INTO role_permissions (role_id, permission_id) VALUES( 9, 9 ); -INSERT INTO role_permissions (role_id, permission_id) VALUES( 10, 10 ); - --- Link of Root User with its role - -INSERT INTO user_roles (user_id, role_id, created_at ) VALUES (1,1,NOW()); -- root -> root - --- Create Root Auth Identity and credentials - -INSERT INTO auth_identities (user_id, provider, identifier, is_primary, is_verified, created_at, updated_at ) VALUES (1,"email","josepablo134@gmail.com",1,1,NOW(),NOW()); -- root access with email -INSERT INTO auth_credentials (identity_id, password, created_at, updated_at) VALUES (1, "PasswordGoesHere", NOW(), NOW()); diff --git a/db/Models/sql_generated/eta_rbac.sql b/db/Models/sql_generated/eta_rbac.sql new file mode 100644 index 0000000..b833093 --- /dev/null +++ b/db/Models/sql_generated/eta_rbac.sql @@ -0,0 +1,621 @@ +-- MySQL Script generated by MySQL Workbench +-- Wed 01 Apr 2026 01:09:41 PM CST +-- Model: New Model Version: 1.0 +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +-- ----------------------------------------------------- +-- Schema u947463964_etaviaporte +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema u947463964_etaviaporte +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `u947463964_etaviaporte` DEFAULT CHARACTER SET utf8 ; +USE `u947463964_etaviaporte` ; + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`users` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`users` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(512) NOT NULL, + `last_name` VARCHAR(512) 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`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`auth_identities` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`auth_identities` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `provider` VARCHAR(512) NOT NULL COMMENT 'type of identifier: email, phone, etc', + `identifier` VARCHAR(512) NOT NULL COMMENT 'email, phone, etc', + `password_hash` VARCHAR(512) NULL, + `is_primary` TINYINT NOT NULL DEFAULT 0, + `is_verified` TINYINT NOT NULL DEFAULT 0, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'when phone or email, password goes here.', + PRIMARY KEY (`id`), + INDEX `fk_auth_identities_users_idx` (`user_id` ASC) VISIBLE, + UNIQUE INDEX `provider_UNIQUE` (`provider` ASC, `identifier` ASC) VISIBLE, + CONSTRAINT `fk_auth_identities_users` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`roles` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`roles` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `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) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`permissions` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`permissions` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(512) NOT NULL, + `description` TEXT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`role_permissions` +-- ----------------------------------------------------- +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, + 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, + CONSTRAINT `fk_role_permissions_roles1` + FOREIGN KEY (`role_id`) + REFERENCES `u947463964_etaviaporte`.`roles` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_role_permissions_permissions1` + FOREIGN KEY (`permission_id`) + REFERENCES `u947463964_etaviaporte`.`permissions` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`user_roles` +-- ----------------------------------------------------- +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, + `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, + CONSTRAINT `fk_user_roles_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_roles_roles1` + FOREIGN KEY (`role_id`) + REFERENCES `u947463964_etaviaporte`.`roles` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`verification_tokens` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`verification_tokens` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `auth_identity_id` INT UNSIGNED NOT NULL, + `token_hash` VARCHAR(255) NOT NULL COMMENT 'Verification token for email/phone/notification mechanisms to either validate or reset passwords', + `purpose` ENUM('email_verification', 'phone_verification', 'password_reset') NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `expires_at` DATETIME NOT NULL, + `used_at` DATETIME NULL, + PRIMARY KEY (`id`), + INDEX `fk_verification_tokens_auth_identities1_idx` (`auth_identity_id` ASC) VISIBLE, + UNIQUE INDEX `token_hash_UNIQUE` (`token_hash` ASC) VISIBLE, + CONSTRAINT `fk_verification_tokens_auth_identities1` + FOREIGN KEY (`auth_identity_id`) + REFERENCES `u947463964_etaviaporte`.`auth_identities` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`sessions` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`sessions` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `session_token_hash` VARCHAR(255) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `expires_at` DATETIME NOT NULL, + `revoked_at` DATETIME NULL, + PRIMARY KEY (`id`), + INDEX `fk_sessions_users1_idx` (`user_id` ASC) VISIBLE, + UNIQUE INDEX `session_token_hash_UNIQUE` (`session_token_hash` ASC) VISIBLE, + CONSTRAINT `fk_sessions_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`companies` +-- ----------------------------------------------------- +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, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `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) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`locations` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`locations` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `type` ENUM('loading', 'unloading', 'both') NOT NULL DEFAULT 'both', + `state` VARCHAR(128) NOT NULL, + `city` VARCHAR(128) NOT NULL, + `country` VARCHAR(128) NOT NULL, + `zipcode` VARCHAR(10) NOT NULL, + `address_line1` VARCHAR(512) NOT NULL, + `address_line2` VARCHAR(512) NULL, + `lat` VARCHAR(128) NULL, + `lng` VARCHAR(128) NULL, + `name` VARCHAR(512) NULL, + `description` TEXT NULL, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_locations_companies1_idx` (`company_id` ASC) VISIBLE, + CONSTRAINT `fk_locations_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`loads` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`loads` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `created_by` INT UNSIGNED NOT NULL, + `origin_id` INT UNSIGNED NULL, + `destination_id` INT UNSIGNED NULL, + `status` ENUM('Draft', 'Published', 'Completed', 'Closed', 'Cancel') NOT NULL DEFAULT 'Draft', + `product` VARCHAR(100) NOT NULL COMMENT 'Maiz, Trigo, etc', + `sector` VARCHAR(100) NOT NULL COMMENT 'Automotriz, Agricola, etc', + `truck_type` VARCHAR(100) NOT NULL, + `privacy_enabled` TINYINT NOT NULL DEFAULT 0, + `est_loading_date` DATE NULL, + `est_unloading_date` DATE NULL, + `weight` INT UNSIGNED NULL, + `notes` TEXT NULL, + `estimated_cost` INT UNSIGNED NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `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` DATETIME NULL, + PRIMARY KEY (`id`), + INDEX `fk_loads_users1_idx` (`created_by` ASC) VISIBLE, + INDEX `fk_loads_companies1_idx` (`company_id` ASC) VISIBLE, + INDEX `fk_loads_locations1_idx` (`origin_id` ASC) VISIBLE, + INDEX `fk_loads_locations2_idx` (`destination_id` ASC) VISIBLE, + CONSTRAINT `fk_loads_users1` + FOREIGN KEY (`created_by`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_loads_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_loads_locations1` + FOREIGN KEY (`origin_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE SET NULL + ON UPDATE NO ACTION, + CONSTRAINT `fk_loads_locations2` + FOREIGN KEY (`destination_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE SET NULL + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`vehicles` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicles` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `driver_id` INT UNSIGNED NULL, + `load_id` INT UNSIGNED NULL, + `VIN` VARCHAR(45) NOT NULL, + `truck_plate` VARCHAR(45) NOT NULL, + `trailer_plate_1` VARCHAR(45) NULL, + `trailer_plate_2` VARCHAR(45) NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_vehicles_companies1_idx` (`company_id` ASC) VISIBLE, + UNIQUE INDEX `driver_id_UNIQUE` (`driver_id` ASC) VISIBLE, + UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, + CONSTRAINT `fk_vehicles_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_vehicles_users1` + FOREIGN KEY (`driver_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE SET NULL + ON UPDATE NO ACTION, + CONSTRAINT `fk_vehicles_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE SET NULL + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`load_shipments` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_shipments` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `load_id` INT UNSIGNED NOT NULL, + `status` ENUM('Assigned', 'Loading', 'Transit', 'Unloading', 'Delivered') NOT NULL DEFAULT 'Assigned', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `last_lat` VARCHAR(128) NULL, + `last_lng` VARCHAR(128) NULL, + PRIMARY KEY (`id`), + INDEX `fk_load_shipment_loads1_idx` (`load_id` ASC) VISIBLE, + UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, + CONSTRAINT `fk_load_shipment_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`shipment_evidences` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_evidences` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `load_id` INT UNSIGNED NOT NULL, + `type` ENUM('loading', 'unloading') NOT NULL, + `attachment_id` VARCHAR(255) NOT NULL COMMENT 'ID of BLOB resource', + `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 `load_id_UNIQUE` (`load_id` ASC, `type` ASC) VISIBLE, + CONSTRAINT `fk_shipment_evidence_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`shipment_proposals` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_proposals` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `load_id` INT UNSIGNED NOT NULL, + `created_by` INT UNSIGNED NOT NULL, + `vehicle_id` INT UNSIGNED NULL, + `notes` 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`), + INDEX `fk_shipment_proposals_loads1_idx` (`load_id` ASC) VISIBLE, + INDEX `fk_shipment_proposals_user_roles1_idx` (`created_by` ASC) VISIBLE, + INDEX `fk_shipment_proposals_vehicles1_idx` (`vehicle_id` ASC) VISIBLE, + CONSTRAINT `fk_shipment_proposals_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_shipment_proposals_user_roles1` + FOREIGN KEY (`created_by`) + REFERENCES `u947463964_etaviaporte`.`user_roles` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_shipment_proposals_vehicles1` + FOREIGN KEY (`vehicle_id`) + REFERENCES `u947463964_etaviaporte`.`vehicles` (`id`) + ON DELETE SET NULL + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`shipment_agreements` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_agreements` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `load_id` INT UNSIGNED NOT NULL, + `proposal_id` INT UNSIGNED NOT NULL, + `accepted_by` INT UNSIGNED 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`), + INDEX `fk_shipment_proposal_agreement_loads1_idx` (`load_id` ASC) VISIBLE, + INDEX `fk_shipment_proposal_agreement_shipment_proposals1_idx` (`proposal_id` ASC) VISIBLE, + INDEX `fk_shipment_proposal_agreement_user_roles1_idx` (`accepted_by` ASC) VISIBLE, + UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, + CONSTRAINT `fk_shipment_proposal_agreement_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_shipment_proposal_agreement_shipment_proposals1` + FOREIGN KEY (`proposal_id`) + REFERENCES `u947463964_etaviaporte`.`shipment_proposals` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_shipment_proposal_agreement_user_roles1` + FOREIGN KEY (`accepted_by`) + REFERENCES `u947463964_etaviaporte`.`user_roles` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`meta_sectors` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_sectors` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `sector` VARCHAR(100) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `sector_UNIQUE` (`sector` ASC) VISIBLE) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`meta_truck_types` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_truck_types` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `type` VARCHAR(100) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `meta_truck_typescol_UNIQUE` (`type` ASC) VISIBLE) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`meta_products` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_products` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `product` VARCHAR(100) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `product_UNIQUE` (`product` ASC) VISIBLE) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`meta_cities` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_cities` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `city` VARCHAR(100) NOT NULL, + `state` VARCHAR(100) NOT NULL, + `country` VARCHAR(100) NOT NULL, + `zipcode` VARCHAR(100) NULL, + PRIMARY KEY (`id`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_sectors` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_sectors` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `sector` VARCHAR(100) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `sector_UNIQUE` (`company_id` ASC, `sector` ASC) VISIBLE, + CONSTRAINT `fk_company_sectors_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_truck_types` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_truck_types` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `truck_type` VARCHAR(100) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `company_id_UNIQUE` (`company_id` ASC, `truck_type` ASC) VISIBLE, + CONSTRAINT `fk_company_truck_types_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`location_categories` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`location_categories` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `location_id` INT UNSIGNED NOT NULL, + `category_id` INT UNSIGNED NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `location_id_UNIQUE` (`location_id` ASC, `category_id` ASC) VISIBLE, + INDEX `fk_location_categories_company_sectors1_idx` (`category_id` ASC) VISIBLE, + CONSTRAINT `fk_location_categories_locations1` + FOREIGN KEY (`location_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_location_categories_company_sectors1` + FOREIGN KEY (`category_id`) + REFERENCES `u947463964_etaviaporte`.`company_sectors` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`truck_types` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`truck_types` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `vehicle_id` INT UNSIGNED NOT NULL, + `type_id` INT UNSIGNED NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `vehicle_id_UNIQUE` (`vehicle_id` ASC, `type_id` ASC) VISIBLE, + INDEX `fk_vehicle_types_company_truck_types1_idx` (`type_id` ASC) VISIBLE, + CONSTRAINT `fk_vehicle_types_vehicles1` + FOREIGN KEY (`vehicle_id`) + REFERENCES `u947463964_etaviaporte`.`vehicles` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_vehicle_types_company_truck_types1` + FOREIGN KEY (`type_id`) + REFERENCES `u947463964_etaviaporte`.`company_truck_types` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`user_locations` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_locations` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `location_id` INT UNSIGNED NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `location_id` ASC) VISIBLE, + INDEX `fk_user_locations_locations1_idx` (`location_id` ASC) VISIBLE, + CONSTRAINT `fk_user_locations_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_locations_locations1` + FOREIGN KEY (`location_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`load_templates` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_templates` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `created_by` INT UNSIGNED NOT NULL, + `name` VARCHAR(100) NOT NULL COMMENT 'User friendly name to identify the template', + `product` VARCHAR(100) NULL, + `sector` VARCHAR(100) NULL, + `truck_type` VARCHAR(100) NULL, + `weight` INT UNSIGNED NULL, + `notes` TEXT NULL, + `estimated_cost` INT UNSIGNED NULL, + `origin_id` INT UNSIGNED NULL, + `destination_id` INT UNSIGNED 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, `created_by` ASC, `name` ASC) VISIBLE, + INDEX `fk_load_templates_locations1_idx` (`origin_id` ASC) VISIBLE, + INDEX `fk_load_templates_locations2_idx` (`destination_id` ASC) VISIBLE, + INDEX `fk_load_templates_users1_idx` (`created_by` ASC) VISIBLE, + CONSTRAINT `fk_load_templates_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_load_templates_locations1` + FOREIGN KEY (`origin_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_load_templates_locations2` + FOREIGN KEY (`destination_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_load_templates_users1` + FOREIGN KEY (`created_by`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE NO ACTION + 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/Models/sql_generated/schema.sql b/db/Models/sql_generated/rbac.sql similarity index 99% rename from db/Models/sql_generated/schema.sql rename to db/Models/sql_generated/rbac.sql index 0957712..8c62e9a 100644 --- a/db/Models/sql_generated/schema.sql +++ b/db/Models/sql_generated/rbac.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Tue 31 Mar 2026 11:38:07 PM CST +-- Tue 31 Mar 2026 11:55:20 PM CST -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering diff --git a/db/Dockerfile b/db/container/Dockerfile similarity index 92% rename from db/Dockerfile rename to db/container/Dockerfile index cb642be..28d56c2 100644 --- a/db/Dockerfile +++ b/db/container/Dockerfile @@ -1,5 +1,5 @@ # Original author : https://github.com/yobasystems/alpine-mariadb.git -FROM alpine:latest +FROM alpine:3.23.3 ARG BUILD_DATE ARG VCS_REF diff --git a/db/README.md b/db/container/README.md similarity index 85% rename from db/README.md rename to db/container/README.md index 26ada2f..9a44e90 100644 --- a/db/README.md +++ b/db/container/README.md @@ -8,7 +8,9 @@ ## Build Docker image -docker buildx build -t eta/eta-db +```{.sh} +docker buildx build -t eta/eta-db . +``` ## Run Docker container diff --git a/db/scripts/migrate.sh b/db/container/scripts/migrate.sh similarity index 100% rename from db/scripts/migrate.sh rename to db/container/scripts/migrate.sh diff --git a/db/scripts/run.sh b/db/container/scripts/run.sh similarity index 87% rename from db/scripts/run.sh rename to db/container/scripts/run.sh index cc5b9e9..b55cdca 100644 --- a/db/scripts/run.sh +++ b/db/container/scripts/run.sh @@ -90,13 +90,6 @@ EOF # Saving plain password echo $MYSQL_ROOT_PASSWORD > /schemas/password.txt - - # # After 5 seconds (once mysql is up) create schema. - # $(sleep 5 && /usr/bin/mysql -uroot -p$MYSQL_ROOT_PASSWORD < /schemas/wincify.sql &&\ - # /usr/bin/mysql -uroot -p$MYSQL_ROOT_PASSWORD < /schemas/wincify_zones.sql &&\ - # /usr/bin/mysql -uroot -p$MYSQL_ROOT_PASSWORD < /schemas/wincify_categories.sql &&\ - # /usr/bin/mysql -uroot -p$MYSQL_ROOT_PASSWORD < /schemas/system.sql &&\ - # /usr/bin/mysql -uroot -p$MYSQL_ROOT_PASSWORD wincify_system < /schemas/wincifySystem_init.sql ) &\ fi # execute any pre-exec scripts