46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
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))
|
|
}
|
|
}
|