d1d5984e30
* refactor(server emails): email transports module refactor to TypeScript * refactor(docker-compose deps): move local email server to common dev compose file * chore(server launch.json): add ts-node script running example * chore(server deps): add nodemailer types package * refactor(server activitystream): add strongly typed activity definitions * feat(server activitystream): add activity repository * feat(server info): add canonical url on the service level * feat(server): add static file serving route to server core * feat(server): add dependencies for periodical email digests * feat(server activity stream): call the initialization step from the activity stream module * feat(server activity digest): add WIP weekly email digest implementation * feat(server digest email): smul upgrades and fixes to the email template and its contents * just for Fabs to test * chore(root package.json): remove deleted docker-compose references * feat(frontend profile): add notification preferences panel * feat(server digest emails): set prod ready cron tab and timespan * refactor(server email digest): move templates into the email module * refactor(server activity digests): refactor to use notifications infrastructure * test(server activities): add tests and some refactor to activities and notification preferences * refactor(notification preferences): fix minor issues * test(server notification preferences test): fix describe nesting * fix(server activities): add missing action types * fix(server activities): fix errors after merging main * test(server activity notifications): add test coverage for activity notifications service * refactor(server activities): fixing tests and some cleanup * feat(server cli): add summary notification command to cli * chore(dev env db versions): upgrade local dev env versions * chore(server deps): upgrade local dev db to pg 14 * fix(docker-compose): bind maildev to localhost * process-scoped notifications test queues * test(activity tests): add sleep to fix flaky CI * feat(activity digests): add demo date for digest trigger * feat(activity digest): add UK timezone trigger date Co-authored-by: Iain Sproat <68657+iainsproat@users.noreply.github.com> Co-authored-by: Fabians <fabis94@live.com>
48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
|
|
import cron from 'node-cron'
|
|
import { sendActivityNotifications } from '@/modules/activitystream/services/summary'
|
|
import { initializeEventListener } from '@/modules/activitystream/services/eventListener'
|
|
import { modulesDebug } from '@/modules/shared/utils/logger'
|
|
import { publishNotification } from '@/modules/notifications/services/publication'
|
|
|
|
const activitiesDebug = modulesDebug.extend('activities')
|
|
|
|
let scheduledTask: cron.ScheduledTask | null = null
|
|
|
|
const scheduleWeeklyActivityNotifications = () => {
|
|
// just to test stuff
|
|
// every 1000 seconds
|
|
// const cronExpression = '*/1000 * * * * *'
|
|
// at 00 minutest, 10 (am) hours, every month, every year,
|
|
// every 1st day of the week (monday)
|
|
// cheat sheet https://crontab.guru
|
|
const cronExpression = '00 13 * * 5'
|
|
// configure the number of days, the activities are scraped for
|
|
const numberOfDays = 7
|
|
cron.validate(cronExpression)
|
|
return cron.schedule(cronExpression, async () => {
|
|
activitiesDebug('Sending weekly activity digests notifications.')
|
|
const end = new Date()
|
|
const start = new Date(end.getTime())
|
|
start.setDate(start.getDate() - numberOfDays)
|
|
await sendActivityNotifications(start, end, publishNotification)
|
|
})
|
|
}
|
|
|
|
const activityModule: SpeckleModule = {
|
|
init: async (_, isInitial) => {
|
|
modulesDebug('🤺 Init activity module')
|
|
if (isInitial) {
|
|
initializeEventListener()
|
|
scheduledTask = scheduleWeeklyActivityNotifications()
|
|
}
|
|
},
|
|
shutdown: () => {
|
|
if (scheduledTask) scheduledTask.stop()
|
|
}
|
|
}
|
|
|
|
export = {
|
|
...activityModule
|
|
}
|