52 lines
1.1 KiB
TypeScript
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() },
|
|
});
|
|
}
|