const data: PaymentResponse[] = await db
.select({
id: parent.id,
date: parent.date,
status: parent.status,
method: parent.method,
totalAmount: parent.totalAmount,
contacts: sql<SimpleContactResponse[]>`(
SELECT JSON_ARRAYAGG(JSON_OBJECT(
'id', c.id,
'name', c.name,
'lastName', c.last_name
))
FROM contact c
INNER JOIN invoice i ON c.id = i.contact_id
INNER JOIN payment_invoice pi ON i.id = pi.invoice_id
WHERE pi.payment_id = p.id
GROUP BY pi.payment_id
)`,
settlements: sql<{
id: number;
name: string;
}[]>`(
SELECT JSON_ARRAYAGG(JSON_OBJECT(
'id', s.id,
'name', s.name
))
FROM settlement s
INNER JOIN invoice i ON s.id = i.settlement_id
INNER JOIN payment_invoice pi ON i.id = pi.invoice_id
WHERE pi.payment_id = p.id
GROUP BY pi.payment_id
)`
})
.from(parent)
.where(condition)
.limit(dto.limit)
.offset(offset)
.orderBy(desc(parent.date), desc(parent.id));
const data: PaymentResponse[] = await db
.select({
id: parent.id,
date: parent.date,
status: parent.status,
method: parent.method,
totalAmount: parent.totalAmount,
contacts: sql<SimpleContactResponse[]>`(
SELECT JSON_ARRAYAGG(JSON_OBJECT(
'id', c.id,
'name', c.name,
'lastName', c.last_name
))
FROM contact c
INNER JOIN invoice i ON c.id = i.contact_id
INNER JOIN payment_invoice pi ON i.id = pi.invoice_id
WHERE pi.payment_id = p.id
GROUP BY pi.payment_id
)`,
settlements: sql<{
id: number;
name: string;
}[]>`(
SELECT JSON_ARRAYAGG(JSON_OBJECT(
'id', s.id,
'name', s.name
))
FROM settlement s
INNER JOIN invoice i ON s.id = i.settlement_id
INNER JOIN payment_invoice pi ON i.id = pi.invoice_id
WHERE pi.payment_id = p.id
GROUP BY pi.payment_id
)`
})
.from(parent)
.where(condition)
.limit(dto.limit)
.offset(offset)
.orderBy(desc(parent.date), desc(parent.id));