|
- const fs = require('fs')
- var moment = require('moment'); // require
-
-
- module.exports = {
- myJob: {
- task: async ({ strapi }) => {
- var clearOptions = await strapi.entityService.findOne('api::clear-monthly.clear-monthly', 1, {
- fields: ['Active','Every','LastClearedAt'],
- });
- if(!clearOptions||!clearOptions.LastClearedAt){
- if(!clearOptions){
- strapi.entityService.create('api::clear-monthly.clear-monthly', {
- data: {Active:false,LastClearedAt:'1000-01-01',Every:1},
- });
- }
- else{
- try{
- strapi.entityService.update('api::clear-monthly.clear-monthly', 1, {
- data: {LastClearedAt:'1000-01-01'},
- });
- }
- catch(e){
- strapi.entityService.create('api::article.article', {
- data: {Active:false,LastClearedAt:'1000-01-01',Every:1},
- });
- }
- }
-
- clearOptions = {Active:false,LastClearedAt:'1000-01-01',Every:1};
- }
- if(clearOptions.Active){
- var present = moment();
- if(present.diff(moment(clearOptions.LastClearedAt,'YYYY-MM-DD'), 'months')>=(clearOptions.Every||1)){
- console.log('scheduled cleaning');
- var now = new Date();
- now.setMonth(now.getMonth()-clearOptions.Every);
- const entries = await strapi.entityService.findMany('api::material.material', {
- sort: { createdAt: 'DESC' },
- filters: {
- $and: [
- {
- Cleared:false
- },
- {
- createdAt: { $lte: moment(now).format('YYYY-MM-DD')},
- }
- ],
-
- },
- populate:['Video', 'Images','Attachments']
- });
- var errorCount = 0;
- if(entries&& entries.length>0){
- var clearMaterial = {};
- entries.forEach(element => {
- var deleteFiles = [];
- if(element.Video){
- deleteFiles.push(element.Video.hash);
- }
- if(element.Attachments){
- element.Attachments.forEach(el=>{
- deleteFiles.push(el.hash);
- });
- }
- if(element.Images){
- element.Images.forEach(el=>{
- deleteFiles.push(el.hash);
- });
- }
- clearMaterial[element.id] = deleteFiles;
- });
- var listFiles = [];
- fs.readdirSync("./public/uploads").forEach(file => {
- listFiles.push(file);
- });
- Object.keys(clearMaterial).forEach((i)=>{
- clearMaterial[i].forEach(name=>{
- var files = listFiles.filter(file=>file.includes(name));
- files.forEach(file=>{
- try {
- fs.unlinkSync("./public/uploads/"+file);
- } catch(err) {
- console.log("Error deleting file",err);
- errorCount++;
- }
- });
- });
- // update id disini
- strapi.entityService.update('api::material.material', i, {
- data: {
- Cleared:true,
- publishedAt:null
- },
- });
-
- });
- }
- else{
- strapi.entityService.update('api::clear-monthly.clear-monthly', 1, {
- data: {
- LastClearedAt:moment().format('YYYY-MM-DD'),
- },
- });
- }
- if(errorCount==0){
- strapi.entityService.update('api::clear-monthly.clear-monthly', 1, {
- data: {
- LastClearedAt:moment().format('YYYY-MM-DD'),
- },
- });
- }
- }
- }
-
- },
- options: {
- rule: '*/10 * * * * *',
- tz: 'Asia/Bangkok',
- },
- },
- };
|