diff --git a/app/routes/et-members.tsx b/app/routes/et-members.tsx index c4dd06e..a161f7e 100644 --- a/app/routes/et-members.tsx +++ b/app/routes/et-members.tsx @@ -55,7 +55,34 @@ export async function loader({ context }: { context: RequestContext }) { status: 500, }); - return { can_manage: true, members: etData.results } as { + const now = new Date(); + const members = etData.results as { [k: string]: any }[]; + const currentMonthEvents = await context.env.D1.prepare( + "SELECT answered_at, created_by, performed_at, reached_minimum_player_count, type FROM events WHERE year = ? AND month = ?;", + ) + .bind(now.getUTCFullYear(), now.getUTCMonth() + 1) + .all(); + + if (!currentMonthEvents.error) { + for (const event of currentMonthEvents.results as { [k: string]: any }[]) { + const memberIdx = members.findIndex((m) => m.id === event.created_by); + + if (memberIdx === -1) continue; + + if (event.performed_at) members[memberIdx].points += 10; + if (event.type === "gamenight" && event.reached_minimum_player_count) + members[memberIdx].points += 10; + if ( + event.type === "rotw" && + event.answered_at - event.performed_at >= 86400000 + ) + members[memberIdx].points += 10; + if (!event.performed_at && event.day < now.getUTCDate()) + members[memberIdx].points -= 5; + } + } + + return { can_manage: true, members } as { can_manage: boolean; members: { [k: string]: any }[]; };