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)) } }