Fix the query

This commit is contained in:
Fang-Pen Lin
2025-11-07 09:19:32 -08:00
parent e7a5e13085
commit a07775664b
@@ -25,34 +25,29 @@ export const pkiAcmeChallengeDALFactory = (db: TDbClient) => {
if (updatedAuths.length > 0) { if (updatedAuths.length > 0) {
// Find all the orders that are involved in the challenge validation // Find all the orders that are involved in the challenge validation
const involvedOrderIds = await (tx || db)(TableName.PkiAcmeOrder) const involvedOrderIds = (tx || db)({ o: TableName.PkiAcmeOrder })
.distinct("id") .distinct("o.id")
.join(TableName.PkiAcmeOrderAuth, `${TableName.PkiAcmeOrder}.id`, `${TableName.PkiAcmeOrderAuth}.orderId`) .join({ oa: TableName.PkiAcmeOrderAuth }, "o.id", "oa.orderId")
.join(TableName.PkiAcmeAuth, `${TableName.PkiAcmeOrderAuth}.authId`, `${TableName.PkiAcmeAuth}.id`) .join({ a: TableName.PkiAcmeAuth }, "oa.authId", `a.id`)
.whereIn( .whereIn(
`${TableName.PkiAcmeAuth}.id`, "a.id",
updatedAuths.map((auth) => auth.id) updatedAuths.map((auth) => auth.id)
) );
.as("involvedOrderIds");
// Update status for pending orders that have all auths valid // Update status for pending orders that have all auths valid
await (tx || db)(TableName.PkiAcmeOrder) await (tx || db)(TableName.PkiAcmeOrder)
.whereIn("id", (qb) => { .whereIn("id", (qb) => {
qb.select("id") qb.select("o2.id")
.from(TableName.PkiAcmeOrder) .from({ o2: TableName.PkiAcmeOrder })
.join(TableName.PkiAcmeOrderAuth, `${TableName.PkiAcmeOrder}.id`, `${TableName.PkiAcmeOrderAuth}.orderId`) .join({ oa2: TableName.PkiAcmeOrderAuth }, "o2.id", "oa2.orderId")
.join(TableName.PkiAcmeAuth, `${TableName.PkiAcmeOrderAuth}.authId`, `${TableName.PkiAcmeAuth}.id`) .join({ a2: TableName.PkiAcmeAuth }, "oa2.authId", "a2.id")
.groupBy(`${TableName.PkiAcmeOrder}.id`) .groupBy("o2.id")
// All auths should be valid for the order to be ready // All auths should be valid for the order to be ready
.havingRaw( .havingRaw("SUM(CASE WHEN a2.status = ? THEN 1 ELSE 0 END) = COUNT(DISTINCT a2.id)", [
"SUM(CASE WHEN :authTable:.status = :authStatus THEN 1 ELSE 0 END) = COUNT(DISTINCT :authTable:.id)", AcmeAuthStatus.Valid
{ ])
authTable: TableName.PkiAcmeAuth,
authStatus: AcmeAuthStatus.Valid
}
)
// Only update orders that are pending // Only update orders that are pending
.where(`${TableName.PkiAcmeOrder}.status`, AcmeOrderStatus.Pending) .where("o2.status", AcmeOrderStatus.Pending)
.whereIn(`${TableName.PkiAcmeOrder}.id`, involvedOrderIds); .whereIn("o2.id", involvedOrderIds);
}) })
.update({ status: AcmeOrderStatus.Ready }); .update({ status: AcmeOrderStatus.Ready });
} }