From f37f781d4e036c9ab41ef3185f26a7179a545895 Mon Sep 17 00:00:00 2001 From: Lucid Date: Wed, 10 Dec 2025 19:05:34 -0500 Subject: [PATCH] Added failsafe in increment function that will create a new DailyStat document if the latest one is not the current day. Added a check in the cron function to check that it won't create a new document if the latest DailyStat is for the current date. --- src/graphql/resolvers.ts | 78 +++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 16 deletions(-) diff --git a/src/graphql/resolvers.ts b/src/graphql/resolvers.ts index 249e8dc..091cc05 100644 --- a/src/graphql/resolvers.ts +++ b/src/graphql/resolvers.ts @@ -4,6 +4,21 @@ import { BigIntResolver } from "graphql-scalars"; const envMutationKey = process.env.MUTATION_KEY || ""; const env = process.env.NODE_ENV || "development"; +const isDailyStatToday = (date: string): boolean => { + const today = new Date().setHours(0, 0, 0, 0); + const dailyStatCreated = new Date(date).setHours(0, 0, 0, 0); + + return today == dailyStatCreated; +}; + +const getLatestDailyStat = async () => { + return await prisma.dailyStats.findFirst({ + orderBy: { + createdAt: "desc" + } + }); +}; + // Prisma export const resolvers = { // scalars @@ -39,7 +54,19 @@ export const resolvers = { orderBy: { createdAt: "asc" } - }) + }), + getGroupStats: async ( + _parent: unknown, + data: { groupID: number } + // _ctx: unknown + ) => { + const { groupID } = data; + return await prisma.groups.findUnique({ + where: { + telegramID: groupID + } + }); + } }, Mutation: { init: async ( @@ -89,6 +116,15 @@ export const resolvers = { return null; } } + + const latestDailyStats = await getLatestDailyStat(); + + if (latestDailyStats !== null) { + if (isDailyStatToday(String(latestDailyStats.createdAt))) { + return null; + } + } + const date = new Date().toISOString(); await prisma.dailyStats.create({ data: { createdAt: date } }); @@ -151,7 +187,7 @@ export const resolvers = { } } - const existingGroup = await prisma.groups.findFirst({ + const existingGroup = await prisma.groups.findUnique({ where: { telegramID: groupID } }); @@ -222,22 +258,32 @@ export const resolvers = { } } - return await prisma.dailyStats - .findFirst({ - orderBy: { - createdAt: "desc" + let latestDailyStats = await getLatestDailyStat(); + + if (latestDailyStats !== null) { + if (!isDailyStatToday(String(latestDailyStats.createdAt))) { + const date = new Date().toISOString(); + + await prisma.dailyStats + .create({ data: { createdAt: date } }) + .then(async () => { + latestDailyStats = await prisma.dailyStats.findFirst({ + orderBy: { + createdAt: "desc" + } + }); + }); + } + + return await prisma.dailyStats.update({ + where: { createdAt: latestDailyStats.createdAt }, + data: { + linksDeleted: { increment: link ? 1 : 0 }, + commandResponses: { increment: command ? 1 : 0 }, + timesTriggered: { increment: trigger ? 1 : 0 } } - }) - .then(async (todayStat) => { - return await prisma.dailyStats.update({ - where: { createdAt: todayStat?.createdAt }, - data: { - linksDeleted: { increment: link ? 1 : 0 }, - commandResponses: { increment: command ? 1 : 0 }, - timesTriggered: { increment: trigger ? 1 : 0 } - } - }); }); + } } } };