// @flow import debug from "debug"; import Router from "koa-router"; import subDays from "date-fns/sub_days"; import { AuthenticationError } from "../errors"; import { Document, Attachment } from "../models"; import { Op } from "../sequelize"; const router = new Router(); const log = debug("utils"); router.post("utils.gc", async (ctx) => { const { token } = ctx.body; if (process.env.UTILS_SECRET !== token) { throw new AuthenticationError("Invalid secret token"); } log("Permanently deleting documents older than 30 days…"); const where = { deletedAt: { [Op.lt]: subDays(new Date(), 30), }, }; const documents = await Document.scope("withUnpublished").findAll({ attributes: ["id"], where, }); const documentIds = documents.map((d) => d.id); await Attachment.destroy({ where: { documentId: documentIds, }, }); await Document.scope("withUnpublished").destroy({ where, force: true, }); log(`Deleted ${documentIds.length} documents`); ctx.body = { success: true, }; }); export default router;