Compare commits
9 Commits
main
..
ada7140124
| Author | SHA1 | Date | |
|---|---|---|---|
| ada7140124 | |||
| 4d6a23fbf1 | |||
| 8bda185848 | |||
| f035c2e746 | |||
| 1edc0fec18 | |||
| add1ae525a | |||
| 9557833df6 | |||
| 8ae9946ef9 | |||
| e0974d1468 |
@@ -1,19 +0,0 @@
|
|||||||
name: Daily Cron (Make New DailyStats Document)
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 4 * * *"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
cron:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- name: Install curl
|
|
||||||
run: apk add --no-cache curl
|
|
||||||
|
|
||||||
- name: Daily cron job | Create new dailyStats document.
|
|
||||||
run: |
|
|
||||||
curl --request POST \
|
|
||||||
--url 'https://bot-stats.werewolfkid.monster/api/graphql' \
|
|
||||||
--header 'x-api-key: ${{ secrets.NEXT_PUBLIC_API_TOKEN }}' \
|
|
||||||
--header 'Content-Type: application/json' \
|
|
||||||
--data '{ "query": "mutation Cron { cronJob ( mutationKey: \"${{ secrets.GRAPHQL_MUTATION_KEY }}\" ) { commandResponses createdAt linksDeleted timesTriggered updatedAt } }" }' \
|
|
||||||
+1
-1
@@ -40,4 +40,4 @@ yarn-error.log*
|
|||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
next-env.d.ts
|
next-env.d.ts
|
||||||
|
|
||||||
/src/prisma/generated
|
/generated/prisma
|
||||||
|
|||||||
@@ -1,6 +1 @@
|
|||||||
approvedGitRepositories:
|
|
||||||
- "**"
|
|
||||||
|
|
||||||
enableScripts: true
|
|
||||||
|
|
||||||
nodeLinker: node-modules
|
nodeLinker: node-modules
|
||||||
|
|||||||
+28
-29
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "no-twitter-bot-stats",
|
"name": "no-twitter-bot-stats",
|
||||||
"version": "0.1.2",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
@@ -12,48 +12,47 @@
|
|||||||
"prisma-update": "yarn prisma db push"
|
"prisma-update": "yarn prisma db push"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chakra-ui/charts": "^3.35.0",
|
"@chakra-ui/charts": "^3.30.0",
|
||||||
"@chakra-ui/react": "^3.35.0",
|
"@chakra-ui/react": "^3.30.0",
|
||||||
"@emotion/react": "^11.14.0",
|
"@emotion/react": "^11.14.0",
|
||||||
"@escape.tech/graphql-armor": "^3.2.0",
|
"@escape.tech/graphql-armor": "^3.1.7",
|
||||||
"@prisma/client": "^6.19.3",
|
"@prisma/client": "^6.19.0",
|
||||||
"@prisma/extension-accelerate": "^3.0.1",
|
"@prisma/extension-accelerate": "^2.0.2",
|
||||||
"@urql/next": "^2.0.0",
|
"@urql/next": "^2.0.0",
|
||||||
"dotenv": "^17.4.2",
|
"dotenv": "^17.2.3",
|
||||||
"graphql": "^16.13.2",
|
"graphql": "^16.12.0",
|
||||||
"graphql-scalars": "^1.25.0",
|
"graphql-scalars": "^1.25.0",
|
||||||
"graphql-yoga": "^5.21.0",
|
"graphql-yoga": "^5.17.1",
|
||||||
"next": "16.2.4",
|
"next": "16.0.7",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"react": "19.2.5",
|
"react": "19.2.1",
|
||||||
"react-dom": "19.2.5",
|
"react-dom": "19.2.1",
|
||||||
"react-icons": "^5.6.0",
|
"react-icons": "^5.5.0",
|
||||||
"recharts": "^3.8.1",
|
"recharts": "^3.5.1",
|
||||||
"rxjs": "^7.8.2",
|
"rxjs": "^7.8.2",
|
||||||
"urql": "^5.0.2"
|
"urql": "^5.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/eslintrc": "^3.3.5",
|
"@eslint/eslintrc": "^3.3.3",
|
||||||
"@eslint/js": "^10.0.1",
|
"@eslint/js": "^9.39.1",
|
||||||
"@iconify/react": "^6.0.2",
|
"@iconify/react": "^6.0.2",
|
||||||
"@types/node": "^25.6.0",
|
"@types/node": "^24.10.1",
|
||||||
"@types/react": "^19.2.14",
|
"@types/react": "^19.2.7",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.59.1",
|
"@typescript-eslint/eslint-plugin": "^8.48.1",
|
||||||
"@typescript-eslint/parser": "^8.59.1",
|
"@typescript-eslint/parser": "^8.48.1",
|
||||||
"baseline-browser-mapping": "^2.10.25",
|
"eslint": "^9.39.1",
|
||||||
"eslint": "^9.39.4",
|
"eslint-config-next": "16.0.7",
|
||||||
"eslint-config-next": "16.2.4",
|
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||||
"eslint-plugin-prettier": "^5.5.5",
|
"eslint-plugin-prettier": "^5.5.4",
|
||||||
"eslint-plugin-react": "^7.37.5",
|
"eslint-plugin-react": "^7.37.5",
|
||||||
"eslint-plugin-react-hooks": "^7.0.1",
|
"eslint-plugin-react-hooks": "^7.0.1",
|
||||||
"prettier": "3.8.3",
|
"prettier": "3.7.4",
|
||||||
"prisma": "^6.19.3",
|
"prisma": "^6.19.0",
|
||||||
"tsx": "^4.21.0",
|
"tsx": "^4.21.0",
|
||||||
"typescript": "^5.9.3",
|
"typescript": "^5.9.3",
|
||||||
"typescript-eslint": "^8.59.1"
|
"typescript-eslint": "^8.48.1"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@4.14.1"
|
"packageManager": "yarn@4.11.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
<svg
|
|
||||||
id="svg2"
|
|
||||||
version="1.1"
|
|
||||||
width="409.96661"
|
|
||||||
height="409.98404"
|
|
||||||
viewBox="0 0 409.96661 409.98404"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="m 198.43447,409.88349 c -16.87402,-0.52429 -33.96148,-3.20112 -50.15064,-7.85635 -16.89988,-4.85959 -33.4194,-12.04085 -48.45,-21.06187 C 89.057412,374.49751 79.188152,367.3017 69.836023,359.09346 63.443873,353.48316 56.486693,346.52267 50.841584,340.09001 23.882655,309.37001 6.733496,271.34323 1.6401223,230.99002 -3.0267695,194.01569 2.3071672,156.75191 17.114155,122.88582 c 2.83776,-6.49044 6.63732,-14.00102 10.21694,-20.1958 C 42.991144,75.589277 64.616853,52.405411 90.533832,34.933461 108.33243,22.934523 127.85299,13.821763 148.38383,7.9274153 c 26.15516,-7.50907673 53.79077,-9.7183097 81.05,-6.4792629 50.21751,5.9670387 96.51852,30.4672236 130.00448,68.7918786 26.75943,30.626139 43.81786,68.571209 48.88922,108.749989 4.86563,38.54882 -1.15232,77.44493 -17.37657,112.31081 -8.98481,19.30835 -20.76424,36.8569 -35.46819,52.83918 -2.44277,2.65514 -8.7281,8.94409 -11.35114,11.35768 -14.70283,13.5288 -30.43046,24.37645 -48.03196,33.12859 -4.05332,2.01546 -5.5776,2.72668 -9.56585,4.46335 -27.56473,12.00295 -57.65906,17.73965 -88.09935,16.79386 z m 13.44936,-34.9928 c 25.01212,-1.07439 48.36413,-7.17806 70.34385,-18.38623 19.2632,-9.82294 36.50092,-23.26822 50.87783,-39.6843 7.86352,-8.97886 15.0508,-19.24676 20.93747,-29.91169 1.47754,-2.67687 4.04205,-7.75113 5.39976,-10.6842 8.41325,-18.17525 13.5806,-38.08598 15.08733,-58.13425 0.35814,-4.76539 0.40375,-6.24526 0.40375,-13.1 0,-7.80507 -0.13553,-10.87819 -0.75413,-17.1 -3.3773,-33.96857 -16.9036,-65.97946 -39.00164,-92.299992 -4.83753,-5.76189 -10.83367,-11.955826 -16.62603,-17.174494 -16.89903,-15.22529 -37.39974,-27.226947 -58.91819,-34.492262 -15.49468,-5.231496 -31.10132,-8.118781 -47.75,-8.833924 -2.89874,-0.124515 -10.90126,-0.124515 -13.8,0 -16.64507,0.714988 -32.25869,3.603565 -47.75,8.833924 -22.42114,7.57009 -43.37752,20.065402 -60.949998,36.341643 -2.01749,1.868667 -6.68465,6.525563 -8.64412,8.625113 -18.522729,19.846862 -31.943938,43.538062 -39.299728,69.372092 -3.13635,11.01509 -5.12484,22.15786 -6.00108,33.6279 -0.35666,4.6688 -0.40507,6.2343 -0.40507,13.1 0,6.8657 0.04841,8.4312 0.40507,13.1 1.22839,16.0797 4.67357,31.67931 10.32477,46.75 5.59407,14.91838 13.591089,29.46979 23.231919,42.27293 12.532319,16.64308 28.020458,30.89004 45.549847,41.8996 16.73723,10.51204 34.82788,17.91208 54.08839,22.12504 9.16278,2.00422 19.45487,3.32848 29.1,3.74422 2.65778,0.11456 11.5597,0.12015 14.15,0.009 z m -37.2,-46.83768 v -30.8126 l 9.28842,9.28802 9.28842,9.28802 76.72486,-76.72488 76.72486,-76.72488 12.28672,12.28673 12.28673,12.28673 -76.64997,76.64993 c -42.15747,42.15746 -76.64998,76.71734 -76.65,76.79973 -2e-5,0.0824 4.12343,4.27345 9.16323,9.31347 l 9.16327,9.16368 -30.81327,-0.001 -30.81327,-10e-4 v -30.81259 z m -61.7,-31.04633 c -0.0664,-0.0221 -0.1,-10.37788 -0.1,-30.79993 v -30.7666 l 9.2544,9.2544 9.2544,9.2544 76.72511,-76.72511 76.7251,-76.72511 12.29318,12.29349 12.29318,12.29349 -76.64567,76.64613 c -42.15513,42.15537 -76.66344,76.6994 -76.68514,76.7645 -0.0217,0.0651 4.0948,4.25282 9.14779,9.30603 5.05298,5.0532 9.16483,9.1914 9.13745,9.19599 -0.1628,0.0273 -61.31804,0.0356 -61.3998,0.008 z M 51.026084,235.09894 c -0.02324,-0.0232 -0.04225,-13.88347 -0.04225,-30.80052 v -30.75827 l 9.266339,9.26634 9.26633,9.26634 76.638487,-76.63848 c 42.15116,-42.151155 76.68658,-76.668199 76.74537,-76.704532 0.06,-0.03707 5.49452,5.321436 12.38275,12.209497 l 12.27587,12.275559 -76.68758,76.687446 c -42.17816,42.1781 -76.687569,76.72116 -76.687569,76.76237 0,0.0412 4.140059,4.21517 9.200129,9.27546 l 9.20013,9.20054 H 81.826212 c -16.916829,0 -30.776888,-0.0188 -30.800128,-0.042 z"
|
|
||||||
id="path3338"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 3.7 KiB |
@@ -1,57 +0,0 @@
|
|||||||
import { JSX } from "react";
|
|
||||||
import { Checkmark, Heading, Table, VStack } from "@chakra-ui/react";
|
|
||||||
import botCommands from "@/data/botCommands";
|
|
||||||
|
|
||||||
const CommandsListTable = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<VStack gap={6} w={{ base: "90%", md: "100%" }}>
|
|
||||||
<Heading as="h3" fontSize="3xl">
|
|
||||||
{"Bot Commands"}
|
|
||||||
</Heading>
|
|
||||||
<Table.Root maxW="fit-content" interactive showColumnBorder>
|
|
||||||
<Table.Caption>
|
|
||||||
{"The bot will only respond to admins and moderators within groups."}
|
|
||||||
</Table.Caption>
|
|
||||||
<Table.Header>
|
|
||||||
<Table.Row bg="cyan.emphasized">
|
|
||||||
<Table.ColumnHeader> {"Command"}</Table.ColumnHeader>
|
|
||||||
<Table.ColumnHeader> {"Description"}</Table.ColumnHeader>
|
|
||||||
<Table.ColumnHeader> {"Private"}</Table.ColumnHeader>
|
|
||||||
<Table.ColumnHeader> {"Group"}</Table.ColumnHeader>
|
|
||||||
</Table.Row>
|
|
||||||
</Table.Header>
|
|
||||||
<Table.Body>
|
|
||||||
{botCommands.map((commandObj, index) => {
|
|
||||||
const { command, description, groups } = commandObj;
|
|
||||||
return (
|
|
||||||
<Table.Row
|
|
||||||
key={`${index}-${command}`}
|
|
||||||
bg="cyan.muted"
|
|
||||||
_hover={{ bg: "purple.emphasized" }}
|
|
||||||
>
|
|
||||||
<Table.Cell>{command}</Table.Cell>
|
|
||||||
<Table.Cell>{description.replaceAll("\\", "")}</Table.Cell>
|
|
||||||
<Table.Cell>
|
|
||||||
{groups ? (
|
|
||||||
<Checkmark colorPalette="purple" checked />
|
|
||||||
) : (
|
|
||||||
<Checkmark colorPalette="purple" indeterminate />
|
|
||||||
)}
|
|
||||||
</Table.Cell>
|
|
||||||
<Table.Cell>
|
|
||||||
{commandObj.private ? (
|
|
||||||
<Checkmark colorPalette="purple" checked />
|
|
||||||
) : (
|
|
||||||
<Checkmark colorPalette="purple" indeterminate />
|
|
||||||
)}
|
|
||||||
</Table.Cell>
|
|
||||||
</Table.Row>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</Table.Body>
|
|
||||||
</Table.Root>
|
|
||||||
</VStack>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default CommandsListTable;
|
|
||||||
+5
-11
@@ -29,23 +29,17 @@ const StatsList = ({
|
|||||||
{title}
|
{title}
|
||||||
</Heading>
|
</Heading>
|
||||||
<Text textAlign="center" fontSize="sm" color="whiteAlpha.800">
|
<Text textAlign="center" fontSize="sm" color="whiteAlpha.800">
|
||||||
{groups !== undefined
|
{groups ? "Updates every 24 hours" : "At time of page load"}
|
||||||
? groups >= 0
|
|
||||||
? "Updates every 24 hours"
|
|
||||||
: ""
|
|
||||||
: "At time of page load"}
|
|
||||||
</Text>
|
</Text>
|
||||||
</VStack>
|
</VStack>
|
||||||
<Flex w="80%" flexDirection={{ base: "column", md: "row" }} gap={4}>
|
<Flex w="80%" flexDirection={{ base: "column", md: "row" }} gap={4}>
|
||||||
{groups !== undefined ? (
|
{groups && groups >= 0 ? (
|
||||||
groups >= 0 ? (
|
|
||||||
<SingleStatComponent
|
<SingleStatComponent
|
||||||
loading={loading}
|
loading={loading}
|
||||||
title="Groups Helped"
|
title="Groups Bot Helped"
|
||||||
error={error}
|
error={error}
|
||||||
stat={groups}
|
stat={groups}
|
||||||
/>
|
/>
|
||||||
) : null
|
|
||||||
) : null}
|
) : null}
|
||||||
<SingleStatComponent
|
<SingleStatComponent
|
||||||
loading={loading}
|
loading={loading}
|
||||||
@@ -55,13 +49,13 @@ const StatsList = ({
|
|||||||
/>
|
/>
|
||||||
<SingleStatComponent
|
<SingleStatComponent
|
||||||
loading={loading}
|
loading={loading}
|
||||||
title="Commands Responses"
|
title="Commands Responded To"
|
||||||
error={error}
|
error={error}
|
||||||
stat={commands}
|
stat={commands}
|
||||||
/>
|
/>
|
||||||
<SingleStatComponent
|
<SingleStatComponent
|
||||||
loading={loading}
|
loading={loading}
|
||||||
title="Triggers"
|
title="Times Triggered"
|
||||||
error={error}
|
error={error}
|
||||||
stat={triggers}
|
stat={triggers}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const TimedTriggeredChart = ({
|
|||||||
return (
|
return (
|
||||||
<VStack gap={6} w="100%">
|
<VStack gap={6} w="100%">
|
||||||
<Heading as="h4" fontSize="2xl">{`Times Bot Was Triggered`}</Heading>
|
<Heading as="h4" fontSize="2xl">{`Times Bot Was Triggered`}</Heading>
|
||||||
<LineChartComponent data={lineChartData} label="Triggers" />
|
<LineChartComponent data={lineChartData} label="Times Triggered" />
|
||||||
</VStack>
|
</VStack>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
import { headers } from "next/headers";
|
|
||||||
import botCommands from "@/data/botCommands";
|
|
||||||
|
|
||||||
const environment = process.env.NODE_ENV || "development";
|
|
||||||
|
|
||||||
const isValidApiKey = (apiKey: string): boolean => {
|
|
||||||
const envApiKey =
|
|
||||||
process.env.API_TOKEN || process.env.NEXT_PUBLIC_API_TOKEN || "";
|
|
||||||
|
|
||||||
return apiKey === envApiKey;
|
|
||||||
};
|
|
||||||
|
|
||||||
export async function GET(/*request: Request*/) {
|
|
||||||
const headersList = await headers();
|
|
||||||
const apiKey = headersList.get("x-api-key");
|
|
||||||
|
|
||||||
if (environment === "production") {
|
|
||||||
if (!apiKey || apiKey == null) {
|
|
||||||
return new Response("No API Key provided", {
|
|
||||||
status: 401,
|
|
||||||
headers: headersList
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (apiKey !== null && !(await isValidApiKey(apiKey))) {
|
|
||||||
return new Response("Invalid API Key", {
|
|
||||||
status: 403,
|
|
||||||
headers: headersList
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Response.json(botCommands, {
|
|
||||||
status: 200,
|
|
||||||
headers: headersList
|
|
||||||
});
|
|
||||||
}
|
|
||||||
+1
-40
@@ -1,7 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import React, { useMemo } from "react";
|
|
||||||
import Script from "next/script";
|
|
||||||
import { Provider } from "@/components/ui/provider";
|
import { Provider } from "@/components/ui/provider";
|
||||||
import {
|
import {
|
||||||
UrqlProvider,
|
UrqlProvider,
|
||||||
@@ -10,6 +8,7 @@ import {
|
|||||||
fetchExchange,
|
fetchExchange,
|
||||||
createClient
|
createClient
|
||||||
} from "@urql/next";
|
} from "@urql/next";
|
||||||
|
import React, { useMemo } from "react";
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
children
|
children
|
||||||
@@ -35,47 +34,9 @@ export default function RootLayout({
|
|||||||
return [client, ssr];
|
return [client, ssr];
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const title = "Anti Nazi-Sites Bot Stats";
|
|
||||||
const description =
|
|
||||||
"A website to display various stats for the Anti Nazi-Sites bot for Telegram. Developed and maintained by Werewolf Kid Creations.";
|
|
||||||
const url = "https://bot-stats.werewolfkid.monster";
|
|
||||||
const img = "/images/SPD-arrows.svg";
|
|
||||||
const domain = "werewolfkid.monster";
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<html lang="en" suppressHydrationWarning>
|
<html lang="en" suppressHydrationWarning>
|
||||||
<title>{title}</title>
|
|
||||||
<meta name="description" content={description} />
|
|
||||||
<meta property="title" content={title} />
|
|
||||||
<meta name="theme-color" content="#00ffff" />
|
|
||||||
<link rel="icon" href={img} sizes="any" type="image/png" />
|
|
||||||
<meta property="image" content={img} />
|
|
||||||
<meta property="image:type" content="image/png" />
|
|
||||||
<meta property="image:width" content="653px" />
|
|
||||||
<meta property="og:title" content={title} />
|
|
||||||
<meta property="og:description" content={description} />
|
|
||||||
<meta property="og:url" content={url} />
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:image" content={img} />
|
|
||||||
<meta property="og:image:type" content="image/png" />
|
|
||||||
<meta property="og:image:width" content="653px" />
|
|
||||||
<meta property="og:image:height" content="651px" />
|
|
||||||
<meta property="image:height" content="651px" />
|
|
||||||
<meta name="twitter:title" content={title} />
|
|
||||||
<meta property="twitter:domain" content={domain} />
|
|
||||||
<meta property="twitter:url" content={url} />
|
|
||||||
<meta name="twitter:description" content={description} />
|
|
||||||
<meta name="twitter:image" content={img} />
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta httpEquiv="content-language" content="en_US" />
|
|
||||||
<meta charSet="UTF-8" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href={img} />
|
|
||||||
<link rel="shortcut icon" href={img} />
|
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href={img} />
|
|
||||||
<link rel="manifest" href={img} />
|
|
||||||
<body>
|
<body>
|
||||||
<div id="my-banner"></div>
|
|
||||||
<Script src="https://keepandroidopen.org/banner.js?size=mini&hidebutton=off&id=android-banner&animation=off?link=https://keepandroidopen.org" />
|
|
||||||
<UrqlProvider client={client} ssr={ssr}>
|
<UrqlProvider client={client} ssr={ssr}>
|
||||||
<Provider>{children}</Provider>
|
<Provider>{children}</Provider>
|
||||||
</UrqlProvider>
|
</UrqlProvider>
|
||||||
|
|||||||
+29
-83
@@ -18,12 +18,12 @@ import LinksDeletedChart from "./LinksDeletedChart";
|
|||||||
import { LineChartArr } from "@/types/LineChartStats";
|
import { LineChartArr } from "@/types/LineChartStats";
|
||||||
import CommandResponsesChart from "./CommandResponsesChart";
|
import CommandResponsesChart from "./CommandResponsesChart";
|
||||||
import TimedTriggeredChart from "./TimesTriggeredChart";
|
import TimedTriggeredChart from "./TimesTriggeredChart";
|
||||||
|
import GetStatsRange from "@/graphql/queries/getStatsRange";
|
||||||
import StatsList from "./StatsList";
|
import StatsList from "./StatsList";
|
||||||
import GetTotalGroupsQuery from "@/graphql/queries/getTotalGroups";
|
import GetTotalGroupsQuery from "@/graphql/queries/getTotalGroups";
|
||||||
import GetTotalStatsQuery from "@/graphql/queries/getTotalStats";
|
import GetTotalStatsQuery from "@/graphql/queries/getTotalStats";
|
||||||
import GetTodaysStatsQuery from "@/graphql/queries/getTodaysStats";
|
import GetTodaysStatsQuery from "@/graphql/queries/getTodaysStats";
|
||||||
import GetStatsRange from "@/graphql/queries/getStatsRange";
|
import Image from "next/image";
|
||||||
import CommandsListTable from "./CommandsListTable";
|
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
// * Total Groups * //
|
// * Total Groups * //
|
||||||
@@ -57,14 +57,12 @@ export default function Home() {
|
|||||||
// * 30 Day Stats * //
|
// * 30 Day Stats * //
|
||||||
|
|
||||||
// Dates
|
// Dates
|
||||||
const [currDate, setCurrDate] = useState<String>();
|
const [currDate, setCurrDate] = useState<Date>();
|
||||||
const [date30DaysAgo, setDate30DaysAgo] = useState<String>();
|
const [date30DaysAgo, setDate30DaysAgo] = useState<Date>();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setCurrDate(new Date().toJSON());
|
setCurrDate(new Date());
|
||||||
setDate30DaysAgo(
|
setDate30DaysAgo(new Date(new Date().setDate(new Date().getDay() - 30)));
|
||||||
new Date(new Date().setDate(new Date().getDate() - 30)).toJSON()
|
|
||||||
);
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const [
|
const [
|
||||||
@@ -76,8 +74,8 @@ export default function Home() {
|
|||||||
] = useQuery({
|
] = useQuery({
|
||||||
query: GetStatsRange,
|
query: GetStatsRange,
|
||||||
variables: {
|
variables: {
|
||||||
startDate: currDate || "",
|
stateDate: currDate,
|
||||||
endDate: date30DaysAgo || ""
|
endDate: date30DaysAgo
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -96,11 +94,11 @@ export default function Home() {
|
|||||||
<Fragment>
|
<Fragment>
|
||||||
<VStack
|
<VStack
|
||||||
bg="cyan.950"
|
bg="cyan.950"
|
||||||
minH="100dvh"
|
w="100vw"
|
||||||
|
minH="100vh"
|
||||||
h="100%"
|
h="100%"
|
||||||
py="5dvh"
|
py="5vh"
|
||||||
minW="fit-content"
|
minW="fit-content"
|
||||||
textAlign="center"
|
|
||||||
>
|
>
|
||||||
<VStack w={{ base: "100%", md: "90%" }} gap={10} minW="fit-content">
|
<VStack w={{ base: "100%", md: "90%" }} gap={10} minW="fit-content">
|
||||||
<VStack w="80%" gap={10}>
|
<VStack w="80%" gap={10}>
|
||||||
@@ -121,13 +119,9 @@ export default function Home() {
|
|||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
</Icon>
|
</Icon>
|
||||||
<VStack gap={4} maxW="34rem">
|
<VStack gap={4} maxW="30rem">
|
||||||
<Heading
|
<Heading as="h1" fontSize="5xl">
|
||||||
as="h1"
|
{"Nazi Site Patrol Stats"}
|
||||||
fontSize="5xl"
|
|
||||||
lineHeight={{ base: "3rem", md: "" }}
|
|
||||||
>
|
|
||||||
{"Anti Nazi-Sites Bot Stats"}
|
|
||||||
</Heading>
|
</Heading>
|
||||||
<Heading
|
<Heading
|
||||||
as="h2"
|
as="h2"
|
||||||
@@ -136,7 +130,7 @@ export default function Home() {
|
|||||||
textAlign="center"
|
textAlign="center"
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
"A Telegram bot that deletes links and embeds to sites that align with the Fascist Right political agenda or are otherwise a safety/privacy risk."
|
"A telegram bot that removes links and embeds to sites that align with the Fascist Right political agenda."
|
||||||
}
|
}
|
||||||
</Heading>
|
</Heading>
|
||||||
</VStack>
|
</VStack>
|
||||||
@@ -153,7 +147,6 @@ export default function Home() {
|
|||||||
</Text>
|
</Text>
|
||||||
</VStack>
|
</VStack>
|
||||||
</VStack>
|
</VStack>
|
||||||
<CommandsListTable />
|
|
||||||
<VStack gap={10} w="100%">
|
<VStack gap={10} w="100%">
|
||||||
{totalGroups ? (
|
{totalGroups ? (
|
||||||
<StatsList
|
<StatsList
|
||||||
@@ -196,7 +189,7 @@ export default function Home() {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</VStack>
|
</VStack>
|
||||||
<VStack w="95%" gap="5dvh">
|
<VStack w="95%" gap="5vh">
|
||||||
<VStack gap={1}>
|
<VStack gap={1}>
|
||||||
<Heading as="h1" fontSize="3xl">{`30 Day Stats`}</Heading>
|
<Heading as="h1" fontSize="3xl">{`30 Day Stats`}</Heading>
|
||||||
<Text textAlign="center" fontSize="sm" color="whiteAlpha.800">
|
<Text textAlign="center" fontSize="sm" color="whiteAlpha.800">
|
||||||
@@ -215,76 +208,29 @@ export default function Home() {
|
|||||||
</VStack>
|
</VStack>
|
||||||
</VStack>
|
</VStack>
|
||||||
</VStack>
|
</VStack>
|
||||||
<Box
|
|
||||||
bgImage={`linear-gradient(
|
|
||||||
to right,
|
|
||||||
rgb(85, 205, 252),
|
|
||||||
rgb(179, 157, 233),
|
|
||||||
rgb(247, 168, 184),
|
|
||||||
rgb(246, 216, 221),
|
|
||||||
rgb(255, 255, 255) 10%,
|
|
||||||
rgb(0, 0, 0),
|
|
||||||
rgb(54, 35, 18),
|
|
||||||
rgb(120, 79, 23),
|
|
||||||
rgb(181, 63, 27),
|
|
||||||
rgb(237, 34, 36),
|
|
||||||
rgb(243, 91, 34),
|
|
||||||
rgb(249, 150, 33),
|
|
||||||
rgb(245, 193, 30),
|
|
||||||
rgb(241, 235, 27) 48%,
|
|
||||||
rgb(241, 235, 27),
|
|
||||||
rgb(241, 235, 27) 52%,
|
|
||||||
rgb(99, 199, 32),
|
|
||||||
rgb(12, 155, 73),
|
|
||||||
rgb(33, 135, 141),
|
|
||||||
rgb(57, 84, 165),
|
|
||||||
rgb(97, 55, 155),
|
|
||||||
rgb(147, 40, 142)
|
|
||||||
)`}
|
|
||||||
w="100%"
|
|
||||||
py="5dvh"
|
|
||||||
textAlign="center"
|
|
||||||
>
|
|
||||||
<VStack
|
<VStack
|
||||||
|
w="100vw"
|
||||||
|
py="5vh"
|
||||||
|
textAlign="center"
|
||||||
color="white"
|
color="white"
|
||||||
textShadow={`
|
textShadow="0px 0px 5px black;"
|
||||||
2px 2px 0 #000,
|
|
||||||
2px -2px 0 #000,
|
|
||||||
-2px 2px 0 #000,
|
|
||||||
-2px -2px 0 #000,
|
|
||||||
2px 0px 0 #000,
|
|
||||||
0px 2px 0 #000,
|
|
||||||
-2px 0px 0 #000,
|
|
||||||
0px -2px 0 #000
|
|
||||||
`}
|
|
||||||
gap={6}
|
gap={6}
|
||||||
w="100%"
|
|
||||||
>
|
>
|
||||||
<Text
|
<Text fontSize="3xl" w="auto" bg="blackAlpha.400" maxW="62vw">
|
||||||
fontSize="3xl"
|
{"Down with fascism! Fuck MAGA! Fuck Trump! Fuck Nazis!"}
|
||||||
minW="fit-content"
|
|
||||||
w={{ base: "100%", sm: "auto" }}
|
|
||||||
bg="blackAlpha.600"
|
|
||||||
maxW={{ base: "", sm: "62dvw" }}
|
|
||||||
px={2}
|
|
||||||
>
|
|
||||||
{
|
|
||||||
"Down with fascism! Fuck MAGA! Fuck Trump! Fuck Nazis! Abolish ICE!"
|
|
||||||
}
|
|
||||||
</Text>
|
</Text>
|
||||||
<Text
|
<Text fontSize="3xl" w="auto" bg="blackAlpha.400" maxW="62vw">
|
||||||
fontSize="3xl"
|
|
||||||
minW="fit-content"
|
|
||||||
w={{ base: "100%", sm: "auto" }}
|
|
||||||
bg="blackAlpha.600"
|
|
||||||
maxW={{ base: "", sm: "62dvw" }}
|
|
||||||
px={2}
|
|
||||||
>
|
|
||||||
{
|
{
|
||||||
"Trans rights are human rights! Trans women are women! Trans men are men! Never let them take away your happiness!"
|
"Trans rights are human rights! Trans women are women! Trans men are men! Never let them take away your happiness!"
|
||||||
}
|
}
|
||||||
</Text>
|
</Text>
|
||||||
</VStack>
|
</VStack>
|
||||||
|
<Box w="100vw" h="100vh" position="fixed" bottom="-510px" zIndex={-1}>
|
||||||
|
<Image
|
||||||
|
fill
|
||||||
|
alt="intersex inclusive pride flag"
|
||||||
|
src="https://upload.wikimedia.org/wikipedia/commons/6/60/Intersex-inclusive_pride_flag.svg"
|
||||||
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
import { LineChartArr } from "@/types/LineChartStats";
|
import { LineChartArr } from "@/types/LineChartStats";
|
||||||
|
|
||||||
interface LineChartComponentProps {
|
interface LineChartComponentProps {
|
||||||
label: "Triggers" | "Links Deleted" | "Command Responses";
|
label: "Times Triggered" | "Links Deleted" | "Command Responses";
|
||||||
data: LineChartArr;
|
data: LineChartArr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,14 +25,14 @@ const LineChartComponent = ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Chart.Root maxH="xs" chart={chart} maxW="100dvw">
|
<Chart.Root maxH="xs" chart={chart} maxW="100vw">
|
||||||
<LineChart data={chart.data} responsive>
|
<LineChart data={chart.data}>
|
||||||
<CartesianGrid stroke={chart.color("border")} vertical={false} />
|
<CartesianGrid stroke={chart.color("border")} vertical={false} />
|
||||||
<XAxis
|
<XAxis
|
||||||
axisLine={false}
|
axisLine={false}
|
||||||
dataKey={chart.key("day")}
|
dataKey={chart.key("day")}
|
||||||
stroke={chart.color("border")}
|
stroke={chart.color("border")}
|
||||||
label={{ value: "Date", position: "bottom" }}
|
// label={{ value: "Day", position: "bottom" }}
|
||||||
/>
|
/>
|
||||||
<YAxis
|
<YAxis
|
||||||
width="auto"
|
width="auto"
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
// * Commands *
|
|
||||||
|
|
||||||
interface Commands {
|
|
||||||
command: String;
|
|
||||||
description: String;
|
|
||||||
groups: boolean;
|
|
||||||
private: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const botInfo: Commands = {
|
|
||||||
command: "/botInfo",
|
|
||||||
description:
|
|
||||||
"Lists information about the bot such as: creator, reason for my creation, purpose and goal, etc",
|
|
||||||
groups: true,
|
|
||||||
private: true
|
|
||||||
};
|
|
||||||
|
|
||||||
const getGroupStats: Commands = {
|
|
||||||
command: "/groupStats",
|
|
||||||
description:
|
|
||||||
"Displays the number of times the bot has deleted links in your group for the lifetime of the bot",
|
|
||||||
groups: true,
|
|
||||||
private: false
|
|
||||||
};
|
|
||||||
|
|
||||||
const help: Commands = {
|
|
||||||
command: "/help",
|
|
||||||
description:
|
|
||||||
"Lists information about how to setup the bot and the list of available commands",
|
|
||||||
groups: true,
|
|
||||||
private: true
|
|
||||||
};
|
|
||||||
|
|
||||||
const registerGroup: Commands = {
|
|
||||||
command: "/registerGroup",
|
|
||||||
description: `Will add your group to the database, if your group doesn't exist already\\. This is used to calculate the "total groups" count on the bot stats website`,
|
|
||||||
groups: true,
|
|
||||||
private: true
|
|
||||||
};
|
|
||||||
|
|
||||||
const botStatsSite: Commands = {
|
|
||||||
command: "/botStats",
|
|
||||||
description: "Provides the bot stats website link as an embed",
|
|
||||||
groups: true,
|
|
||||||
private: true
|
|
||||||
};
|
|
||||||
|
|
||||||
const commands: Commands[] = [
|
|
||||||
botInfo,
|
|
||||||
getGroupStats,
|
|
||||||
help,
|
|
||||||
registerGroup,
|
|
||||||
botStatsSite
|
|
||||||
];
|
|
||||||
|
|
||||||
export default commands;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { gql } from "@urql/next";
|
import { gql } from "@urql/next";
|
||||||
|
|
||||||
const GetStatsRange = gql`
|
const GetStatsRange = gql`
|
||||||
query getStatsRange($startDate: String!, $endDate: String!) {
|
query getStatsRange($startDate: Date, $endDate: Date) {
|
||||||
getStatsRange(endDate: $startDate, startDate: $endDate) {
|
getStatsRange(endDate: $startDate, startDate: $endDate) {
|
||||||
commandResponses
|
commandResponses
|
||||||
createdAt
|
createdAt
|
||||||
|
|||||||
+34
-222
@@ -1,24 +1,6 @@
|
|||||||
import prisma from "@/lib/prismaClient";
|
import prisma from "@/lib/prismaClient";
|
||||||
import { BigIntResolver } from "graphql-scalars";
|
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
|
// Prisma
|
||||||
export const resolvers = {
|
export const resolvers = {
|
||||||
// scalars
|
// scalars
|
||||||
@@ -37,14 +19,6 @@ export const resolvers = {
|
|||||||
// _ctx: unknown
|
// _ctx: unknown
|
||||||
) => {
|
) => {
|
||||||
const { startDate, endDate } = data;
|
const { startDate, endDate } = data;
|
||||||
|
|
||||||
if (!startDate || !endDate) {
|
|
||||||
console.info(
|
|
||||||
"GET STATS RANGE: REFUSED - one or both dates not provided."
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return await prisma.dailyStats.findMany({
|
return await prisma.dailyStats.findMany({
|
||||||
where: {
|
where: {
|
||||||
createdAt: {
|
createdAt: {
|
||||||
@@ -62,108 +36,39 @@ export const resolvers = {
|
|||||||
orderBy: {
|
orderBy: {
|
||||||
createdAt: "asc"
|
createdAt: "asc"
|
||||||
}
|
}
|
||||||
}),
|
|
||||||
getGroupStats: async (
|
|
||||||
_parent: unknown,
|
|
||||||
data: { groupID: number }
|
|
||||||
// _ctx: unknown
|
|
||||||
) =>
|
|
||||||
await prisma.groups.findUnique({
|
|
||||||
where: {
|
|
||||||
telegramID: BigInt(data.groupID)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
Mutation: {
|
Mutation: {
|
||||||
init: async (
|
init: async () =>
|
||||||
_parent: unknown,
|
// _parent: unknown,
|
||||||
data: { mutationKey?: string }
|
// data: { newWeek: boolean; newMonth: boolean }
|
||||||
// _ctx: unknown
|
// _ctx: unknown
|
||||||
) => {
|
{
|
||||||
const { mutationKey } = data;
|
const date = new Date().toISOString();
|
||||||
|
let count = 0;
|
||||||
|
|
||||||
// If env is not development check for the mutation key.
|
|
||||||
if (env !== "development") {
|
|
||||||
// If mutation key was not provided.
|
|
||||||
if (!mutationKey) {
|
|
||||||
console.info("INIT: REFUSED - no mutation key was provided.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If provided mutation key is invalid.
|
|
||||||
if (mutationKey !== envMutationKey) {
|
|
||||||
console.info("INIT: REFUSED - mutation key provided was incorrect.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const createdAtDate = new Date().toISOString();
|
|
||||||
// How many tables were created
|
|
||||||
let newTablesCount = 0;
|
|
||||||
|
|
||||||
// Check for daily stats document count.
|
|
||||||
if ((await prisma.dailyStats.count()) === 0) {
|
if ((await prisma.dailyStats.count()) === 0) {
|
||||||
// Make a daily stats document.
|
await prisma.dailyStats.create({ data: { createdAt: date } });
|
||||||
console.info("INIT: created new document");
|
count++;
|
||||||
await prisma.dailyStats.create({ data: { createdAt: createdAtDate } });
|
|
||||||
newTablesCount++;
|
|
||||||
}
|
}
|
||||||
// Check for a total stats document.
|
|
||||||
if ((await prisma.totalStats.count()) === 0) {
|
if ((await prisma.totalStats.count()) === 0) {
|
||||||
// Make the total stats document.
|
await prisma.totalStats.create({ data: { createdAt: date } });
|
||||||
console.info("INIT: created new document");
|
count++;
|
||||||
await prisma.totalStats.create({ data: { createdAt: createdAtDate } });
|
|
||||||
newTablesCount++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console.info(
|
return `${count} tables have been initialized with data.`;
|
||||||
`INIT: ${newTablesCount} tables have been initialized with data.`
|
|
||||||
);
|
|
||||||
return `${newTablesCount} tables have been initialized with data.`;
|
|
||||||
},
|
},
|
||||||
cronJob: async (
|
cronJob: async () =>
|
||||||
_parent: unknown,
|
// _parent: unknown,
|
||||||
data: { mutationKey?: string }
|
// data: { newWeek: boolean; newMonth: boolean }
|
||||||
// _ctx: unknown
|
// _ctx: unknown
|
||||||
) => {
|
{
|
||||||
const { mutationKey } = data;
|
const date = new Date().toISOString();
|
||||||
|
|
||||||
// If env is not development check for the mutation key.
|
await prisma.dailyStats.create({ data: { createdAt: date } });
|
||||||
if (env !== "development") {
|
|
||||||
// If mutation key was not provided.
|
|
||||||
if (!mutationKey) {
|
|
||||||
console.info("CRONJOB: REFUSED - no mutation key was provided.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If provided mutation key is invalid.
|
|
||||||
if (mutationKey !== envMutationKey) {
|
|
||||||
console.info(
|
|
||||||
"CRONJOB: REFUSED - mutation key provided was incorrect."
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const latestDailyStats = await getLatestDailyStat();
|
|
||||||
|
|
||||||
// If there is a daily stats documents.
|
|
||||||
if (latestDailyStats !== null) {
|
|
||||||
// Check if the latest document is for today.
|
|
||||||
if (isDailyStatToday(String(latestDailyStats.createdAt))) {
|
|
||||||
console.info("Cron job refused: latest document is current date.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create new daily stats document.
|
|
||||||
const createdAtDate = new Date().toISOString();
|
|
||||||
await prisma.dailyStats.create({ data: { createdAt: createdAtDate } });
|
|
||||||
|
|
||||||
// Get every daily stats documents.
|
|
||||||
const allStats = await prisma.dailyStats.findMany({});
|
const allStats = await prisma.dailyStats.findMany({});
|
||||||
|
|
||||||
// Add all stats into one object.
|
|
||||||
const calculatedStats = allStats.reduce(
|
const calculatedStats = allStats.reduce(
|
||||||
(acc, curr) => {
|
(acc, curr) => {
|
||||||
const links = (acc.linksDeleted += curr.linksDeleted);
|
const links = (acc.linksDeleted += curr.linksDeleted);
|
||||||
@@ -183,15 +88,12 @@ export const resolvers = {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// Take the total stats document.
|
|
||||||
const totalStats = await prisma.totalStats.findFirst({
|
const totalStats = await prisma.totalStats.findFirst({
|
||||||
orderBy: {
|
orderBy: {
|
||||||
createdAt: "desc"
|
createdAt: "desc"
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Update the total stats document with the new total.
|
|
||||||
console.info("CRONJOB: Creating new document.");
|
|
||||||
return await prisma.totalStats.update({
|
return await prisma.totalStats.update({
|
||||||
where: {
|
where: {
|
||||||
createdAt: totalStats?.createdAt
|
createdAt: totalStats?.createdAt
|
||||||
@@ -203,48 +105,20 @@ export const resolvers = {
|
|||||||
},
|
},
|
||||||
addGroup: async (
|
addGroup: async (
|
||||||
_parent: unknown,
|
_parent: unknown,
|
||||||
data: {
|
data: { groupID: number; groupName: string; groupUsername: string }
|
||||||
groupID: string;
|
|
||||||
groupName: string;
|
|
||||||
groupUsername: string;
|
|
||||||
mutationKey?: string;
|
|
||||||
}
|
|
||||||
// _ctx: unknown
|
// _ctx: unknown
|
||||||
) => {
|
) => {
|
||||||
const { groupID, groupName, groupUsername, mutationKey } = data;
|
const { groupID, groupName, groupUsername } = data;
|
||||||
const groupIDInt = BigInt(groupID);
|
|
||||||
|
|
||||||
// If env is not development check for the mutation key.
|
const existingGroup = await prisma.groups.findFirst({
|
||||||
if (env !== "development") {
|
where: { telegramID: groupID }
|
||||||
// If mutation key was not provided.
|
|
||||||
if (!mutationKey) {
|
|
||||||
console.info("ADD GROUP: REFUSED - no mutation key was provided.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If provided mutation key is invalid.
|
|
||||||
if (mutationKey !== envMutationKey) {
|
|
||||||
console.info(
|
|
||||||
"ADD GROUP: REFUSED - mutation key provided was incorrect."
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attempt to find the group's document.
|
|
||||||
const existingGroup = await prisma.groups.findUnique({
|
|
||||||
where: { telegramID: groupIDInt }
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// If the document was found.
|
|
||||||
if (existingGroup !== null) {
|
if (existingGroup !== null) {
|
||||||
// Check if the document details are incorrect.
|
|
||||||
if (
|
if (
|
||||||
existingGroup.name !== groupName ||
|
existingGroup.name !== groupName ||
|
||||||
existingGroup.username !== groupUsername
|
existingGroup.username !== groupUsername
|
||||||
) {
|
) {
|
||||||
// Return the document after updating the details.
|
|
||||||
console.info("ADD GROUP: Updated group document.");
|
|
||||||
return await prisma.groups.update({
|
return await prisma.groups.update({
|
||||||
where: {
|
where: {
|
||||||
telegramID: existingGroup.telegramID
|
telegramID: existingGroup.telegramID
|
||||||
@@ -253,113 +127,51 @@ export const resolvers = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return document without making changed.
|
|
||||||
return existingGroup;
|
return existingGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return document after creating one for the group.
|
|
||||||
console.info("ADD GROUP: Created new group document.");
|
|
||||||
return await prisma.groups.create({
|
return await prisma.groups.create({
|
||||||
data: {
|
data: {
|
||||||
telegramID: groupIDInt,
|
telegramID: groupID,
|
||||||
name: groupName
|
name: groupName
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
incrementGroup: async (
|
incrementGroup: async (
|
||||||
_parent: unknown,
|
_parent: unknown,
|
||||||
data: { groupID: number; linksDeleted: number; mutationKey?: string }
|
data: { groupID: number; linksDeleted: number }
|
||||||
// _ctx: unknown
|
// _ctx: unknown
|
||||||
) => {
|
) => {
|
||||||
const { groupID, linksDeleted, mutationKey } = data;
|
const { groupID, linksDeleted } = data;
|
||||||
|
|
||||||
// If env is not development check for the mutation key.
|
|
||||||
if (env !== "development") {
|
|
||||||
// If mutation key was not provided.
|
|
||||||
if (!mutationKey) {
|
|
||||||
console.info(
|
|
||||||
"INCREMENT GROUP: REFUSED - no mutation key was provided."
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If provided mutation key is invalid.
|
|
||||||
if (mutationKey !== envMutationKey) {
|
|
||||||
console.info(
|
|
||||||
"INCREMENT GROUP: REFUSED - mutation key provided was incorrect."
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return updated group document after incrementing it.
|
|
||||||
console.info("INCREMENT GROUP: Incremented group document.");
|
|
||||||
return await prisma.groups.update({
|
return await prisma.groups.update({
|
||||||
where: { telegramID: BigInt(groupID) },
|
where: { telegramID: groupID },
|
||||||
data: { linksDeleted: { increment: linksDeleted } }
|
data: { linksDeleted: { increment: linksDeleted } }
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
increment: async (
|
increment: async (
|
||||||
_parent: unknown,
|
_parent: unknown,
|
||||||
data: {
|
data: { link: boolean; command: boolean; trigger: boolean }
|
||||||
link: number;
|
|
||||||
command: boolean;
|
|
||||||
trigger: boolean;
|
|
||||||
mutationKey?: string;
|
|
||||||
}
|
|
||||||
// _ctx: unknown
|
// _ctx: unknown
|
||||||
) => {
|
) => {
|
||||||
const { link, command, trigger, mutationKey } = data;
|
const { link, command, trigger } = data;
|
||||||
|
|
||||||
// If env is not development check for the mutation key.
|
return await prisma.dailyStats
|
||||||
if (env !== "development") {
|
.findFirst({
|
||||||
// If mutation key was not provided.
|
|
||||||
if (!mutationKey) {
|
|
||||||
console.info("INCREMENT: REFUSED - no mutation key was provided.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If provided mutation key is invalid.
|
|
||||||
if (mutationKey !== envMutationKey) {
|
|
||||||
console.info(
|
|
||||||
"INCREMENT: REFUSED - mutation key provided was incorrect."
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get latest daily stats.
|
|
||||||
let latestDailyStats = await getLatestDailyStat();
|
|
||||||
|
|
||||||
// If there is a daily stats documents.
|
|
||||||
if (latestDailyStats !== null) {
|
|
||||||
// Check if the latest document is for today.
|
|
||||||
if (!isDailyStatToday(String(latestDailyStats.createdAt))) {
|
|
||||||
// Create new daily stats document.
|
|
||||||
console.info("INCREMENT: Created new document.");
|
|
||||||
const date = new Date().toISOString();
|
|
||||||
await prisma.dailyStats
|
|
||||||
.create({ data: { createdAt: date } })
|
|
||||||
.then(async () => {
|
|
||||||
latestDailyStats = await prisma.dailyStats.findFirst({
|
|
||||||
orderBy: {
|
orderBy: {
|
||||||
createdAt: "desc"
|
createdAt: "desc"
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
});
|
.then(async (todayStat) => {
|
||||||
}
|
|
||||||
|
|
||||||
// Return latest daily stats after incrementing it.
|
|
||||||
console.info("INCREMENT: Incremented information on today's document.");
|
|
||||||
return await prisma.dailyStats.update({
|
return await prisma.dailyStats.update({
|
||||||
where: { createdAt: latestDailyStats.createdAt },
|
where: { createdAt: todayStat?.createdAt },
|
||||||
data: {
|
data: {
|
||||||
linksDeleted: { increment: link ? link : 0 },
|
linksDeleted: { increment: link ? 1 : 0 },
|
||||||
commandResponses: { increment: command ? 1 : 0 },
|
commandResponses: { increment: command ? 1 : 0 },
|
||||||
timesTriggered: { increment: trigger ? 1 : 0 }
|
timesTriggered: { increment: trigger ? 1 : 0 }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
+6
-21
@@ -7,30 +7,15 @@ const typeDefs = /* GraphQL */ `
|
|||||||
type Query {
|
type Query {
|
||||||
getTotalGroups: Int!
|
getTotalGroups: Int!
|
||||||
getTodayStats: DailyStats!
|
getTodayStats: DailyStats!
|
||||||
getStatsRange(startDate: String!, endDate: String!): [DailyStats]
|
getStatsRange(startDate: Date, endDate: Date): [DailyStats]
|
||||||
getTotalStats: TotalStats!
|
getTotalStats: TotalStats!
|
||||||
getGroupStats(groupID: String!): Groups
|
|
||||||
}
|
}
|
||||||
type Mutation {
|
type Mutation {
|
||||||
init(mutationKey: String): String!
|
init: String!
|
||||||
cronJob(mutationKey: String): TotalStats
|
cronJob: TotalStats!
|
||||||
addGroup(
|
addGroup(groupID: BigInt, groupName: String, groupUsername: String): Groups!
|
||||||
groupID: String!
|
incrementGroup(groupID: BigInt, linksDeleted: Int): Groups!
|
||||||
groupName: String!
|
increment(link: Boolean, command: Boolean, trigger: Boolean): DailyStats!
|
||||||
groupUsername: String
|
|
||||||
mutationKey: String
|
|
||||||
): Groups!
|
|
||||||
incrementGroup(
|
|
||||||
groupID: String!
|
|
||||||
linksDeleted: Int!
|
|
||||||
mutationKey: String
|
|
||||||
): Groups!
|
|
||||||
increment(
|
|
||||||
link: Int
|
|
||||||
command: Boolean
|
|
||||||
trigger: Boolean
|
|
||||||
mutationKey: String
|
|
||||||
): DailyStats!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Groups {
|
type Groups {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ const lineChartArr = (dailyStatsArr: DailyStats): LineChartArr => {
|
|||||||
day,
|
day,
|
||||||
"Links Deleted": linksDeleted,
|
"Links Deleted": linksDeleted,
|
||||||
"Command Responses": commandResponses,
|
"Command Responses": commandResponses,
|
||||||
Triggers: timesTriggered
|
"Times Triggered": timesTriggered
|
||||||
};
|
};
|
||||||
|
|
||||||
lineChartArr.push(lineChartItem);
|
lineChartArr.push(lineChartItem);
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
|
||||||
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
||||||
|
/* eslint-disable */
|
||||||
|
// biome-ignore-all lint: generated file
|
||||||
|
// @ts-nocheck
|
||||||
|
/*
|
||||||
|
* This file should be your main import to use Prisma-related types and utilities in a browser.
|
||||||
|
* Use it to get access to models, enums, and input types.
|
||||||
|
*
|
||||||
|
* This file does not contain a `PrismaClient` class, nor several other helpers that are intended as server-side only.
|
||||||
|
* See `client.ts` for the standard, server-side entry point.
|
||||||
|
*
|
||||||
|
* 🟢 You can import this file directly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as Prisma from './internal/prismaNamespaceBrowser'
|
||||||
|
export { Prisma }
|
||||||
|
export * as $Enums from './enums'
|
||||||
|
export * from './enums';
|
||||||
|
/**
|
||||||
|
* Model Groups
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export type Groups = Prisma.GroupsModel
|
||||||
|
/**
|
||||||
|
* Model TotalStats
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export type TotalStats = Prisma.TotalStatsModel
|
||||||
|
/**
|
||||||
|
* Model DailyStats
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export type DailyStats = Prisma.DailyStatsModel
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
||||||
|
/* eslint-disable */
|
||||||
|
// biome-ignore-all lint: generated file
|
||||||
|
// @ts-nocheck
|
||||||
|
/*
|
||||||
|
* This file should be your main import to use Prisma. Through it you get access to all the models, enums, and input types.
|
||||||
|
* If you're looking for something you can import in the client-side of your application, please refer to the `browser.ts` file instead.
|
||||||
|
*
|
||||||
|
* 🟢 You can import this file directly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as process from 'node:process'
|
||||||
|
import * as path from 'node:path'
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
globalThis['__dirname'] = path.dirname(fileURLToPath(import.meta.url))
|
||||||
|
|
||||||
|
import * as runtime from "@prisma/client/runtime/library"
|
||||||
|
import * as $Enums from "./enums"
|
||||||
|
import * as $Class from "./internal/class"
|
||||||
|
import * as Prisma from "./internal/prismaNamespace"
|
||||||
|
|
||||||
|
export * as $Enums from './enums'
|
||||||
|
export * from "./enums"
|
||||||
|
/**
|
||||||
|
* ## Prisma Client
|
||||||
|
*
|
||||||
|
* Type-safe database client for TypeScript
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* const prisma = new PrismaClient()
|
||||||
|
* // Fetch zero or more Groups
|
||||||
|
* const groups = await prisma.groups.findMany()
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
|
||||||
|
*/
|
||||||
|
export const PrismaClient = $Class.getPrismaClientClass(__dirname)
|
||||||
|
export type PrismaClient<LogOpts extends Prisma.LogLevel = never, OmitOpts extends Prisma.PrismaClientOptions["omit"] = Prisma.PrismaClientOptions["omit"], ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = $Class.PrismaClient<LogOpts, OmitOpts, ExtArgs>
|
||||||
|
export { Prisma }
|
||||||
|
|
||||||
|
|
||||||
|
// file annotations for bundling tools to include these files
|
||||||
|
path.join(__dirname, "libquery_engine-debian-openssl-3.0.x.so.node")
|
||||||
|
path.join(process.cwd(), "src/prisma/generated/libquery_engine-debian-openssl-3.0.x.so.node")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model Groups
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export type Groups = Prisma.GroupsModel
|
||||||
|
/**
|
||||||
|
* Model TotalStats
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export type TotalStats = Prisma.TotalStatsModel
|
||||||
|
/**
|
||||||
|
* Model DailyStats
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export type DailyStats = Prisma.DailyStatsModel
|
||||||
@@ -0,0 +1,250 @@
|
|||||||
|
|
||||||
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
||||||
|
/* eslint-disable */
|
||||||
|
// biome-ignore-all lint: generated file
|
||||||
|
// @ts-nocheck
|
||||||
|
/*
|
||||||
|
* This file exports various common sort, input & filter types that are not directly linked to a particular model.
|
||||||
|
*
|
||||||
|
* 🟢 You can import this file directly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type * as runtime from "@prisma/client/runtime/library"
|
||||||
|
import * as $Enums from "./enums"
|
||||||
|
import type * as Prisma from "./internal/prismaNamespace"
|
||||||
|
|
||||||
|
|
||||||
|
export type BigIntFilter<$PrismaModel = never> = {
|
||||||
|
equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
in?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
|
||||||
|
lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
gte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedBigIntFilter<$PrismaModel> | bigint | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type StringFilter<$PrismaModel = never> = {
|
||||||
|
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||||
|
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
mode?: Prisma.QueryMode
|
||||||
|
not?: Prisma.NestedStringFilter<$PrismaModel> | string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DateTimeFilter<$PrismaModel = never> = {
|
||||||
|
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
|
||||||
|
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type BigIntWithAggregatesFilter<$PrismaModel = never> = {
|
||||||
|
equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
in?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
|
||||||
|
lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
gte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedBigIntWithAggregatesFilter<$PrismaModel> | bigint | number
|
||||||
|
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_avg?: Prisma.NestedFloatFilter<$PrismaModel>
|
||||||
|
_sum?: Prisma.NestedBigIntFilter<$PrismaModel>
|
||||||
|
_min?: Prisma.NestedBigIntFilter<$PrismaModel>
|
||||||
|
_max?: Prisma.NestedBigIntFilter<$PrismaModel>
|
||||||
|
}
|
||||||
|
|
||||||
|
export type StringWithAggregatesFilter<$PrismaModel = never> = {
|
||||||
|
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||||
|
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
mode?: Prisma.QueryMode
|
||||||
|
not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string
|
||||||
|
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_min?: Prisma.NestedStringFilter<$PrismaModel>
|
||||||
|
_max?: Prisma.NestedStringFilter<$PrismaModel>
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DateTimeWithAggregatesFilter<$PrismaModel = never> = {
|
||||||
|
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
|
||||||
|
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string
|
||||||
|
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_min?: Prisma.NestedDateTimeFilter<$PrismaModel>
|
||||||
|
_max?: Prisma.NestedDateTimeFilter<$PrismaModel>
|
||||||
|
}
|
||||||
|
|
||||||
|
export type IntFilter<$PrismaModel = never> = {
|
||||||
|
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
|
||||||
|
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedIntFilter<$PrismaModel> | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type IntWithAggregatesFilter<$PrismaModel = never> = {
|
||||||
|
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
|
||||||
|
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedIntWithAggregatesFilter<$PrismaModel> | number
|
||||||
|
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_avg?: Prisma.NestedFloatFilter<$PrismaModel>
|
||||||
|
_sum?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_min?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_max?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedBigIntFilter<$PrismaModel = never> = {
|
||||||
|
equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
in?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
|
||||||
|
lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
gte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedBigIntFilter<$PrismaModel> | bigint | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedStringFilter<$PrismaModel = never> = {
|
||||||
|
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||||
|
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedStringFilter<$PrismaModel> | string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedDateTimeFilter<$PrismaModel = never> = {
|
||||||
|
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
|
||||||
|
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedBigIntWithAggregatesFilter<$PrismaModel = never> = {
|
||||||
|
equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
in?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
|
||||||
|
lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
gte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedBigIntWithAggregatesFilter<$PrismaModel> | bigint | number
|
||||||
|
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_avg?: Prisma.NestedFloatFilter<$PrismaModel>
|
||||||
|
_sum?: Prisma.NestedBigIntFilter<$PrismaModel>
|
||||||
|
_min?: Prisma.NestedBigIntFilter<$PrismaModel>
|
||||||
|
_max?: Prisma.NestedBigIntFilter<$PrismaModel>
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedIntFilter<$PrismaModel = never> = {
|
||||||
|
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
|
||||||
|
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedIntFilter<$PrismaModel> | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedFloatFilter<$PrismaModel = never> = {
|
||||||
|
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||||
|
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
|
||||||
|
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||||
|
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||||
|
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||||
|
gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedFloatFilter<$PrismaModel> | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
|
||||||
|
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||||
|
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string
|
||||||
|
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_min?: Prisma.NestedStringFilter<$PrismaModel>
|
||||||
|
_max?: Prisma.NestedStringFilter<$PrismaModel>
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = {
|
||||||
|
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
|
||||||
|
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string
|
||||||
|
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_min?: Prisma.NestedDateTimeFilter<$PrismaModel>
|
||||||
|
_max?: Prisma.NestedDateTimeFilter<$PrismaModel>
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
|
||||||
|
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
|
||||||
|
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
|
||||||
|
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
|
||||||
|
not?: Prisma.NestedIntWithAggregatesFilter<$PrismaModel> | number
|
||||||
|
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_avg?: Prisma.NestedFloatFilter<$PrismaModel>
|
||||||
|
_sum?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_min?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
_max?: Prisma.NestedIntFilter<$PrismaModel>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
||||||
|
/* eslint-disable */
|
||||||
|
// biome-ignore-all lint: generated file
|
||||||
|
// @ts-nocheck
|
||||||
|
/*
|
||||||
|
* This file exports all enum related types from the schema.
|
||||||
|
*
|
||||||
|
* 🟢 You can import this file directly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// This file is empty because there are no enums in the schema.
|
||||||
|
export {}
|
||||||
@@ -0,0 +1,206 @@
|
|||||||
|
|
||||||
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
||||||
|
/* eslint-disable */
|
||||||
|
// biome-ignore-all lint: generated file
|
||||||
|
// @ts-nocheck
|
||||||
|
/*
|
||||||
|
* WARNING: This is an internal file that is subject to change!
|
||||||
|
*
|
||||||
|
* 🛑 Under no circumstances should you import this file directly! 🛑
|
||||||
|
*
|
||||||
|
* Please import the `PrismaClient` class from the `client.ts` file instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as runtime from "@prisma/client/runtime/library"
|
||||||
|
import type * as Prisma from "./prismaNamespace"
|
||||||
|
|
||||||
|
|
||||||
|
const config: runtime.GetPrismaClientConfig = {
|
||||||
|
"generator": {
|
||||||
|
"name": "client",
|
||||||
|
"provider": {
|
||||||
|
"fromEnvVar": null,
|
||||||
|
"value": "prisma-client"
|
||||||
|
},
|
||||||
|
"output": {
|
||||||
|
"value": "/home/lucid/work/cove-gitea/no-twitter-bot-stats/src/prisma/generated",
|
||||||
|
"fromEnvVar": null
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"engineType": "library"
|
||||||
|
},
|
||||||
|
"binaryTargets": [
|
||||||
|
{
|
||||||
|
"fromEnvVar": null,
|
||||||
|
"value": "debian-openssl-3.0.x",
|
||||||
|
"native": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"previewFeatures": [],
|
||||||
|
"sourceFilePath": "/home/lucid/work/cove-gitea/no-twitter-bot-stats/src/prisma/schema.prisma",
|
||||||
|
"isCustomOutput": true
|
||||||
|
},
|
||||||
|
"relativePath": "..",
|
||||||
|
"clientVersion": "6.19.0",
|
||||||
|
"engineVersion": "2ba551f319ab1df4bc874a89965d8b3641056773",
|
||||||
|
"datasourceNames": [
|
||||||
|
"db"
|
||||||
|
],
|
||||||
|
"activeProvider": "mongodb",
|
||||||
|
"postinstall": false,
|
||||||
|
"inlineDatasources": {
|
||||||
|
"db": {
|
||||||
|
"url": {
|
||||||
|
"fromEnvVar": "DATABASE_URL",
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"generated\"\n}\n\ndatasource db {\n provider = \"mongodb\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Groups {\n telegramID BigInt @id @map(\"_id\") @db.Long\n name String\n username String @default(\"\")\n linksDeleted BigInt @default(0) @db.Long\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel TotalStats {\n createdAt DateTime @id @default(now()) @map(\"_id\")\n updatedAt DateTime @default(now()) @updatedAt\n linksDeleted BigInt @default(0) @db.Long\n commandResponses BigInt @default(0) @db.Long\n timesTriggered BigInt @default(0) @db.Long\n}\n\nmodel DailyStats {\n createdAt DateTime @id @default(now()) @map(\"_id\")\n updatedAt DateTime @default(now()) @updatedAt\n linksDeleted Int @default(0) @db.Int\n commandResponses Int @default(0) @db.Int\n timesTriggered Int @default(0) @db.Int\n}\n",
|
||||||
|
"inlineSchemaHash": "7ad3413e48bf8457ce655de4b457d4b5629952ca6a037b0fe084bc063b32d97d",
|
||||||
|
"copyEngine": true,
|
||||||
|
"runtimeDataModel": {
|
||||||
|
"models": {},
|
||||||
|
"enums": {},
|
||||||
|
"types": {}
|
||||||
|
},
|
||||||
|
"dirname": ""
|
||||||
|
}
|
||||||
|
|
||||||
|
config.runtimeDataModel = JSON.parse("{\"models\":{\"Groups\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"telegramID\",\"dbName\":\"_id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"BigInt\",\"nativeType\":[\"Long\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"username\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"linksDeleted\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"BigInt\",\"nativeType\":[\"Long\",[]],\"default\":\"0\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TotalStats\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"createdAt\",\"dbName\":\"_id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"linksDeleted\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"BigInt\",\"nativeType\":[\"Long\",[]],\"default\":\"0\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"commandResponses\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"BigInt\",\"nativeType\":[\"Long\",[]],\"default\":\"0\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timesTriggered\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"BigInt\",\"nativeType\":[\"Long\",[]],\"default\":\"0\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DailyStats\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"createdAt\",\"dbName\":\"_id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"linksDeleted\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":[\"Int\",[]],\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"commandResponses\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":[\"Int\",[]],\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timesTriggered\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":[\"Int\",[]],\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{},\"types\":{}}")
|
||||||
|
config.engineWasm = undefined
|
||||||
|
config.compilerWasm = undefined
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export type LogOptions<ClientOptions extends Prisma.PrismaClientOptions> =
|
||||||
|
'log' extends keyof ClientOptions ? ClientOptions['log'] extends Array<Prisma.LogLevel | Prisma.LogDefinition> ? Prisma.GetEvents<ClientOptions['log']> : never : never
|
||||||
|
|
||||||
|
export interface PrismaClientConstructor {
|
||||||
|
/**
|
||||||
|
* ## Prisma Client
|
||||||
|
*
|
||||||
|
* Type-safe database client for TypeScript
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* const prisma = new PrismaClient()
|
||||||
|
* // Fetch zero or more Groups
|
||||||
|
* const groups = await prisma.groups.findMany()
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
|
||||||
|
*/
|
||||||
|
|
||||||
|
new <
|
||||||
|
Options extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,
|
||||||
|
LogOpts extends LogOptions<Options> = LogOptions<Options>,
|
||||||
|
OmitOpts extends Prisma.PrismaClientOptions['omit'] = Options extends { omit: infer U } ? U : Prisma.PrismaClientOptions['omit'],
|
||||||
|
ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs
|
||||||
|
>(options?: Prisma.Subset<Options, Prisma.PrismaClientOptions> ): PrismaClient<LogOpts, OmitOpts, ExtArgs>
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ## Prisma Client
|
||||||
|
*
|
||||||
|
* Type-safe database client for TypeScript
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* const prisma = new PrismaClient()
|
||||||
|
* // Fetch zero or more Groups
|
||||||
|
* const groups = await prisma.groups.findMany()
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface PrismaClient<
|
||||||
|
in LogOpts extends Prisma.LogLevel = never,
|
||||||
|
in out OmitOpts extends Prisma.PrismaClientOptions['omit'] = Prisma.PrismaClientOptions['omit'],
|
||||||
|
in out ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs
|
||||||
|
> {
|
||||||
|
[K: symbol]: { types: Prisma.TypeMap<ExtArgs>['other'] }
|
||||||
|
|
||||||
|
$on<V extends LogOpts>(eventType: V, callback: (event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent) => void): PrismaClient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect with the database
|
||||||
|
*/
|
||||||
|
$connect(): runtime.Types.Utils.JsPromise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnect from the database
|
||||||
|
*/
|
||||||
|
$disconnect(): runtime.Types.Utils.JsPromise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole.
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* const [george, bob, alice] = await prisma.$transaction([
|
||||||
|
* prisma.user.create({ data: { name: 'George' } }),
|
||||||
|
* prisma.user.create({ data: { name: 'Bob' } }),
|
||||||
|
* prisma.user.create({ data: { name: 'Alice' } }),
|
||||||
|
* ])
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions).
|
||||||
|
*/
|
||||||
|
$transaction<P extends Prisma.PrismaPromise<any>[]>(arg: [...P]): runtime.Types.Utils.JsPromise<runtime.Types.Utils.UnwrapTuple<P>>
|
||||||
|
|
||||||
|
$transaction<R>(fn: (prisma: Omit<PrismaClient, runtime.ITXClientDenyList>) => runtime.Types.Utils.JsPromise<R>, options?: { maxWait?: number, timeout?: number }): runtime.Types.Utils.JsPromise<R>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes a raw MongoDB command and returns the result of it.
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* const user = await prisma.$runCommandRaw({
|
||||||
|
* aggregate: 'User',
|
||||||
|
* pipeline: [{ $match: { name: 'Bob' } }, { $project: { email: true, _id: false } }],
|
||||||
|
* explain: false,
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
|
||||||
|
*/
|
||||||
|
$runCommandRaw(command: Prisma.InputJsonObject): Prisma.PrismaPromise<Prisma.JsonObject>
|
||||||
|
|
||||||
|
$extends: runtime.Types.Extensions.ExtendsHook<"extends", Prisma.TypeMapCb<OmitOpts>, ExtArgs, runtime.Types.Utils.Call<Prisma.TypeMapCb<OmitOpts>, {
|
||||||
|
extArgs: ExtArgs
|
||||||
|
}>>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `prisma.groups`: Exposes CRUD operations for the **Groups** model.
|
||||||
|
* Example usage:
|
||||||
|
* ```ts
|
||||||
|
* // Fetch zero or more Groups
|
||||||
|
* const groups = await prisma.groups.findMany()
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
get groups(): Prisma.GroupsDelegate<ExtArgs, { omit: OmitOpts }>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `prisma.totalStats`: Exposes CRUD operations for the **TotalStats** model.
|
||||||
|
* Example usage:
|
||||||
|
* ```ts
|
||||||
|
* // Fetch zero or more TotalStats
|
||||||
|
* const totalStats = await prisma.totalStats.findMany()
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
get totalStats(): Prisma.TotalStatsDelegate<ExtArgs, { omit: OmitOpts }>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `prisma.dailyStats`: Exposes CRUD operations for the **DailyStats** model.
|
||||||
|
* Example usage:
|
||||||
|
* ```ts
|
||||||
|
* // Fetch zero or more DailyStats
|
||||||
|
* const dailyStats = await prisma.dailyStats.findMany()
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
get dailyStats(): Prisma.DailyStatsDelegate<ExtArgs, { omit: OmitOpts }>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPrismaClientClass(dirname: string): PrismaClientConstructor {
|
||||||
|
config.dirname = dirname
|
||||||
|
return runtime.getPrismaClient(config) as unknown as PrismaClientConstructor
|
||||||
|
}
|
||||||
@@ -0,0 +1,930 @@
|
|||||||
|
|
||||||
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
||||||
|
/* eslint-disable */
|
||||||
|
// biome-ignore-all lint: generated file
|
||||||
|
// @ts-nocheck
|
||||||
|
/*
|
||||||
|
* WARNING: This is an internal file that is subject to change!
|
||||||
|
*
|
||||||
|
* 🛑 Under no circumstances should you import this file directly! 🛑
|
||||||
|
*
|
||||||
|
* All exports from this file are wrapped under a `Prisma` namespace object in the client.ts file.
|
||||||
|
* While this enables partial backward compatibility, it is not part of the stable public API.
|
||||||
|
*
|
||||||
|
* If you are looking for your Models, Enums, and Input Types, please import them from the respective
|
||||||
|
* model files in the `model` directory!
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as runtime from "@prisma/client/runtime/library"
|
||||||
|
import type * as Prisma from "../models"
|
||||||
|
import { type PrismaClient } from "./class"
|
||||||
|
|
||||||
|
export type * from '../models'
|
||||||
|
|
||||||
|
export type DMMF = typeof runtime.DMMF
|
||||||
|
|
||||||
|
export type PrismaPromise<T> = runtime.Types.Public.PrismaPromise<T>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prisma Errors
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError
|
||||||
|
export type PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError
|
||||||
|
|
||||||
|
export const PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError
|
||||||
|
export type PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError
|
||||||
|
|
||||||
|
export const PrismaClientRustPanicError = runtime.PrismaClientRustPanicError
|
||||||
|
export type PrismaClientRustPanicError = runtime.PrismaClientRustPanicError
|
||||||
|
|
||||||
|
export const PrismaClientInitializationError = runtime.PrismaClientInitializationError
|
||||||
|
export type PrismaClientInitializationError = runtime.PrismaClientInitializationError
|
||||||
|
|
||||||
|
export const PrismaClientValidationError = runtime.PrismaClientValidationError
|
||||||
|
export type PrismaClientValidationError = runtime.PrismaClientValidationError
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-export of sql-template-tag
|
||||||
|
*/
|
||||||
|
export const sql = runtime.sqltag
|
||||||
|
export const empty = runtime.empty
|
||||||
|
export const join = runtime.join
|
||||||
|
export const raw = runtime.raw
|
||||||
|
export const Sql = runtime.Sql
|
||||||
|
export type Sql = runtime.Sql
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decimal.js
|
||||||
|
*/
|
||||||
|
export const Decimal = runtime.Decimal
|
||||||
|
export type Decimal = runtime.Decimal
|
||||||
|
|
||||||
|
export type DecimalJsLike = runtime.DecimalJsLike
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metrics
|
||||||
|
*/
|
||||||
|
export type Metrics = runtime.Metrics
|
||||||
|
export type Metric<T> = runtime.Metric<T>
|
||||||
|
export type MetricHistogram = runtime.MetricHistogram
|
||||||
|
export type MetricHistogramBucket = runtime.MetricHistogramBucket
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extensions
|
||||||
|
*/
|
||||||
|
export type Extension = runtime.Types.Extensions.UserArgs
|
||||||
|
export const getExtensionContext = runtime.Extensions.getExtensionContext
|
||||||
|
export type Args<T, F extends runtime.Operation> = runtime.Types.Public.Args<T, F>
|
||||||
|
export type Payload<T, F extends runtime.Operation = never> = runtime.Types.Public.Payload<T, F>
|
||||||
|
export type Result<T, A, F extends runtime.Operation> = runtime.Types.Public.Result<T, A, F>
|
||||||
|
export type Exact<A, W> = runtime.Types.Public.Exact<A, W>
|
||||||
|
|
||||||
|
export type PrismaVersion = {
|
||||||
|
client: string
|
||||||
|
engine: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prisma Client JS version: 6.19.0
|
||||||
|
* Query Engine version: 2ba551f319ab1df4bc874a89965d8b3641056773
|
||||||
|
*/
|
||||||
|
export const prismaVersion: PrismaVersion = {
|
||||||
|
client: "6.19.0",
|
||||||
|
engine: "2ba551f319ab1df4bc874a89965d8b3641056773"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility Types
|
||||||
|
*/
|
||||||
|
|
||||||
|
export type Bytes = runtime.Bytes
|
||||||
|
export type JsonObject = runtime.JsonObject
|
||||||
|
export type JsonArray = runtime.JsonArray
|
||||||
|
export type JsonValue = runtime.JsonValue
|
||||||
|
export type InputJsonObject = runtime.InputJsonObject
|
||||||
|
export type InputJsonArray = runtime.InputJsonArray
|
||||||
|
export type InputJsonValue = runtime.InputJsonValue
|
||||||
|
|
||||||
|
|
||||||
|
export const NullTypes = {
|
||||||
|
DbNull: runtime.objectEnumValues.classes.DbNull as (new (secret: never) => typeof runtime.objectEnumValues.instances.DbNull),
|
||||||
|
JsonNull: runtime.objectEnumValues.classes.JsonNull as (new (secret: never) => typeof runtime.objectEnumValues.instances.JsonNull),
|
||||||
|
AnyNull: runtime.objectEnumValues.classes.AnyNull as (new (secret: never) => typeof runtime.objectEnumValues.instances.AnyNull),
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Helper for filtering JSON entries that have `null` on the database (empty on the db)
|
||||||
|
*
|
||||||
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
||||||
|
*/
|
||||||
|
export const DbNull = runtime.objectEnumValues.instances.DbNull
|
||||||
|
/**
|
||||||
|
* Helper for filtering JSON entries that have JSON `null` values (not empty on the db)
|
||||||
|
*
|
||||||
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
||||||
|
*/
|
||||||
|
export const JsonNull = runtime.objectEnumValues.instances.JsonNull
|
||||||
|
/**
|
||||||
|
* Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`
|
||||||
|
*
|
||||||
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
||||||
|
*/
|
||||||
|
export const AnyNull = runtime.objectEnumValues.instances.AnyNull
|
||||||
|
|
||||||
|
|
||||||
|
type SelectAndInclude = {
|
||||||
|
select: any
|
||||||
|
include: any
|
||||||
|
}
|
||||||
|
|
||||||
|
type SelectAndOmit = {
|
||||||
|
select: any
|
||||||
|
omit: any
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* From T, pick a set of properties whose keys are in the union K
|
||||||
|
*/
|
||||||
|
type Prisma__Pick<T, K extends keyof T> = {
|
||||||
|
[P in K]: T[P];
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Enumerable<T> = T | Array<T>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subset
|
||||||
|
* @desc From `T` pick properties that exist in `U`. Simple version of Intersection
|
||||||
|
*/
|
||||||
|
export type Subset<T, U> = {
|
||||||
|
[key in keyof T]: key extends keyof U ? T[key] : never;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SelectSubset
|
||||||
|
* @desc From `T` pick properties that exist in `U`. Simple version of Intersection.
|
||||||
|
* Additionally, it validates, if both select and include are present. If the case, it errors.
|
||||||
|
*/
|
||||||
|
export type SelectSubset<T, U> = {
|
||||||
|
[key in keyof T]: key extends keyof U ? T[key] : never
|
||||||
|
} &
|
||||||
|
(T extends SelectAndInclude
|
||||||
|
? 'Please either choose `select` or `include`.'
|
||||||
|
: T extends SelectAndOmit
|
||||||
|
? 'Please either choose `select` or `omit`.'
|
||||||
|
: {})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subset + Intersection
|
||||||
|
* @desc From `T` pick properties that exist in `U` and intersect `K`
|
||||||
|
*/
|
||||||
|
export type SubsetIntersection<T, U, K> = {
|
||||||
|
[key in keyof T]: key extends keyof U ? T[key] : never
|
||||||
|
} &
|
||||||
|
K
|
||||||
|
|
||||||
|
type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XOR is needed to have a real mutually exclusive union type
|
||||||
|
* https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types
|
||||||
|
*/
|
||||||
|
export type XOR<T, U> =
|
||||||
|
T extends object ?
|
||||||
|
U extends object ?
|
||||||
|
(Without<T, U> & U) | (Without<U, T> & T)
|
||||||
|
: U : T
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is T a Record?
|
||||||
|
*/
|
||||||
|
type IsObject<T extends any> = T extends Array<any>
|
||||||
|
? False
|
||||||
|
: T extends Date
|
||||||
|
? False
|
||||||
|
: T extends Uint8Array
|
||||||
|
? False
|
||||||
|
: T extends BigInt
|
||||||
|
? False
|
||||||
|
: T extends object
|
||||||
|
? True
|
||||||
|
: False
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If it's T[], return T
|
||||||
|
*/
|
||||||
|
export type UnEnumerate<T extends unknown> = T extends Array<infer U> ? U : T
|
||||||
|
|
||||||
|
/**
|
||||||
|
* From ts-toolbelt
|
||||||
|
*/
|
||||||
|
|
||||||
|
type __Either<O extends object, K extends Key> = Omit<O, K> &
|
||||||
|
{
|
||||||
|
// Merge all but K
|
||||||
|
[P in K]: Prisma__Pick<O, P & keyof O> // With K possibilities
|
||||||
|
}[K]
|
||||||
|
|
||||||
|
type EitherStrict<O extends object, K extends Key> = Strict<__Either<O, K>>
|
||||||
|
|
||||||
|
type EitherLoose<O extends object, K extends Key> = ComputeRaw<__Either<O, K>>
|
||||||
|
|
||||||
|
type _Either<
|
||||||
|
O extends object,
|
||||||
|
K extends Key,
|
||||||
|
strict extends Boolean
|
||||||
|
> = {
|
||||||
|
1: EitherStrict<O, K>
|
||||||
|
0: EitherLoose<O, K>
|
||||||
|
}[strict]
|
||||||
|
|
||||||
|
export type Either<
|
||||||
|
O extends object,
|
||||||
|
K extends Key,
|
||||||
|
strict extends Boolean = 1
|
||||||
|
> = O extends unknown ? _Either<O, K, strict> : never
|
||||||
|
|
||||||
|
export type Union = any
|
||||||
|
|
||||||
|
export type PatchUndefined<O extends object, O1 extends object> = {
|
||||||
|
[K in keyof O]: O[K] extends undefined ? At<O1, K> : O[K]
|
||||||
|
} & {}
|
||||||
|
|
||||||
|
/** Helper Types for "Merge" **/
|
||||||
|
export type IntersectOf<U extends Union> = (
|
||||||
|
U extends unknown ? (k: U) => void : never
|
||||||
|
) extends (k: infer I) => void
|
||||||
|
? I
|
||||||
|
: never
|
||||||
|
|
||||||
|
export type Overwrite<O extends object, O1 extends object> = {
|
||||||
|
[K in keyof O]: K extends keyof O1 ? O1[K] : O[K];
|
||||||
|
} & {};
|
||||||
|
|
||||||
|
type _Merge<U extends object> = IntersectOf<Overwrite<U, {
|
||||||
|
[K in keyof U]-?: At<U, K>;
|
||||||
|
}>>;
|
||||||
|
|
||||||
|
type Key = string | number | symbol;
|
||||||
|
type AtStrict<O extends object, K extends Key> = O[K & keyof O];
|
||||||
|
type AtLoose<O extends object, K extends Key> = O extends unknown ? AtStrict<O, K> : never;
|
||||||
|
export type At<O extends object, K extends Key, strict extends Boolean = 1> = {
|
||||||
|
1: AtStrict<O, K>;
|
||||||
|
0: AtLoose<O, K>;
|
||||||
|
}[strict];
|
||||||
|
|
||||||
|
export type ComputeRaw<A extends any> = A extends Function ? A : {
|
||||||
|
[K in keyof A]: A[K];
|
||||||
|
} & {};
|
||||||
|
|
||||||
|
export type OptionalFlat<O> = {
|
||||||
|
[K in keyof O]?: O[K];
|
||||||
|
} & {};
|
||||||
|
|
||||||
|
type _Record<K extends keyof any, T> = {
|
||||||
|
[P in K]: T;
|
||||||
|
};
|
||||||
|
|
||||||
|
// cause typescript not to expand types and preserve names
|
||||||
|
type NoExpand<T> = T extends unknown ? T : never;
|
||||||
|
|
||||||
|
// this type assumes the passed object is entirely optional
|
||||||
|
export type AtLeast<O extends object, K extends string> = NoExpand<
|
||||||
|
O extends unknown
|
||||||
|
? | (K extends keyof O ? { [P in K]: O[P] } & O : O)
|
||||||
|
| {[P in keyof O as P extends K ? P : never]-?: O[P]} & O
|
||||||
|
: never>;
|
||||||
|
|
||||||
|
type _Strict<U, _U = U> = U extends unknown ? U & OptionalFlat<_Record<Exclude<Keys<_U>, keyof U>, never>> : never;
|
||||||
|
|
||||||
|
export type Strict<U extends object> = ComputeRaw<_Strict<U>>;
|
||||||
|
/** End Helper Types for "Merge" **/
|
||||||
|
|
||||||
|
export type Merge<U extends object> = ComputeRaw<_Merge<Strict<U>>>;
|
||||||
|
|
||||||
|
export type Boolean = True | False
|
||||||
|
|
||||||
|
export type True = 1
|
||||||
|
|
||||||
|
export type False = 0
|
||||||
|
|
||||||
|
export type Not<B extends Boolean> = {
|
||||||
|
0: 1
|
||||||
|
1: 0
|
||||||
|
}[B]
|
||||||
|
|
||||||
|
export type Extends<A1 extends any, A2 extends any> = [A1] extends [never]
|
||||||
|
? 0 // anything `never` is false
|
||||||
|
: A1 extends A2
|
||||||
|
? 1
|
||||||
|
: 0
|
||||||
|
|
||||||
|
export type Has<U extends Union, U1 extends Union> = Not<
|
||||||
|
Extends<Exclude<U1, U>, U1>
|
||||||
|
>
|
||||||
|
|
||||||
|
export type Or<B1 extends Boolean, B2 extends Boolean> = {
|
||||||
|
0: {
|
||||||
|
0: 0
|
||||||
|
1: 1
|
||||||
|
}
|
||||||
|
1: {
|
||||||
|
0: 1
|
||||||
|
1: 1
|
||||||
|
}
|
||||||
|
}[B1][B2]
|
||||||
|
|
||||||
|
export type Keys<U extends Union> = U extends unknown ? keyof U : never
|
||||||
|
|
||||||
|
export type GetScalarType<T, O> = O extends object ? {
|
||||||
|
[P in keyof T]: P extends keyof O
|
||||||
|
? O[P]
|
||||||
|
: never
|
||||||
|
} : never
|
||||||
|
|
||||||
|
type FieldPaths<
|
||||||
|
T,
|
||||||
|
U = Omit<T, '_avg' | '_sum' | '_count' | '_min' | '_max'>
|
||||||
|
> = IsObject<T> extends True ? U : T
|
||||||
|
|
||||||
|
export type GetHavingFields<T> = {
|
||||||
|
[K in keyof T]: Or<
|
||||||
|
Or<Extends<'OR', K>, Extends<'AND', K>>,
|
||||||
|
Extends<'NOT', K>
|
||||||
|
> extends True
|
||||||
|
? // infer is only needed to not hit TS limit
|
||||||
|
// based on the brilliant idea of Pierre-Antoine Mills
|
||||||
|
// https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437
|
||||||
|
T[K] extends infer TK
|
||||||
|
? GetHavingFields<UnEnumerate<TK> extends object ? Merge<UnEnumerate<TK>> : never>
|
||||||
|
: never
|
||||||
|
: {} extends FieldPaths<T[K]>
|
||||||
|
? never
|
||||||
|
: K
|
||||||
|
}[keyof T]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert tuple to union
|
||||||
|
*/
|
||||||
|
type _TupleToUnion<T> = T extends (infer E)[] ? E : never
|
||||||
|
type TupleToUnion<K extends readonly any[]> = _TupleToUnion<K>
|
||||||
|
export type MaybeTupleToUnion<T> = T extends any[] ? TupleToUnion<T> : T
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Like `Pick`, but additionally can also accept an array of keys
|
||||||
|
*/
|
||||||
|
export type PickEnumerable<T, K extends Enumerable<keyof T> | keyof T> = Prisma__Pick<T, MaybeTupleToUnion<K>>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exclude all keys with underscores
|
||||||
|
*/
|
||||||
|
export type ExcludeUnderscoreKeys<T extends string> = T extends `_${string}` ? never : T
|
||||||
|
|
||||||
|
|
||||||
|
export type FieldRef<Model, FieldType> = runtime.FieldRef<Model, FieldType>
|
||||||
|
|
||||||
|
type FieldRefInputType<Model, FieldType> = Model extends never ? never : FieldRef<Model, FieldType>
|
||||||
|
|
||||||
|
|
||||||
|
export const ModelName = {
|
||||||
|
Groups: 'Groups',
|
||||||
|
TotalStats: 'TotalStats',
|
||||||
|
DailyStats: 'DailyStats'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export interface TypeMapCb<GlobalOmitOptions = {}> extends runtime.Types.Utils.Fn<{extArgs: runtime.Types.Extensions.InternalArgs }, runtime.Types.Utils.Record<string, any>> {
|
||||||
|
returns: TypeMap<this['params']['extArgs'], GlobalOmitOptions>
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> = {
|
||||||
|
globalOmitOptions: {
|
||||||
|
omit: GlobalOmitOptions
|
||||||
|
}
|
||||||
|
meta: {
|
||||||
|
modelProps: "groups" | "totalStats" | "dailyStats"
|
||||||
|
txIsolationLevel: never
|
||||||
|
}
|
||||||
|
model: {
|
||||||
|
Groups: {
|
||||||
|
payload: Prisma.$GroupsPayload<ExtArgs>
|
||||||
|
fields: Prisma.GroupsFieldRefs
|
||||||
|
operations: {
|
||||||
|
findUnique: {
|
||||||
|
args: Prisma.GroupsFindUniqueArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload> | null
|
||||||
|
}
|
||||||
|
findUniqueOrThrow: {
|
||||||
|
args: Prisma.GroupsFindUniqueOrThrowArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload>
|
||||||
|
}
|
||||||
|
findFirst: {
|
||||||
|
args: Prisma.GroupsFindFirstArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload> | null
|
||||||
|
}
|
||||||
|
findFirstOrThrow: {
|
||||||
|
args: Prisma.GroupsFindFirstOrThrowArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload>
|
||||||
|
}
|
||||||
|
findMany: {
|
||||||
|
args: Prisma.GroupsFindManyArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload>[]
|
||||||
|
}
|
||||||
|
create: {
|
||||||
|
args: Prisma.GroupsCreateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload>
|
||||||
|
}
|
||||||
|
createMany: {
|
||||||
|
args: Prisma.GroupsCreateManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
delete: {
|
||||||
|
args: Prisma.GroupsDeleteArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload>
|
||||||
|
}
|
||||||
|
update: {
|
||||||
|
args: Prisma.GroupsUpdateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload>
|
||||||
|
}
|
||||||
|
deleteMany: {
|
||||||
|
args: Prisma.GroupsDeleteManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
updateMany: {
|
||||||
|
args: Prisma.GroupsUpdateManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
upsert: {
|
||||||
|
args: Prisma.GroupsUpsertArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$GroupsPayload>
|
||||||
|
}
|
||||||
|
aggregate: {
|
||||||
|
args: Prisma.GroupsAggregateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.AggregateGroups>
|
||||||
|
}
|
||||||
|
groupBy: {
|
||||||
|
args: Prisma.GroupsGroupByArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.GroupsGroupByOutputType>[]
|
||||||
|
}
|
||||||
|
findRaw: {
|
||||||
|
args: Prisma.GroupsFindRawArgs<ExtArgs>
|
||||||
|
result: Prisma.JsonObject
|
||||||
|
}
|
||||||
|
aggregateRaw: {
|
||||||
|
args: Prisma.GroupsAggregateRawArgs<ExtArgs>
|
||||||
|
result: Prisma.JsonObject
|
||||||
|
}
|
||||||
|
count: {
|
||||||
|
args: Prisma.GroupsCountArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.GroupsCountAggregateOutputType> | number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TotalStats: {
|
||||||
|
payload: Prisma.$TotalStatsPayload<ExtArgs>
|
||||||
|
fields: Prisma.TotalStatsFieldRefs
|
||||||
|
operations: {
|
||||||
|
findUnique: {
|
||||||
|
args: Prisma.TotalStatsFindUniqueArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload> | null
|
||||||
|
}
|
||||||
|
findUniqueOrThrow: {
|
||||||
|
args: Prisma.TotalStatsFindUniqueOrThrowArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload>
|
||||||
|
}
|
||||||
|
findFirst: {
|
||||||
|
args: Prisma.TotalStatsFindFirstArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload> | null
|
||||||
|
}
|
||||||
|
findFirstOrThrow: {
|
||||||
|
args: Prisma.TotalStatsFindFirstOrThrowArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload>
|
||||||
|
}
|
||||||
|
findMany: {
|
||||||
|
args: Prisma.TotalStatsFindManyArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload>[]
|
||||||
|
}
|
||||||
|
create: {
|
||||||
|
args: Prisma.TotalStatsCreateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload>
|
||||||
|
}
|
||||||
|
createMany: {
|
||||||
|
args: Prisma.TotalStatsCreateManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
delete: {
|
||||||
|
args: Prisma.TotalStatsDeleteArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload>
|
||||||
|
}
|
||||||
|
update: {
|
||||||
|
args: Prisma.TotalStatsUpdateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload>
|
||||||
|
}
|
||||||
|
deleteMany: {
|
||||||
|
args: Prisma.TotalStatsDeleteManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
updateMany: {
|
||||||
|
args: Prisma.TotalStatsUpdateManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
upsert: {
|
||||||
|
args: Prisma.TotalStatsUpsertArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$TotalStatsPayload>
|
||||||
|
}
|
||||||
|
aggregate: {
|
||||||
|
args: Prisma.TotalStatsAggregateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.AggregateTotalStats>
|
||||||
|
}
|
||||||
|
groupBy: {
|
||||||
|
args: Prisma.TotalStatsGroupByArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.TotalStatsGroupByOutputType>[]
|
||||||
|
}
|
||||||
|
findRaw: {
|
||||||
|
args: Prisma.TotalStatsFindRawArgs<ExtArgs>
|
||||||
|
result: Prisma.JsonObject
|
||||||
|
}
|
||||||
|
aggregateRaw: {
|
||||||
|
args: Prisma.TotalStatsAggregateRawArgs<ExtArgs>
|
||||||
|
result: Prisma.JsonObject
|
||||||
|
}
|
||||||
|
count: {
|
||||||
|
args: Prisma.TotalStatsCountArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.TotalStatsCountAggregateOutputType> | number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DailyStats: {
|
||||||
|
payload: Prisma.$DailyStatsPayload<ExtArgs>
|
||||||
|
fields: Prisma.DailyStatsFieldRefs
|
||||||
|
operations: {
|
||||||
|
findUnique: {
|
||||||
|
args: Prisma.DailyStatsFindUniqueArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload> | null
|
||||||
|
}
|
||||||
|
findUniqueOrThrow: {
|
||||||
|
args: Prisma.DailyStatsFindUniqueOrThrowArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload>
|
||||||
|
}
|
||||||
|
findFirst: {
|
||||||
|
args: Prisma.DailyStatsFindFirstArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload> | null
|
||||||
|
}
|
||||||
|
findFirstOrThrow: {
|
||||||
|
args: Prisma.DailyStatsFindFirstOrThrowArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload>
|
||||||
|
}
|
||||||
|
findMany: {
|
||||||
|
args: Prisma.DailyStatsFindManyArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload>[]
|
||||||
|
}
|
||||||
|
create: {
|
||||||
|
args: Prisma.DailyStatsCreateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload>
|
||||||
|
}
|
||||||
|
createMany: {
|
||||||
|
args: Prisma.DailyStatsCreateManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
delete: {
|
||||||
|
args: Prisma.DailyStatsDeleteArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload>
|
||||||
|
}
|
||||||
|
update: {
|
||||||
|
args: Prisma.DailyStatsUpdateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload>
|
||||||
|
}
|
||||||
|
deleteMany: {
|
||||||
|
args: Prisma.DailyStatsDeleteManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
updateMany: {
|
||||||
|
args: Prisma.DailyStatsUpdateManyArgs<ExtArgs>
|
||||||
|
result: BatchPayload
|
||||||
|
}
|
||||||
|
upsert: {
|
||||||
|
args: Prisma.DailyStatsUpsertArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.PayloadToResult<Prisma.$DailyStatsPayload>
|
||||||
|
}
|
||||||
|
aggregate: {
|
||||||
|
args: Prisma.DailyStatsAggregateArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.AggregateDailyStats>
|
||||||
|
}
|
||||||
|
groupBy: {
|
||||||
|
args: Prisma.DailyStatsGroupByArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.DailyStatsGroupByOutputType>[]
|
||||||
|
}
|
||||||
|
findRaw: {
|
||||||
|
args: Prisma.DailyStatsFindRawArgs<ExtArgs>
|
||||||
|
result: Prisma.JsonObject
|
||||||
|
}
|
||||||
|
aggregateRaw: {
|
||||||
|
args: Prisma.DailyStatsAggregateRawArgs<ExtArgs>
|
||||||
|
result: Prisma.JsonObject
|
||||||
|
}
|
||||||
|
count: {
|
||||||
|
args: Prisma.DailyStatsCountArgs<ExtArgs>
|
||||||
|
result: runtime.Types.Utils.Optional<Prisma.DailyStatsCountAggregateOutputType> | number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} & {
|
||||||
|
other: {
|
||||||
|
payload: any
|
||||||
|
operations: {
|
||||||
|
$runCommandRaw: {
|
||||||
|
args: Prisma.InputJsonObject,
|
||||||
|
result: JsonObject
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enums
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const GroupsScalarFieldEnum = {
|
||||||
|
telegramID: 'telegramID',
|
||||||
|
name: 'name',
|
||||||
|
username: 'username',
|
||||||
|
linksDeleted: 'linksDeleted',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type GroupsScalarFieldEnum = (typeof GroupsScalarFieldEnum)[keyof typeof GroupsScalarFieldEnum]
|
||||||
|
|
||||||
|
|
||||||
|
export const TotalStatsScalarFieldEnum = {
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt',
|
||||||
|
linksDeleted: 'linksDeleted',
|
||||||
|
commandResponses: 'commandResponses',
|
||||||
|
timesTriggered: 'timesTriggered'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type TotalStatsScalarFieldEnum = (typeof TotalStatsScalarFieldEnum)[keyof typeof TotalStatsScalarFieldEnum]
|
||||||
|
|
||||||
|
|
||||||
|
export const DailyStatsScalarFieldEnum = {
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt',
|
||||||
|
linksDeleted: 'linksDeleted',
|
||||||
|
commandResponses: 'commandResponses',
|
||||||
|
timesTriggered: 'timesTriggered'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type DailyStatsScalarFieldEnum = (typeof DailyStatsScalarFieldEnum)[keyof typeof DailyStatsScalarFieldEnum]
|
||||||
|
|
||||||
|
|
||||||
|
export const SortOrder = {
|
||||||
|
asc: 'asc',
|
||||||
|
desc: 'desc'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]
|
||||||
|
|
||||||
|
|
||||||
|
export const QueryMode = {
|
||||||
|
default: 'default',
|
||||||
|
insensitive: 'insensitive'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Field references
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'BigInt'
|
||||||
|
*/
|
||||||
|
export type BigIntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'BigInt'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'BigInt[]'
|
||||||
|
*/
|
||||||
|
export type ListBigIntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'BigInt[]'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'String'
|
||||||
|
*/
|
||||||
|
export type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'String[]'
|
||||||
|
*/
|
||||||
|
export type ListStringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String[]'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'DateTime'
|
||||||
|
*/
|
||||||
|
export type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DateTime'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'DateTime[]'
|
||||||
|
*/
|
||||||
|
export type ListDateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DateTime[]'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'Int'
|
||||||
|
*/
|
||||||
|
export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'Int[]'
|
||||||
|
*/
|
||||||
|
export type ListIntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int[]'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'Float'
|
||||||
|
*/
|
||||||
|
export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to a field of type 'Float[]'
|
||||||
|
*/
|
||||||
|
export type ListFloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float[]'>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Batch Payload for updateMany & deleteMany & createMany
|
||||||
|
*/
|
||||||
|
export type BatchPayload = {
|
||||||
|
count: number
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export type Datasource = {
|
||||||
|
url?: string
|
||||||
|
}
|
||||||
|
export type Datasources = {
|
||||||
|
db?: Datasource
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defineExtension = runtime.Extensions.defineExtension as unknown as runtime.Types.Extensions.ExtendsHook<"define", TypeMapCb, runtime.Types.Extensions.DefaultArgs>
|
||||||
|
export type DefaultPrismaClient = PrismaClient
|
||||||
|
export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'
|
||||||
|
export interface PrismaClientOptions {
|
||||||
|
/**
|
||||||
|
* Overwrites the datasource url from your schema.prisma file
|
||||||
|
*/
|
||||||
|
datasources?: Datasources
|
||||||
|
/**
|
||||||
|
* Overwrites the datasource url from your schema.prisma file
|
||||||
|
*/
|
||||||
|
datasourceUrl?: string
|
||||||
|
/**
|
||||||
|
* @default "colorless"
|
||||||
|
*/
|
||||||
|
errorFormat?: ErrorFormat
|
||||||
|
/**
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* // Shorthand for `emit: 'stdout'`
|
||||||
|
* log: ['query', 'info', 'warn', 'error']
|
||||||
|
*
|
||||||
|
* // Emit as events only
|
||||||
|
* log: [
|
||||||
|
* { emit: 'event', level: 'query' },
|
||||||
|
* { emit: 'event', level: 'info' },
|
||||||
|
* { emit: 'event', level: 'warn' }
|
||||||
|
* { emit: 'event', level: 'error' }
|
||||||
|
* ]
|
||||||
|
*
|
||||||
|
* / Emit as events and log to stdout
|
||||||
|
* og: [
|
||||||
|
* { emit: 'stdout', level: 'query' },
|
||||||
|
* { emit: 'stdout', level: 'info' },
|
||||||
|
* { emit: 'stdout', level: 'warn' }
|
||||||
|
* { emit: 'stdout', level: 'error' }
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/logging#the-log-option).
|
||||||
|
*/
|
||||||
|
log?: (LogLevel | LogDefinition)[]
|
||||||
|
/**
|
||||||
|
* The default values for transactionOptions
|
||||||
|
* maxWait ?= 2000
|
||||||
|
* timeout ?= 5000
|
||||||
|
*/
|
||||||
|
transactionOptions?: {
|
||||||
|
maxWait?: number
|
||||||
|
timeout?: number
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-planetscale`
|
||||||
|
*/
|
||||||
|
adapter?: runtime.SqlDriverAdapterFactory | null
|
||||||
|
/**
|
||||||
|
* Global configuration for omitting model fields by default.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* const prisma = new PrismaClient({
|
||||||
|
* omit: {
|
||||||
|
* user: {
|
||||||
|
* password: true
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
omit?: GlobalOmitConfig
|
||||||
|
}
|
||||||
|
export type GlobalOmitConfig = {
|
||||||
|
groups?: Prisma.GroupsOmit
|
||||||
|
totalStats?: Prisma.TotalStatsOmit
|
||||||
|
dailyStats?: Prisma.DailyStatsOmit
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Types for Logging */
|
||||||
|
export type LogLevel = 'info' | 'query' | 'warn' | 'error'
|
||||||
|
export type LogDefinition = {
|
||||||
|
level: LogLevel
|
||||||
|
emit: 'stdout' | 'event'
|
||||||
|
}
|
||||||
|
|
||||||
|
export type CheckIsLogLevel<T> = T extends LogLevel ? T : never;
|
||||||
|
|
||||||
|
export type GetLogType<T> = CheckIsLogLevel<
|
||||||
|
T extends LogDefinition ? T['level'] : T
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type GetEvents<T extends any[]> = T extends Array<LogLevel | LogDefinition>
|
||||||
|
? GetLogType<T[number]>
|
||||||
|
: never;
|
||||||
|
|
||||||
|
export type QueryEvent = {
|
||||||
|
timestamp: Date
|
||||||
|
query: string
|
||||||
|
params: string
|
||||||
|
duration: number
|
||||||
|
target: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type LogEvent = {
|
||||||
|
timestamp: Date
|
||||||
|
message: string
|
||||||
|
target: string
|
||||||
|
}
|
||||||
|
/* End Types for Logging */
|
||||||
|
|
||||||
|
|
||||||
|
export type PrismaAction =
|
||||||
|
| 'findUnique'
|
||||||
|
| 'findUniqueOrThrow'
|
||||||
|
| 'findMany'
|
||||||
|
| 'findFirst'
|
||||||
|
| 'findFirstOrThrow'
|
||||||
|
| 'create'
|
||||||
|
| 'createMany'
|
||||||
|
| 'createManyAndReturn'
|
||||||
|
| 'update'
|
||||||
|
| 'updateMany'
|
||||||
|
| 'updateManyAndReturn'
|
||||||
|
| 'upsert'
|
||||||
|
| 'delete'
|
||||||
|
| 'deleteMany'
|
||||||
|
| 'executeRaw'
|
||||||
|
| 'queryRaw'
|
||||||
|
| 'aggregate'
|
||||||
|
| 'count'
|
||||||
|
| 'runCommandRaw'
|
||||||
|
| 'findRaw'
|
||||||
|
| 'groupBy'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `PrismaClient` proxy available in interactive transactions.
|
||||||
|
*/
|
||||||
|
export type TransactionClient = Omit<DefaultPrismaClient, runtime.ITXClientDenyList>
|
||||||
|
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
|
||||||
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
||||||
|
/* eslint-disable */
|
||||||
|
// biome-ignore-all lint: generated file
|
||||||
|
// @ts-nocheck
|
||||||
|
/*
|
||||||
|
* WARNING: This is an internal file that is subject to change!
|
||||||
|
*
|
||||||
|
* 🛑 Under no circumstances should you import this file directly! 🛑
|
||||||
|
*
|
||||||
|
* All exports from this file are wrapped under a `Prisma` namespace object in the browser.ts file.
|
||||||
|
* While this enables partial backward compatibility, it is not part of the stable public API.
|
||||||
|
*
|
||||||
|
* If you are looking for your Models, Enums, and Input Types, please import them from the respective
|
||||||
|
* model files in the `model` directory!
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as runtime from "@prisma/client/runtime/index-browser"
|
||||||
|
|
||||||
|
export type * from '../models'
|
||||||
|
export type * from './prismaNamespace'
|
||||||
|
|
||||||
|
export const Decimal = runtime.Decimal
|
||||||
|
|
||||||
|
|
||||||
|
export const NullTypes = {
|
||||||
|
DbNull: runtime.objectEnumValues.classes.DbNull as (new (secret: never) => typeof runtime.objectEnumValues.instances.DbNull),
|
||||||
|
JsonNull: runtime.objectEnumValues.classes.JsonNull as (new (secret: never) => typeof runtime.objectEnumValues.instances.JsonNull),
|
||||||
|
AnyNull: runtime.objectEnumValues.classes.AnyNull as (new (secret: never) => typeof runtime.objectEnumValues.instances.AnyNull),
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Helper for filtering JSON entries that have `null` on the database (empty on the db)
|
||||||
|
*
|
||||||
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
||||||
|
*/
|
||||||
|
export const DbNull = runtime.objectEnumValues.instances.DbNull
|
||||||
|
/**
|
||||||
|
* Helper for filtering JSON entries that have JSON `null` values (not empty on the db)
|
||||||
|
*
|
||||||
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
||||||
|
*/
|
||||||
|
export const JsonNull = runtime.objectEnumValues.instances.JsonNull
|
||||||
|
/**
|
||||||
|
* Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`
|
||||||
|
*
|
||||||
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
||||||
|
*/
|
||||||
|
export const AnyNull = runtime.objectEnumValues.instances.AnyNull
|
||||||
|
|
||||||
|
|
||||||
|
export const ModelName = {
|
||||||
|
Groups: 'Groups',
|
||||||
|
TotalStats: 'TotalStats',
|
||||||
|
DailyStats: 'DailyStats'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enums
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const GroupsScalarFieldEnum = {
|
||||||
|
telegramID: 'telegramID',
|
||||||
|
name: 'name',
|
||||||
|
username: 'username',
|
||||||
|
linksDeleted: 'linksDeleted',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type GroupsScalarFieldEnum = (typeof GroupsScalarFieldEnum)[keyof typeof GroupsScalarFieldEnum]
|
||||||
|
|
||||||
|
|
||||||
|
export const TotalStatsScalarFieldEnum = {
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt',
|
||||||
|
linksDeleted: 'linksDeleted',
|
||||||
|
commandResponses: 'commandResponses',
|
||||||
|
timesTriggered: 'timesTriggered'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type TotalStatsScalarFieldEnum = (typeof TotalStatsScalarFieldEnum)[keyof typeof TotalStatsScalarFieldEnum]
|
||||||
|
|
||||||
|
|
||||||
|
export const DailyStatsScalarFieldEnum = {
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt',
|
||||||
|
linksDeleted: 'linksDeleted',
|
||||||
|
commandResponses: 'commandResponses',
|
||||||
|
timesTriggered: 'timesTriggered'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type DailyStatsScalarFieldEnum = (typeof DailyStatsScalarFieldEnum)[keyof typeof DailyStatsScalarFieldEnum]
|
||||||
|
|
||||||
|
|
||||||
|
export const SortOrder = {
|
||||||
|
asc: 'asc',
|
||||||
|
desc: 'desc'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]
|
||||||
|
|
||||||
|
|
||||||
|
export const QueryMode = {
|
||||||
|
default: 'default',
|
||||||
|
insensitive: 'insensitive'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]
|
||||||
|
|
||||||
Binary file not shown.
@@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
||||||
|
/* eslint-disable */
|
||||||
|
// biome-ignore-all lint: generated file
|
||||||
|
// @ts-nocheck
|
||||||
|
/*
|
||||||
|
* This is a barrel export file for all models and their related types.
|
||||||
|
*
|
||||||
|
* 🟢 You can import this file directly.
|
||||||
|
*/
|
||||||
|
export type * from './models/Groups'
|
||||||
|
export type * from './models/TotalStats'
|
||||||
|
export type * from './models/DailyStats'
|
||||||
|
export type * from './commonInputTypes'
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Vendored
+1
-1
@@ -2,7 +2,7 @@ export interface LineChartItem {
|
|||||||
day: number;
|
day: number;
|
||||||
"Links Deleted": number;
|
"Links Deleted": number;
|
||||||
"Command Responses": number;
|
"Command Responses": number;
|
||||||
Triggers: number;
|
"Times Triggered": number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type LineChartArr = LineChartItem[];
|
export type LineChartArr = LineChartItem[];
|
||||||
|
|||||||
Reference in New Issue
Block a user