backend/config/cron-tasks.ts (view raw)
1import { DateTime } from "luxon";
2import pMap from "p-map";
3
4export default {
5 /**
6 * Send event recap to creators
7 * Everyday at 08:00
8 */
9 "0 8 * * *": async ({ strapi }) => {
10 const events = await strapi.entityService.findMany("api::event.event", {
11 filters: {
12 date: {
13 $gte: DateTime.now().toISODate(),
14 },
15 isReturnEvent: false,
16 },
17 populate: { linkedEvent: { populate: ["travels", "passengers"] } },
18 limit: -1,
19 });
20
21 await pMap(events, strapi.service("api::event.event").sendDailyRecap, {
22 concurrency: 5,
23 });
24 },
25 /**
26 * Send event recap when it has ended
27 * Only to events with a provided 'date' field
28 * Everyday at 08:30
29 */
30 "30 8 * * *": async ({ strapi }) => {
31 const events = await strapi.entityService.findMany("api::event.event", {
32 filters: {
33 date: {
34 $eq: DateTime.now().minus({ day: 1 }).toISODate(),
35 },
36 isReturnEvent: false,
37 },
38 populate: {
39 linkedEvents: {
40 populate: {
41 travels: true,
42 passengers: { populate: { passengers: true } },
43 },
44 },
45 travels: true,
46 passengers: { populate: { passengers: true } },
47 },
48 limit: -1,
49 });
50 await pMap(events, strapi.service("api::event.event").sendEndRecap, {
51 concurrency: 5,
52 });
53 },
54 /**
55 * Clean unpaid events
56 * Every sunday at 02:00
57 */
58 "0 2 * * 0": async ({ strapi }) => {
59 try {
60 const { count } = await strapi.db.query("api::event.event").updateMany({
61 where: { unpaid: true },
62 data: { unpaid: false, enabled_modules: [] },
63 });
64 strapi.log.info(`${count} unpaid events reset to basic.`);
65 } catch (error) {
66 strapi.log.error(`Can't delete unpaid events`);
67 console.error(error);
68 }
69 },
70};