@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 3.03 kB
Source Map (JSON)
{"version":3,"file":"delete-expired-deleted-media.mjs","names":[],"sources":["../../../src/services/crons/delete-expired-deleted-media.ts"],"sourcesContent":["import { MediaRepository } from \"../../libs/repositories/index.js\";\nimport type { ServiceFn } from \"../../utils/services/types.js\";\nimport getRetentionDays from \"./helpers/get-retention-days.js\";\nimport groupQueuePayloadsByTenant from \"./helpers/group-queue-payloads-by-tenant.js\";\n\n/**\n * Finds all soft-deleted media older than 30 days and queues them for permanent deletion\n */\nconst deleteExpiredDeletedMedia: ServiceFn<[], undefined> = async (context) => {\n\tconst Media = new MediaRepository(context.db.client, context.config.db);\n\n\tconst compDate = getRetentionDays(context.config.retention, \"deletedMedia\");\n\n\tconst softDeletedMediaRes = await Media.selectMultiple({\n\t\tselect: [\"id\", \"tenant_key\"],\n\t\twhere: [\n\t\t\t{\n\t\t\t\tkey: \"parent_media_id\",\n\t\t\t\toperator: \"is\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"is_deleted\",\n\t\t\t\toperator: \"=\",\n\t\t\t\tvalue: context.config.db.getDefault(\"boolean\", \"true\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"is_deleted_at\",\n\t\t\t\toperator: \"<\",\n\t\t\t\tvalue: compDate,\n\t\t\t},\n\t\t],\n\t\tvalidation: {\n\t\t\tenabled: true,\n\t\t},\n\t});\n\tif (softDeletedMediaRes.error) return softDeletedMediaRes;\n\n\tif (softDeletedMediaRes.data.length === 0) {\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst groups = groupQueuePayloadsByTenant(\n\t\tsoftDeletedMediaRes.data.map((media) => ({\n\t\t\tpayload: {\n\t\t\t\tmediaId: media.id,\n\t\t\t},\n\t\t\ttenantKeys: [media.tenant_key],\n\t\t})),\n\t);\n\n\tfor (const group of groups) {\n\t\tconst queueRes = await context.queue.addBatch(context, {\n\t\t\tevent: \"media:delete\",\n\t\t\tpayloads: group.payloads,\n\t\t\toptions:\n\t\t\t\tgroup.tenantKeys.length > 0\n\t\t\t\t\t? { tenantKeys: group.tenantKeys }\n\t\t\t\t\t: undefined,\n\t\t});\n\t\tif (queueRes.error) return queueRes;\n\t}\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: undefined,\n\t};\n};\n\nexport default deleteExpiredDeletedMedia;\n"],"mappings":"6JAQA,MAAM,EAAsD,KAAO,IAAY,CAC9E,IAAM,EAAQ,IAAI,EAAgB,EAAQ,GAAG,OAAQ,EAAQ,OAAO,EAAE,EAEhE,EAAW,EAAiB,EAAQ,OAAO,UAAW,cAAc,EAEpE,EAAsB,MAAM,EAAM,eAAe,CACtD,OAAQ,CAAC,KAAM,YAAY,EAC3B,MAAO,CACN,CACC,IAAK,kBACL,SAAU,KACV,MAAO,IACR,EACA,CACC,IAAK,aACL,SAAU,IACV,MAAO,EAAQ,OAAO,GAAG,WAAW,UAAW,MAAM,CACtD,EACA,CACC,IAAK,gBACL,SAAU,IACV,MAAO,CACR,CACD,EACA,WAAY,CACX,QAAS,EACV,CACD,CAAC,EACD,GAAI,EAAoB,MAAO,OAAO,EAEtC,GAAI,EAAoB,KAAK,SAAW,EACvC,MAAO,CACN,MAAO,IAAA,GACP,KAAM,IAAA,EACP,EAGD,IAAM,EAAS,EACd,EAAoB,KAAK,IAAK,IAAW,CACxC,QAAS,CACR,QAAS,EAAM,EAChB,EACA,WAAY,CAAC,EAAM,UAAU,CAC9B,EAAE,CACH,EAEA,IAAK,IAAM,KAAS,EAAQ,CAC3B,IAAM,EAAW,MAAM,EAAQ,MAAM,SAAS,EAAS,CACtD,MAAO,eACP,SAAU,EAAM,SAChB,QACC,EAAM,WAAW,OAAS,EACvB,CAAE,WAAY,EAAM,UAAW,EAC/B,IAAA,EACL,CAAC,EACD,GAAI,EAAS,MAAO,OAAO,CAC5B,CAEA,MAAO,CACN,MAAO,IAAA,GACP,KAAM,IAAA,EACP,CACD"}