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