Subir archivos a "/"

This commit is contained in:
2026-06-23 23:37:19 +00:00
parent 1e0dc30781
commit b261964ef9
+271
View File
@@ -0,0 +1,271 @@
CREATE DATABASE IF NOT EXISTS carpooling;
USE carpooling;
-- 1. Tabla principal de usuarios
CREATE TABLE Usuarios (
ID_usuario INT AUTO_INCREMENT PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Apellido VARCHAR(100) NOT NULL,
DNI VARCHAR(20) UNIQUE NOT NULL,
DniFrenteImagen MEDIUMTEXT NULL,
DniDorsoImagen MEDIUMTEXT NULL,
Correo VARCHAR(150) UNIQUE NOT NULL,
Telefono VARCHAR(20),
`Contraseña` VARCHAR(255) NOT NULL,
FotoPerfil MEDIUMTEXT NULL,
Descripcion TEXT NULL,
Preferencias TEXT NULL,
Saldo DECIMAL(10,2) DEFAULT 0.00,
TokenRecuperacion VARCHAR(255) NULL,
ExpiracionToken DATETIME NULL,
BaneadoHasta DATETIME NULL DEFAULT NULL,
FechaRegistro DATETIME DEFAULT CURRENT_TIMESTAMP,
Estado VARCHAR(50) DEFAULT 'Activo'
);
-- 2. Subtipos de usuarios
CREATE TABLE Pasajeros (
ID_pasajero INT AUTO_INCREMENT PRIMARY KEY,
ID_usuario INT NOT NULL,
FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE
);
CREATE TABLE Conductores (
ID_conductor INT AUTO_INCREMENT PRIMARY KEY,
LicenciaConducir VARCHAR(100) NOT NULL,
SeguroVehiculo VARCHAR(100) NOT NULL,
CuentaBancaria VARCHAR(100) NOT NULL,
Estado VARCHAR(50) DEFAULT 'Esperando',
FechaRegistro DATETIME DEFAULT CURRENT_TIMESTAMP,
BaneadoHasta DATETIME NULL DEFAULT NULL,
-- Datos de contacto y pago del conductor
TelefonoContacto VARCHAR(50) NULL,
AliasMP VARCHAR(100) NULL,
-- Fotos de identidad del conductor (almacenadas en Base64)
FotoCarnet MEDIUMTEXT NULL,
FotoCara MEDIUMTEXT NULL,
ID_usuario INT NOT NULL,
vehiculo_activo_id INT NULL,
FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE
);
CREATE TABLE Administradores (
ID_administrador INT AUTO_INCREMENT PRIMARY KEY,
ID_usuario INT NOT NULL,
FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE
);
-- 3. Entidades Adicionales
CREATE TABLE Vehiculos (
ID_vehiculo INT AUTO_INCREMENT PRIMARY KEY,
CantidadAsientos INT NOT NULL,
Color VARCHAR(50) NOT NULL,
Modelo VARCHAR(100) NOT NULL,
Marca VARCHAR(100) NOT NULL,
Patente VARCHAR(50) DEFAULT 'Sin Patente',
Estado VARCHAR(50) NOT NULL DEFAULT 'Pendiente',
FechaRegistro DATETIME DEFAULT CURRENT_TIMESTAMP,
-- Foto general (legacy/compatibilidad)
Foto MEDIUMTEXT,
-- Documentación del vehículo (almacenada en Base64)
PapelesAuto MEDIUMTEXT NULL,
-- Fotos 360° del vehículo (almacenadas en Base64)
FotoFrente MEDIUMTEXT NULL,
FotoCostado MEDIUMTEXT NULL,
FotoAtras MEDIUMTEXT NULL
);
-- Nota: La disponibilidad de asientos se calcula en tiempo de consulta como:
-- asientos_disponibles = Vehiculos.CantidadAsientos - COUNT(Reservas activas)
-- donde Reservas activas son las que tienen Estado NOT IN ('Cancelada', 'Rechazada')
CREATE TABLE Publicaciones (
ID_publicacion INT AUTO_INCREMENT PRIMARY KEY,
CiudadOrigen VARCHAR(100) NOT NULL,
CiudadDestino VARCHAR(100) NOT NULL,
-- Calle/dirección exacta de salida (visible para los pasajeros)
CalleSalida VARCHAR(200) NULL,
HoraSalida DATETIME NOT NULL,
Precio DECIMAL(10,2) NOT NULL,
Estado VARCHAR(50) NOT NULL DEFAULT 'Activa',
DistanciaKM INT NULL,
DuracionMinutos INT NULL,
ID_vehiculo INT NOT NULL,
FOREIGN KEY (ID_vehiculo) REFERENCES Vehiculos(ID_vehiculo)
);
CREATE TABLE Reservas (
ID_reserva INT AUTO_INCREMENT PRIMARY KEY,
Estado VARCHAR(50) NOT NULL DEFAULT 'Pendiente',
FechaReserva DATETIME DEFAULT CURRENT_TIMESTAMP,
CodigoAcceso VARCHAR(20) NULL,
TipoPasaje ENUM('propio','tercero') NOT NULL DEFAULT 'propio',
PasajeroNombre VARCHAR(100) NULL,
PasajeroApellido VARCHAR(100) NULL,
PasajeroDNI VARCHAR(20) NULL,
PasajeroTelefono VARCHAR(20) NULL,
PasajeroCorreo VARCHAR(150) NULL,
ID_usuario_responsable INT NULL,
ID_publicacion INT NOT NULL,
FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE
);
CREATE TABLE Pagos (
ID_pago INT AUTO_INCREMENT PRIMARY KEY,
Monto DECIMAL(10,2) NOT NULL,
Estado VARCHAR(50) NOT NULL DEFAULT 'Pendiente',
Fecha DATETIME DEFAULT CURRENT_TIMESTAMP,
ID_reserva INT NOT NULL,
FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE
);
CREATE TABLE RetirosAdmin (
ID_retiro INT AUTO_INCREMENT PRIMARY KEY,
Monto DECIMAL(10,2) NOT NULL,
Fecha DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE Calificaciones (
ID_calificacion INT AUTO_INCREMENT PRIMARY KEY,
Comentario TEXT,
Puntuacion INT CHECK(Puntuacion >= 1 AND Puntuacion <= 5),
ID_pasajero INT NOT NULL,
ID_conductor INT NOT NULL,
ID_reserva INT NOT NULL,
Fecha DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (ID_pasajero) REFERENCES Pasajeros(ID_pasajero) ON DELETE CASCADE,
FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE,
FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE
);
CREATE TABLE Reportes (
ID_reporte INT AUTO_INCREMENT PRIMARY KEY,
Hora TIME NOT NULL,
Fecha DATE NOT NULL,
Descripcion TEXT NOT NULL,
ID_conductor INT NOT NULL,
ID_publicacion INT NULL,
ID_usuario_reportante INT NULL,
FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE,
FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE SET NULL,
FOREIGN KEY (ID_usuario_reportante) REFERENCES Usuarios(ID_usuario) ON DELETE SET NULL
);
CREATE TABLE ReportesPasajeros (
ID_reporte_pasajero INT AUTO_INCREMENT PRIMARY KEY,
ID_reserva INT NOT NULL,
ID_usuario_reportado INT NOT NULL,
ID_usuario_responsable INT NULL,
ID_conductor INT NOT NULL,
Motivo VARCHAR(80) NOT NULL,
Descripcion TEXT NULL,
Estado VARCHAR(30) NOT NULL DEFAULT 'Pendiente',
Fecha DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE,
FOREIGN KEY (ID_usuario_reportado) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE,
FOREIGN KEY (ID_usuario_responsable) REFERENCES Usuarios(ID_usuario) ON DELETE SET NULL,
FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE
);
CREATE TABLE Notificaciones (
ID_notificacion INT AUTO_INCREMENT PRIMARY KEY,
ID_usuario INT NOT NULL,
Mensaje TEXT NOT NULL,
AccionURL VARCHAR(255) NULL,
AccionLabel VARCHAR(80) NULL,
AccionSecundariaURL VARCHAR(255) NULL,
AccionSecundariaLabel VARCHAR(80) NULL,
Leida BOOLEAN DEFAULT FALSE,
Fecha DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE
);
CREATE TABLE ConfirmacionesViaje (
ID_confirmacion INT AUTO_INCREMENT PRIMARY KEY,
ID_reserva INT NOT NULL UNIQUE,
ID_usuario INT NOT NULL,
ID_publicacion INT NOT NULL,
ConfirmoLlegada BOOLEAN NOT NULL DEFAULT TRUE,
FechaConfirmacion DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE,
FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE,
FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE
);
CREATE TABLE ConfirmacionesConductorViaje (
ID_confirmacion INT AUTO_INCREMENT PRIMARY KEY,
ID_publicacion INT NOT NULL UNIQUE,
ID_conductor INT NOT NULL,
Estado VARCHAR(30) NOT NULL DEFAULT 'Todo bien',
FechaConfirmacion DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE,
FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE
);
-- Tabla para tickets de soporte enviados por usuarios
CREATE TABLE Soporte (
ID_soporte INT AUTO_INCREMENT PRIMARY KEY,
ID_usuario INT NOT NULL,
Asunto VARCHAR(150) NOT NULL,
Mensaje TEXT NOT NULL,
Fecha DATETIME DEFAULT CURRENT_TIMESTAMP,
Estado VARCHAR(50) NOT NULL DEFAULT 'Pendiente',
FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE BusquedasViajes (
ID_busqueda INT AUTO_INCREMENT PRIMARY KEY,
ID_usuario INT NULL,
CiudadOrigen VARCHAR(100) NULL,
CiudadDestino VARCHAR(100) NULL,
Orden VARCHAR(50) NULL,
Resultados INT NOT NULL DEFAULT 0,
IP VARCHAR(45) NULL,
UserAgent VARCHAR(255) NULL,
Fecha DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 4. Tablas Intermedias (Relaciones N:M)
CREATE TABLE ConductorVehiculo (
ID_conductor INT,
ID_vehiculo INT,
PRIMARY KEY (ID_conductor, ID_vehiculo),
FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE,
FOREIGN KEY (ID_vehiculo) REFERENCES Vehiculos(ID_vehiculo) ON DELETE CASCADE
);
CREATE TABLE ConductorPublicacion (
ID_conductor INT,
ID_publicacion INT,
PRIMARY KEY (ID_conductor, ID_publicacion),
FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE,
FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE
);
CREATE TABLE PasajerosReservas (
ID_pasajero INT,
ID_reserva INT,
PRIMARY KEY (ID_pasajero, ID_reserva),
FOREIGN KEY (ID_pasajero) REFERENCES Pasajeros(ID_pasajero) ON DELETE CASCADE,
FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE
);
CREATE TABLE AdministradorUsuario (
ID_administrador INT,
ID_usuario INT,
PRIMARY KEY (ID_administrador, ID_usuario),
FOREIGN KEY (ID_administrador) REFERENCES Administradores(ID_administrador) ON DELETE CASCADE,
FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE
);
CREATE TABLE AdministradorPublicacion (
ID_administrador INT,
ID_publicacion INT,
PRIMARY KEY (ID_administrador, ID_publicacion),
FOREIGN KEY (ID_administrador) REFERENCES Administradores(ID_administrador) ON DELETE CASCADE,
FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE
);
ALTER TABLE Conductores
ADD CONSTRAINT fk_conductores_vehiculo_activo
FOREIGN KEY (vehiculo_activo_id) REFERENCES Vehiculos(ID_vehiculo) ON DELETE SET NULL;