No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

122 líneas
5.3 KiB

  1. const fs = require('fs')
  2. var moment = require('moment'); // require
  3. module.exports = {
  4. myJob: {
  5. task: async ({ strapi }) => {
  6. var clearOptions = await strapi.entityService.findOne('api::clear-monthly.clear-monthly', 1, {
  7. fields: ['Active','Every','LastClearedAt'],
  8. });
  9. if(!clearOptions||!clearOptions.LastClearedAt){
  10. if(!clearOptions){
  11. strapi.entityService.create('api::clear-monthly.clear-monthly', {
  12. data: {Active:false,LastClearedAt:'1000-01-01',Every:1},
  13. });
  14. }
  15. else{
  16. try{
  17. strapi.entityService.update('api::clear-monthly.clear-monthly', 1, {
  18. data: {LastClearedAt:'1000-01-01'},
  19. });
  20. }
  21. catch(e){
  22. strapi.entityService.create('api::article.article', {
  23. data: {Active:false,LastClearedAt:'1000-01-01',Every:1},
  24. });
  25. }
  26. }
  27. clearOptions = {Active:false,LastClearedAt:'1000-01-01',Every:1};
  28. }
  29. if(clearOptions.Active){
  30. var present = moment();
  31. if(present.diff(moment(clearOptions.LastClearedAt,'YYYY-MM-DD'), 'months')>=(clearOptions.Every||1)){
  32. console.log('scheduled cleaning');
  33. var now = new Date();
  34. now.setMonth(now.getMonth()-clearOptions.Every);
  35. const entries = await strapi.entityService.findMany('api::material.material', {
  36. sort: { createdAt: 'DESC' },
  37. filters: {
  38. $and: [
  39. {
  40. Cleared:false
  41. },
  42. {
  43. createdAt: { $lte: moment(now).format('YYYY-MM-DD')},
  44. }
  45. ],
  46. },
  47. populate:['Video', 'Images','Attachments']
  48. });
  49. var errorCount = 0;
  50. if(entries&& entries.length>0){
  51. var clearMaterial = {};
  52. entries.forEach(element => {
  53. var deleteFiles = [];
  54. if(element.Video){
  55. deleteFiles.push(element.Video.hash);
  56. }
  57. if(element.Attachments){
  58. element.Attachments.forEach(el=>{
  59. deleteFiles.push(el.hash);
  60. });
  61. }
  62. if(element.Images){
  63. element.Images.forEach(el=>{
  64. deleteFiles.push(el.hash);
  65. });
  66. }
  67. clearMaterial[element.id] = deleteFiles;
  68. });
  69. var listFiles = [];
  70. fs.readdirSync("./public/uploads").forEach(file => {
  71. listFiles.push(file);
  72. });
  73. Object.keys(clearMaterial).forEach((i)=>{
  74. clearMaterial[i].forEach(name=>{
  75. var files = listFiles.filter(file=>file.includes(name));
  76. files.forEach(file=>{
  77. try {
  78. fs.unlinkSync("./public/uploads/"+file);
  79. } catch(err) {
  80. console.log("Error deleting file",err);
  81. errorCount++;
  82. }
  83. });
  84. });
  85. // update id disini
  86. strapi.entityService.update('api::material.material', i, {
  87. data: {
  88. Cleared:true,
  89. publishedAt:null
  90. },
  91. });
  92. });
  93. }
  94. else{
  95. strapi.entityService.update('api::clear-monthly.clear-monthly', 1, {
  96. data: {
  97. LastClearedAt:moment().format('YYYY-MM-DD'),
  98. },
  99. });
  100. }
  101. if(errorCount==0){
  102. strapi.entityService.update('api::clear-monthly.clear-monthly', 1, {
  103. data: {
  104. LastClearedAt:moment().format('YYYY-MM-DD'),
  105. },
  106. });
  107. }
  108. }
  109. }
  110. },
  111. options: {
  112. rule: '*/10 * * * * *',
  113. tz: 'Asia/Bangkok',
  114. },
  115. },
  116. };