import { PoolClient } from "pg"; import { CreateObjeniousLineDTO } from "sim-shared/domain/objeniousLine.js"; import { PgClient } from "sim-shared/infrastructure/PgClient.js"; export class ObjeniousLinesRepository { constructor( private pgClient: PgClient ) { } public async insertOrUpdate(data: CreateObjeniousLineDTO) { const query = ` INSERT INTO objenious_lines ( simId, iccid, msisdn, imei, imeiChangeDate, offerCode, status, preactivationDate, activationDate, commercialStatus, commercialStatusDate, billingStatus, billingStatusChangeDate, billingActivationDate, createDate, raw ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16 ) ON CONFLICT (simId) DO UPDATE SET iccid = EXCLUDED.iccid, msisdn = EXCLUDED.msisdn, imei = EXCLUDED.imei, imeiChangeDate = EXCLUDED.imeiChangeDate, offerCode = EXCLUDED.offerCode, status = EXCLUDED.status, preactivationDate = EXCLUDED.preactivationDate, activationDate = EXCLUDED.activationDate, commercialStatus = EXCLUDED.commercialStatus, commercialStatusDate = EXCLUDED.commercialStatusDate, billingStatus = EXCLUDED.billingStatus, billingStatusChangeDate = EXCLUDED.billingStatusChangeDate, billingActivationDate = EXCLUDED.billingActivationDate, raw = EXCLUDED.raw RETURNING id; `; const values = [ data.simId, data.iccid, data.msisdn, data.imei, data.imeiChangeDate, data.offerCode, data.status, data.preactivationDate, data.activationDate, data.commercialStatus, data.commercialStatusDate, data.billingStatus, data.billingStatusChangeDate, data.billingActivationDate, data.createDate || new Date(), // Default a ahora si no viene JSON.stringify(data.raw) // El driver de pg requiere string o el objeto directo para JSONB ]; let client: PoolClient | undefined = undefined; try { client = await this.pgClient.connect(); const res = await client.query(query, values); return res.rows[0].id; } catch (err) { console.error('Error en la inserción:', err); throw err; } finally { if (client != undefined) { client.release() } } } }