52 lines
1.1 KiB
TypeScript

import { usePrisma } from "../utils/prisma";
/**
* Returns the active CooldownRequest for a user:
* not resolved, not cancelled, cooldownEndsAt in the future.
* (Expired but not yet resolved entries are also returned so the caller can resolve them.)
*/
export async function getActiveCooldown(userId: string) {
const db = usePrisma();
return db.cooldownRequest.findFirst({
where: {
userId,
resolvedAt: null,
cancelledAt: null,
},
orderBy: { cooldownStartedAt: "desc" },
});
}
export async function createCooldown(
userId: string,
jti: string,
cooldownEndsAt: Date,
reason?: string,
) {
const db = usePrisma();
return db.cooldownRequest.create({
data: {
userId,
reason: reason ?? null,
cooldownEndsAt,
tokenJti: jti,
},
});
}
export async function resolveCooldown(id: string) {
const db = usePrisma();
return db.cooldownRequest.update({
where: { id },
data: { resolvedAt: new Date() },
});
}
export async function cancelCooldown(id: string) {
const db = usePrisma();
return db.cooldownRequest.update({
where: { id },
data: { cancelledAt: new Date() },
});
}