gancio-upstream/server/helpers/ap.js

53 lines
1.7 KiB
JavaScript
Raw Normal View History

2024-04-01 10:34:29 +02:00
const { Event, Resource, EventNotification, APUser } = require('../api/models/models')
2023-11-29 00:29:01 +01:00
const { Op } = require('sequelize')
2023-11-21 22:10:49 +01:00
const { DateTime } = require('luxon')
2023-11-29 00:29:01 +01:00
const log = require('../log')
2023-11-21 22:10:49 +01:00
module.exports = {
// remove past federated events
async _cleanPastEvents () {
const now = DateTime.now().toUnixInteger()
const events = await Event.findAll({ where: {
start_datetime: { [Op.lt]: now },
apUserApId: { [Op.ne]: null }
2024-01-21 23:13:41 +01:00
}, raw: true })
2023-11-21 22:10:49 +01:00
2023-11-29 00:29:01 +01:00
if (!events.length) { return }
2024-01-23 09:53:04 +01:00
log.info(`[AP] Remove ${events.length} past federated events and related resources`)
const eventsId = events.map(e => e.id)
2024-04-01 10:34:29 +02:00
// remove related resources..
await Resource.destroy({ where: { eventId: eventsId }})
2023-11-21 22:10:49 +01:00
2024-04-01 10:34:29 +02:00
// ...and notiifcations
await EventNotification.destroy({ where: { eventId: eventsId }})
2024-01-21 23:13:41 +01:00
await Event.destroy({ where: { id: eventsId } }).catch(e => {
2024-01-23 09:53:04 +01:00
log.debug('[AP] Error while removing past federated events: %s', JSON.stringify(e))
2023-11-21 22:10:49 +01:00
})
2024-04-01 10:34:29 +02:00
},
async _cleanUnusedAPUser () {
const ap_users = await APUser.findAll({
limit: 500,
where: {
follower: { [Op.not]: true },
following: { [Op.not]: true },
trusted: { [Op.not]: true },
blocked: { [Op.not]: true },
},
include: [
{ model: Event, required: false },
{ model: Resource, required: false }
],
raw: true
})
const ap_ids = ap_users.filter(a => a['events.id'] === null && a['resources.id'] === null).map(a => a.ap_id )
if (ap_ids.length) {
log.debug('[AP] Remove %d not used federated actors', ap_ids.length)
await APUser.destroy({ where: { ap_id: ap_ids } })
}
2023-11-21 22:10:49 +01:00
}
}