aboutsummaryrefslogtreecommitdiffstats
path: root/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.ts')
-rw-r--r--src/index.ts99
1 files changed, 40 insertions, 59 deletions
diff --git a/src/index.ts b/src/index.ts
index b675584..c6d92eb 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,70 +1,51 @@
-import { App } from "@tinyhttp/app";
-import { logger } from "@tinyhttp/logger";
-import bodyParser from "body-parser";
-import config from "./config";
import { buildSheetsClient } from "./sheets";
-import { bot, broadcastMessage } from "./tg";
-import { httpHeaderAuth } from "./middleware";
+import { broadcastMessage } from "./tg";
-const main = async () => {
- const sheets = await buildSheetsClient();
-
- const app = new App({
- onError: (err, _req, res) => {
- console.log(err);
- res.status(500).send("Something bad happened");
- },
- });
+const main = async (): Promise<void> => {
+ const startTime = Date.now();
+ console.log("[run] Starting recurring tasks notification script");
- app
- .use(logger({
- timestamp: {
- format: "YYYY-MM-DDTHH:mm:ssZ[Z]",
- },
- }))
- .use(bot.webhookCallback("/webhook/telegram"))
- .use(bodyParser.json())
- .get("/", async (_, res) => {
- res.send({ service: "hommabot2 API" });
- })
- .post("/scheduler/trigger", httpHeaderAuth, async (_req, res) => {
- try {
- const sheetData = await sheets.fetchSheetData();
- const entries = sheets.processRows(sheetData);
- const thisWeeksEntries = sheets.filterOnlyThisWeek(entries);
+ const sheets = await buildSheetsClient();
- if (thisWeeksEntries.length > 0) {
- const tasks = thisWeeksEntries.map(e => `${e.name} (${e.interval})`);
- const taskText = tasks.join("\n");
- const msg = `Tällä viikolla tehtävät hommat:\n${taskText}`;
- await broadcastMessage(msg);
- console.log("Broadcasted message:", msg);
- } else {
- const msg = "Tällä viikolla ei toistuvia hommia! 🎉";
- await broadcastMessage(msg);
- console.log("Broadcasted message:", msg);
- }
+ // 1. Fetch raw sheet data
+ const sheetData = await sheets.fetchSheetData();
+ console.log(`[run] Retrieved ${sheetData.length} raw rows from Sheets`);
- const newDateStamps = sheets.updatedLastDoneDateStamps(entries);
- await sheets.updateSheetLastDoneColumn(newDateStamps);
+ // 2. Process rows (compute next/last dates)
+ const entries = sheets.processRows(sheetData);
+ console.log(`[run] Processed ${entries.length} entries`);
- res.sendStatus(200);
- } catch (err) {
- console.error(err);
- res.sendStatus(500);
- }
- });
+ // 3. Filter only tasks due this week
+ const thisWeeksEntries = sheets.filterOnlyThisWeek(entries);
+ console.log(`[run] Found ${thisWeeksEntries.length} entries due this week`);
- console.log(`Setting up webhook on ${config.tgWebhookUrl}`);
- bot.telegram.setWebhook(config.tgWebhookUrl);
+ // 4. Compose & broadcast Telegram message
+ if (thisWeeksEntries.length > 0) {
+ const tasks = thisWeeksEntries.map((e) => `${e.name} (${e.interval})`);
+ const taskText = tasks.join("\n");
+ const msg = `Tällä viikolla tehtävät hommat:\n${taskText}`;
+ await broadcastMessage(msg);
+ console.log("[run] Broadcasted weekly task message");
+ } else {
+ const msg = "Tällä viikolla ei toistuvia hommia! 🎉";
+ await broadcastMessage(msg);
+ console.log("[run] Broadcasted empty-week message");
+ }
- console.log(`Serving on http://localhost:${config.port}`);
- app.listen(config.port);
+ // 5. Update "last done" column with new date stamps (only tasks done this week are advanced)
+ const newDateStamps = sheets.updatedLastDoneDateStamps(entries);
+ await sheets.updateSheetLastDoneColumn(newDateStamps);
+ console.log("[run] Updated last done column in sheet");
+ const durationMs = Date.now() - startTime;
+ console.log(`[run] Completed successfully in ${durationMs}ms`);
};
-main();
-
-// Enable graceful stop
-process.once("SIGINT", () => bot.stop("SIGINT"));
-process.once("SIGTERM", () => bot.stop("SIGTERM"));
+main()
+ .then(() => {
+ process.exit(0);
+ })
+ .catch((err) => {
+ console.error("[run] Fatal error:", err);
+ process.exit(1);
+ });