-- ============================================================
-- SCHEMA BASEADO NA MODELAGEM DE database/modelagem.mwb
-- ============================================================
-- A modelagem do Workbench define as tabelas base do hub:
--   - contas
--   - dados_colaborador
--   - dados_colaborador_liberacao
--
-- Mantemos tambem a tabela registros_ponto porque ela e necessaria
-- para as rotas operacionais do App Ponto e nao apareceu na modelagem.
-- ============================================================

SET NAMES utf8mb4;

DROP TABLE IF EXISTS registros_ponto;
DROP TABLE IF EXISTS dados_colaborador_liberacao;
DROP TABLE IF EXISTS dados_colaborador;
DROP TABLE IF EXISTS contas;
DROP TABLE IF EXISTS solicitacoes_acesso;
DROP TABLE IF EXISTS colaboradores;
DROP TABLE IF EXISTS empresas;

CREATE TABLE contas (
    pk                           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    dt_cadastro                  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    usuario_cadastro_pk          INT UNSIGNED NOT NULL DEFAULT 0,
    dt_utl_atualizacacao         DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    usuario_ult_atualizacao_pk   INT UNSIGNED NOT NULL DEFAULT 0,
    ds_lead                      VARCHAR(45) NOT NULL DEFAULT '',
    da_razao_social              VARCHAR(45) NOT NULL,
    ds_cnpj                      VARCHAR(45) NOT NULL,
    ds_link_cliente              VARCHAR(45) NOT NULL DEFAULT '',
    ic_status                    INT NOT NULL DEFAULT 1,
    UNIQUE KEY uq_contas_cnpj (ds_cnpj),
    KEY idx_contas_status (ic_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE dados_colaborador (
    pk                             INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    dt_cadastro                    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    usuario_cadasdro_pk            INT UNSIGNED NOT NULL DEFAULT 0,
    dt_ult_atualizacacao           DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    usuario_ult_atualizacaco_pk    INT UNSIGNED NOT NULL DEFAULT 0,
    ds_colaborador                 VARCHAR(80) NOT NULL,
    ds_cpf                         VARCHAR(45) NOT NULL,
    ds_rg                          VARCHAR(45) NULL,
    ds_cel                         VARCHAR(45) NULL,
    dt_nascimento                  DATE NULL,
    dt_adminissao                  DATE NULL,
    ds_cnpj                        VARCHAR(45) NOT NULL,
    ic_status                      INT NOT NULL DEFAULT 1,
    UNIQUE KEY uq_colaborador_cpf_cnpj (ds_cpf, ds_cnpj),
    KEY idx_colaborador_cpf (ds_cpf),
    KEY idx_colaborador_cnpj (ds_cnpj),
    KEY idx_colaborador_status (ic_status),
    CONSTRAINT fk_dados_colaborador_contas
        FOREIGN KEY (ds_cnpj) REFERENCES contas(ds_cnpj)
        ON UPDATE CASCADE
        ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE dados_colaborador_liberacao (
    pk               INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    dt_cadastro      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    ds_cpf           VARCHAR(45) NOT NULL,
    ds_cnpj          VARCHAR(45) NOT NULL,
    ds_img           LONGBLOB NOT NULL,
    dt_liberacao     DATETIME NULL DEFAULT NULL,
    ic_status        INT NULL DEFAULT NULL,
    KEY idx_liberacao_cpf_cnpj (ds_cpf, ds_cnpj),
    KEY idx_liberacao_status (ic_status),
    CONSTRAINT fk_liberacao_contas FOREIGN KEY (ds_cnpj)
        REFERENCES contas(ds_cnpj)
        ON UPDATE CASCADE
        ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE registros_ponto (
    registro_pk      BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    contas_pk        INT UNSIGNED NOT NULL,
    colaborador_pk   INT UNSIGNED NOT NULL,
    dt_registro      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    foto_base64      LONGTEXT NULL,
    dt_criado        DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_registro_colaborador_periodo (colaborador_pk, dt_registro),
    KEY idx_registro_contas (contas_pk),
    CONSTRAINT fk_registros_ponto_contas
        FOREIGN KEY (contas_pk) REFERENCES contas(pk)
        ON UPDATE CASCADE
        ON DELETE RESTRICT,
    CONSTRAINT fk_registros_ponto_colaborador
        FOREIGN KEY (colaborador_pk) REFERENCES dados_colaborador(pk)
        ON UPDATE CASCADE
        ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
