All files / services/scheduler-service/src/models Schedule.js

100% Statements 88/88
100% Branches 1/1
100% Functions 0/0
100% Lines 88/88

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 891x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
const mongoose = require('mongoose');
 
/**
 * Planification générique : `SchedulerTW` peut déclencher n'importe quel service
 * disposant d'un point d'entrée « démarrer » (via l'API gateway).
 *
 * - `type`     : type de cible (registre dans `temporal/activities.js`).
 * - `targetId` : identifiant ciblé (config crawler ou id de workflow).
 * - `payload`  : corps transmis au point d'entrée (ex. `{ url }` pour un workflow).
 */
const scheduleSchema = new mongoose.Schema({
  organizationId: {
    type: String,
    required: true,
    index: true,
  },
  type: {
    type: String,
    enum: ['crawler', 'workflow'],
    default: 'crawler',
    required: true,
  },
  targetId: {
    type: String,
    required: true,
  },
  payload: {
    type: mongoose.Schema.Types.Mixed,
    default: {},
  },
  name: {
    type: String,
    default: '',
  },
  cronExpression: {
    type: String,
    required: true,
  },
  timezone: {
    type: String,
    default: 'UTC',
  },
  isActive: {
    type: Boolean,
    default: true,
  },
  temporalScheduleId: {
    type: String,
    default: null,
  },
  lastRunAt: {
    type: Date,
    default: null,
  },
  nextRunAt: {
    type: Date,
    default: null,
  },
  runCount: {
    type: Number,
    default: 0,
  },
  lastJobId: {
    type: String,
    default: null,
  },
  lastRunStatus: {
    type: String,
    enum: ['success', 'failed', 'pending', null],
    default: null,
  },
  createdBy: {
    type: String,
    default: null,
  },
  apiKeyId: {
    type: String,
    default: null,
  },
}, {
  timestamps: true,
  toJSON: { virtuals: true },
  toObject: { virtuals: true },
});
 
scheduleSchema.index({ organizationId: 1, createdAt: -1 });
 
module.exports = mongoose.model('Schedule', scheduleSchema, 'schedules');