mirror of
https://github.com/marcogll/telegram_new_socias.git
synced 2026-01-13 21:25:16 +00:00
feat: Implement multi-database architecture
This commit introduces a three-database architecture to the application, as specified in the `db_logic.md` file. The changes include: - A SQL initialization script (`db/init/init.sql`) to create the `USERS_ALMA`, `vanity_hr`, and `vanity_attendance` databases and their respective tables. - SQLAlchemy models for all tables, organized into separate files within the `models` directory. - Refactoring of the database connection logic in `modules/database.py` to support connections to all three databases. - Creation of a `modules/logger.py` to handle request logging to the `USERS_ALMA` database. - Updates to `docker-compose.yml` to mount the initialization script and build the bot image locally. - Updates to `.env.example` to include the new database environment variables. - Restoration of the data dictionary to `db_tasks.md`.
This commit is contained in:
136
db/init/init.sql
Normal file
136
db/init/init.sql
Normal file
@@ -0,0 +1,136 @@
|
||||
CREATE DATABASE IF NOT EXISTS USERS_ALMA;
|
||||
CREATE DATABASE IF NOT EXISTS vanity_hr;
|
||||
CREATE DATABASE IF NOT EXISTS vanity_attendance;
|
||||
|
||||
GRANT ALL PRIVILEGES ON USERS_ALMA.* TO 'user'@'%';
|
||||
GRANT ALL PRIVILEGES ON vanity_hr.* TO 'user'@'%';
|
||||
GRANT ALL PRIVILEGES ON vanity_attendance.* TO 'user'@'%';
|
||||
|
||||
USE USERS_ALMA;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(50) UNIQUE,
|
||||
role ENUM('admin', 'manager', 'user'),
|
||||
first_name VARCHAR(100),
|
||||
last_name VARCHAR(100),
|
||||
email VARCHAR(100) UNIQUE,
|
||||
cell_phone VARCHAR(20),
|
||||
telegram_id VARCHAR(50) UNIQUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS request_logs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
telegram_id VARCHAR(50),
|
||||
username VARCHAR(100),
|
||||
command VARCHAR(100),
|
||||
message VARCHAR(500),
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
USE vanity_hr;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS data_empleadas (
|
||||
numero_empleado VARCHAR(15) PRIMARY KEY,
|
||||
puesto VARCHAR(50),
|
||||
sucursal VARCHAR(50),
|
||||
fecha_ingreso DATE,
|
||||
estatus VARCHAR(15),
|
||||
nombre_completo VARCHAR(150),
|
||||
nombre VARCHAR(50),
|
||||
nombre_preferido VARCHAR(50),
|
||||
apellido_paterno VARCHAR(50),
|
||||
apellido_materno VARCHAR(50),
|
||||
fecha_nacimiento DATE,
|
||||
lugar_nacimiento VARCHAR(50),
|
||||
rfc VARCHAR(13) UNIQUE,
|
||||
curp VARCHAR(18) UNIQUE,
|
||||
email VARCHAR(100),
|
||||
telefono_celular VARCHAR(15),
|
||||
domicilio_calle VARCHAR(255),
|
||||
domicilio_numero_exterior VARCHAR(10),
|
||||
domicilio_numero_interior VARCHAR(10),
|
||||
domicilio_numero_texto VARCHAR(50),
|
||||
domicilio_colonia VARCHAR(255),
|
||||
domicilio_codigo_postal VARCHAR(10),
|
||||
domicilio_ciudad VARCHAR(100),
|
||||
domicilio_estado VARCHAR(50),
|
||||
domicilio_completo VARCHAR(255),
|
||||
emergencia_nombre VARCHAR(100),
|
||||
emergencia_telefono VARCHAR(15),
|
||||
emergencia_parentesco VARCHAR(50),
|
||||
referencia_1_nombre VARCHAR(100),
|
||||
referencia_1_telefono VARCHAR(15),
|
||||
referencia_1_tipo VARCHAR(20),
|
||||
referencia_2_nombre VARCHAR(100),
|
||||
referencia_2_telefono VARCHAR(15),
|
||||
referencia_2_tipo VARCHAR(20),
|
||||
referencia_3_nombre VARCHAR(100),
|
||||
referencia_3_telefono VARCHAR(15),
|
||||
referencia_3_tipo VARCHAR(20),
|
||||
origen_registro VARCHAR(50),
|
||||
telegram_usuario VARCHAR(50),
|
||||
telegram_chat_id BIGINT,
|
||||
bot_version VARCHAR(20),
|
||||
fecha_registro DATETIME,
|
||||
tiempo_registro_minutos INT,
|
||||
fecha_procesamiento DATETIME(3)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS vacaciones (
|
||||
vacaciones_id VARCHAR(50) PRIMARY KEY,
|
||||
numero_empleado VARCHAR(15),
|
||||
tipo_solicitud VARCHAR(20),
|
||||
estatus ENUM('pendiente', 'aprobado', 'rechazado', 'cancelado'),
|
||||
fecha_inicio DATE,
|
||||
fecha_fin DATE,
|
||||
dias_solicitados INT,
|
||||
dias_habiles INT,
|
||||
motivo TEXT,
|
||||
con_goce_sueldo TINYINT(1),
|
||||
fecha_solicitud DATETIME,
|
||||
fecha_procesamiento DATETIME(3),
|
||||
origen VARCHAR(20),
|
||||
afecta_nomina TINYINT(1),
|
||||
FOREIGN KEY (numero_empleado) REFERENCES data_empleadas(numero_empleado)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS permisos (
|
||||
permiso_id VARCHAR(50) PRIMARY KEY,
|
||||
numero_empleado VARCHAR(15),
|
||||
categoria ENUM('PERSONAL', 'MEDICO', 'OFICIAL', 'OTRO'),
|
||||
estatus ENUM('pendiente', 'aprobado', 'rechazado', 'cancelado'),
|
||||
fecha_inicio DATE,
|
||||
horario_especifico VARCHAR(50),
|
||||
motivo TEXT,
|
||||
con_goce_sueldo TINYINT(1),
|
||||
afecta_nomina TINYINT(1),
|
||||
FOREIGN KEY (numero_empleado) REFERENCES data_empleadas(numero_empleado)
|
||||
);
|
||||
|
||||
USE vanity_attendance;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS asistencia_registros (
|
||||
id_asistencia INT AUTO_INCREMENT PRIMARY KEY,
|
||||
numero_empleado VARCHAR(15),
|
||||
fecha DATE,
|
||||
hora_entrada_real TIME,
|
||||
hora_salida_real TIME,
|
||||
minutos_retraso INT,
|
||||
minutos_extra INT,
|
||||
sucursal_registro VARCHAR(50),
|
||||
telegram_id_usado BIGINT,
|
||||
FOREIGN KEY (numero_empleado) REFERENCES vanity_hr.data_empleadas(numero_empleado)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS horario_empleadas (
|
||||
id_horario INT AUTO_INCREMENT PRIMARY KEY,
|
||||
numero_empleado VARCHAR(15),
|
||||
telegram_id BIGINT,
|
||||
dia_semana VARCHAR(20),
|
||||
hora_entrada_teorica TIME,
|
||||
hora_salida_teorica TIME,
|
||||
FOREIGN KEY (numero_empleado) REFERENCES vanity_hr.data_empleadas(numero_empleado)
|
||||
);
|
||||
Reference in New Issue
Block a user