diff --git a/apps/api/src/middlewares/tenant.middleware.ts b/apps/api/src/middlewares/tenant.middleware.ts index 67d08fd..d705032 100644 --- a/apps/api/src/middlewares/tenant.middleware.ts +++ b/apps/api/src/middlewares/tenant.middleware.ts @@ -6,7 +6,6 @@ declare global { namespace Express { interface Request { tenantPool?: Pool; - tenantSchema?: string; // @deprecated - use tenantPool instead viewingTenantId?: string; } } @@ -47,12 +46,7 @@ export async function tenantMiddleware(req: Request, res: Response, next: NextFu req.viewingTenantId = viewedTenant.id; } - // New pool-based approach req.tenantPool = tenantDb.getPool(tenantId, databaseName); - - // Backward compat: tenantSchema still used by controllers until Task 8 migration - req.tenantSchema = databaseName; - next(); } catch (error) { console.error('[TenantMiddleware] Error:', error); diff --git a/apps/api/src/utils/schema-manager.ts b/apps/api/src/utils/schema-manager.ts deleted file mode 100644 index 7fe6e4f..0000000 --- a/apps/api/src/utils/schema-manager.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { prisma } from '../config/database.js'; - -export async function createTenantSchema(schemaName: string): Promise { - await prisma.$executeRawUnsafe(`CREATE SCHEMA IF NOT EXISTS "${schemaName}"`); - - await prisma.$executeRawUnsafe(` - CREATE TABLE IF NOT EXISTS "${schemaName}"."cfdis" ( - id UUID PRIMARY KEY DEFAULT gen_random_uuid(), - uuid_fiscal VARCHAR(36) UNIQUE NOT NULL, - tipo VARCHAR(20) NOT NULL, - serie VARCHAR(25), - folio VARCHAR(40), - fecha_emision TIMESTAMP NOT NULL, - fecha_timbrado TIMESTAMP NOT NULL, - rfc_emisor VARCHAR(13) NOT NULL, - nombre_emisor VARCHAR(300) NOT NULL, - rfc_receptor VARCHAR(13) NOT NULL, - nombre_receptor VARCHAR(300) NOT NULL, - subtotal DECIMAL(18,2) NOT NULL, - descuento DECIMAL(18,2) DEFAULT 0, - iva DECIMAL(18,2) DEFAULT 0, - isr_retenido DECIMAL(18,2) DEFAULT 0, - iva_retenido DECIMAL(18,2) DEFAULT 0, - total DECIMAL(18,2) NOT NULL, - moneda VARCHAR(3) DEFAULT 'MXN', - tipo_cambio DECIMAL(10,4) DEFAULT 1, - metodo_pago VARCHAR(3), - forma_pago VARCHAR(2), - uso_cfdi VARCHAR(4), - estado VARCHAR(20) DEFAULT 'vigente', - xml_url TEXT, - pdf_url TEXT, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP - ) - `); - - await prisma.$executeRawUnsafe(` - CREATE TABLE IF NOT EXISTS "${schemaName}"."iva_mensual" ( - id SERIAL PRIMARY KEY, - año INTEGER NOT NULL, - mes INTEGER NOT NULL, - iva_trasladado DECIMAL(18,2) NOT NULL, - iva_acreditable DECIMAL(18,2) NOT NULL, - iva_retenido DECIMAL(18,2) DEFAULT 0, - resultado DECIMAL(18,2) NOT NULL, - acumulado DECIMAL(18,2) NOT NULL, - estado VARCHAR(20) DEFAULT 'pendiente', - fecha_declaracion TIMESTAMP, - UNIQUE(año, mes) - ) - `); - - await prisma.$executeRawUnsafe(` - CREATE TABLE IF NOT EXISTS "${schemaName}"."isr_mensual" ( - id SERIAL PRIMARY KEY, - año INTEGER NOT NULL, - mes INTEGER NOT NULL, - ingresos_acumulados DECIMAL(18,2) NOT NULL, - deducciones DECIMAL(18,2) NOT NULL, - base_gravable DECIMAL(18,2) NOT NULL, - isr_causado DECIMAL(18,2) NOT NULL, - isr_retenido DECIMAL(18,2) NOT NULL, - isr_a_pagar DECIMAL(18,2) NOT NULL, - estado VARCHAR(20) DEFAULT 'pendiente', - fecha_declaracion TIMESTAMP, - UNIQUE(año, mes) - ) - `); - - await prisma.$executeRawUnsafe(` - CREATE TABLE IF NOT EXISTS "${schemaName}"."alertas" ( - id SERIAL PRIMARY KEY, - tipo VARCHAR(50) NOT NULL, - titulo VARCHAR(200) NOT NULL, - mensaje TEXT NOT NULL, - prioridad VARCHAR(20) DEFAULT 'media', - fecha_vencimiento TIMESTAMP, - leida BOOLEAN DEFAULT FALSE, - resuelta BOOLEAN DEFAULT FALSE, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP - ) - `); - - await prisma.$executeRawUnsafe(` - CREATE TABLE IF NOT EXISTS "${schemaName}"."calendario_fiscal" ( - id SERIAL PRIMARY KEY, - titulo VARCHAR(200) NOT NULL, - descripcion TEXT, - tipo VARCHAR(50) NOT NULL, - fecha_limite TIMESTAMP NOT NULL, - recurrencia VARCHAR(20) DEFAULT 'unica', - completado BOOLEAN DEFAULT FALSE, - notas TEXT - ) - `); -} - -export async function setTenantSchema(schemaName: string): Promise { - await prisma.$executeRawUnsafe(`SET search_path TO "${schemaName}"`); -} - -export async function deleteTenantSchema(schemaName: string): Promise { - await prisma.$executeRawUnsafe(`DROP SCHEMA IF EXISTS "${schemaName}" CASCADE`); -}