From fb004958400b22f78d6b71d06a1ebd8c80de7c30 Mon Sep 17 00:00:00 2001 From: Nathan Lamy Date: Wed, 20 Aug 2025 16:43:31 +0200 Subject: [PATCH] feat: add back fetch route --- app/controllers/internals_controller.ts | 46 +++++++++++++++++++++++++ app/services/grade_service.ts | 1 - start/routes.ts | 8 +++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/controllers/internals_controller.ts diff --git a/app/controllers/internals_controller.ts b/app/controllers/internals_controller.ts new file mode 100644 index 0000000..06f577e --- /dev/null +++ b/app/controllers/internals_controller.ts @@ -0,0 +1,46 @@ +import type { HttpContext } from '@adonisjs/core/http' +import redis from '@adonisjs/redis/services/main' +import { DateTime } from 'luxon' + +export default class InternalsController { + // POST /internals/back-fetch + async backFetch({ response, request }: HttpContext) { + const className = request.input('className') + if (!className) { + return response.badRequest({ message: 'className is required' }) + } + + // Start a new thread to avoid blocking the event loop + response.send({ + success: true, + message: `Fetching colles for class ${className}...`, + }) + setImmediate(async () => { + await queue(className) + console.log(`Colles fetching for class ${className} completed.`) + }) + } +} + +async function queue(className: string) { + // 1er Septembre 2019 début de BJColle + const startDate = DateTime.fromISO('2019-09-01T00:00:00') + const endDate = DateTime.now() + let date = endDate + + // Loop through all days from startDate to endDate + while (date >= startDate) { + await redis.publish( + 'jobs_queue', + JSON.stringify({ + type: 1, // Fetch day colles + // Format DD/MM/YYYY + date: date.toFormat('dd/MM/yyyy'), + class_name: className, + }) + ) + date = date.minus({ days: 1 }) + // Wait for 1 second to avoid overwhelming the queue + await new Promise((resolve) => setTimeout(resolve, 1000)) + } +} diff --git a/app/services/grade_service.ts b/app/services/grade_service.ts index caddace..84149e3 100644 --- a/app/services/grade_service.ts +++ b/app/services/grade_service.ts @@ -97,7 +97,6 @@ export class GradeService { periodStartDate ) - console.log(this.reduce(subjectAverages), subjectAverages) results.push({ period: periodStartDate.toFormat('MMM'), average: periodAverage, diff --git a/start/routes.ts b/start/routes.ts index e609e03..d63898d 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -62,3 +62,11 @@ router const GradesController = () => import('#controllers/grades_controller') router.get('/grades', [GradesController, 'index']).use(middleware.auth()) + +const InternalsController = () => import('#controllers/internals_controller') +router + .group(() => { + router.post('/back-fetch', [InternalsController, 'backFetch']) + }) + .prefix('/internals') +// TODO: Token authentication