From f7d994d02e4776b2d9679f283a9da871fa5a9952 Mon Sep 17 00:00:00 2001 From: Marios Antonoudiou Date: Sun, 6 Jul 2025 12:32:22 +0300 Subject: [PATCH] Migrate to tasks --- server/api/tasks/generate-content.post.ts | 50 +++++++++++++++++++++++ server/api/tasks/remove-athlete.post.ts | 19 +++++++++ 2 files changed, 69 insertions(+) create mode 100644 server/api/tasks/generate-content.post.ts create mode 100644 server/api/tasks/remove-athlete.post.ts diff --git a/server/api/tasks/generate-content.post.ts b/server/api/tasks/generate-content.post.ts new file mode 100644 index 0000000..ad0a7fa --- /dev/null +++ b/server/api/tasks/generate-content.post.ts @@ -0,0 +1,50 @@ +import { createActivityContent } from "~~/server/utils/create-content"; + +export default defineEventHandler(async (event) => { + await validateHookdeck(event); + + const body = await readBody(event); + const db = useDrizzle(); + + const user = await db.query.users.findFirst({ + where: (f, o) => o.eq(f.id, body.owner_id), + with: { + preferences: true, + }, + }); + + if (!user?.preferences.data?.enabled) { + return; + } + + const strava = await useStrava(body.owner_id); + + const currentActivity = await strava!(`/activities/${body.object_id}`); + const [, ...previousActivities] = await strava!(`/activities`, { + query: { + per_page: 20, + }, + }); + + const [aiError, stravaRequestBody] = await createActivityContent({ + currentActivity, + previousActivities, + user: user!, + }).catch((err) => [err]); + if (aiError) { + throw createError({ + statusCode: 500, + message: `OPENAI API: ${aiError.message}`, + }); + } + + await strava!(`activities/${body.object_id}`, { + method: "PUT", + body: stravaRequestBody, + }).catch((error) => { + throw createError({ + statusCode: 500, + message: `Strava API: ${error.message}`, + }); + }); +}); diff --git a/server/api/tasks/remove-athlete.post.ts b/server/api/tasks/remove-athlete.post.ts new file mode 100644 index 0000000..fb76fd1 --- /dev/null +++ b/server/api/tasks/remove-athlete.post.ts @@ -0,0 +1,19 @@ +import { get } from "radash"; +import { eq } from "drizzle-orm"; + +export default defineEventHandler(async (event) => { + await validateHookdeck(event); + + const body = await readBody(event); + const db = useDrizzle(); + + if (get(body, "updates.authorized") !== false) { + return; + } + + await db + .delete(tables.users) + .where(eq(tables.users.id, get(body, "object_id"))); + + sendNoContent(event); +});