sendou.ink/app/features/sendouq/core/groups.ts

56 lines
1.2 KiB
TypeScript

import { databaseTimestampToDate } from "~/utils/dates";
import type { GroupExpiryStatus } from "../q-types";
import type { SQGroup } from "./SendouQ.server";
// logic is that team who is bigger decides the settings
// but if groups are the same size then the one who liked
// is basically consenting that other team's setting are used
export function groupAfterMorph({
ourGroup,
theirGroup,
liker,
}: {
ourGroup: SQGroup;
theirGroup: SQGroup;
liker: "US" | "THEM";
}) {
const ourMembers = ourGroup.members ?? [];
const theirMembers = theirGroup.members ?? [];
if (ourMembers.length > theirMembers.length) {
return ourGroup;
}
if (theirMembers.length > ourMembers.length) {
return theirGroup;
}
if (liker === "US") {
return theirGroup;
}
return ourGroup;
}
export function groupExpiryStatus(
latestActionAt: number,
): GroupExpiryStatus | null {
// group expires in 30min without actions performed
const groupExpiresAt =
databaseTimestampToDate(latestActionAt).getTime() + 30 * 60 * 1000;
const now = Date.now();
if (now > groupExpiresAt) {
return "EXPIRED";
}
const tenMinutesFromNow = now + 10 * 60 * 1000;
if (tenMinutesFromNow > groupExpiresAt) {
return "EXPIRING_SOON";
}
return null;
}