Tengo un método para crear una fila en una base de datos que se creó con éxito, pero el problema es devolver el valor. Necesito unirme a otra tabla de forma dinámica usando slonik.
Aviso: la unión normal causa algunos problemas ya que tengo una columna en ambas tablas con el mismo nombre
aquí hay una muestra de mi código
function createTicketAgent(connection: DatabaseTransactionConnectionType) { return async (options: CreateTicketAgentOptions) => { const id = (await connection.oneFirst( sql`SELECT nextval('ticket_agent_sequence')` )) as number; const converted = convertTicketAgentDataIn( { ...options.data, id }, options.adminId ); const data = dataToInsertSql(converted); const selection = ticketAgentSelectionSql(options.selection); const query = sql` INSERT INTO ticket_agent ${data} RETURNING ${selection} `; const result = await connection.maybeOne(query); return convertTicketAgentDataOut(result); }; } export function dataToInsertSql<T extends object>(data: T): SqlSqlTokenType { var firstItem = Array.isArray(data) ? data[0] : data; const entries = Object.entries(firstItem).sort(); const columns = entries.map(([key, value]) => key); const values = entries.map(([key, value]) => value); return sql`(${listToIdentifiersSql(columns)}) VALUES (${listToValuesSql( values )})`; } export function listToIdentifiersSql(values: string[]) { const columns = values.map((column) => sql.identifier(column.split("."))); return sql`${sql.join(columns, sql`, `)}`; } const ticketAgentSelectionSql = (selection: string[] | undefined) => selectionToSql(mapSelection(reverseMapping(mapping), selection)); export function selectionToSql<S extends SelectionSet<any>>(selection?: S) { if (selection === undefined || selection.length === 0) { return sql`*`; } const identifiers = selection.map((column) => sql.identifier(column.split(".")) ); const selectList = sql.join(identifiers, sql`, `); return sql`${selectList}`; } export function listToValuesSql(values: any[], unique: boolean = false) { let converted = values.map((value) => Array.isArray(value) ? `{${value}}` : value instanceof DateTime ? value.toSQL() : value ); if (unique) { const uniqueSet = new Set<any>(); converted.forEach((value) => { uniqueSet.add(value); }); return sql`${sql.join([...uniqueSet], sql`, `)}`; } else { return sql`${sql.join(converted, sql`, `)}`; } }