All files / services/config-service/src/models UsageTracking.js

94.23% Statements 49/52
100% Branches 1/1
0% Functions 0/1
94.23% Lines 49/52

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 531x 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');
 
const usageTrackingSchema = new mongoose.Schema({
  organizationId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Organization',
    required: true
  },
  periodStart: {
    type: Date,
    required: true
  },
  periodEnd: {
    type: Date,
    required: true
  },
  kbItemCount: {
    type: Number,
    default: 0
  },
  llmCostUsed: {
    type: Number,
    default: 0
  },
  ocrCostUsed: {
    type: Number,
    default: 0
  },
  // Snapshot du plan et des quotas au moment de la création de la période
  // (plusieurs périodes actives peuvent venir de plans différents).
  planCode: {
    type: String,
    default: null
  },
  limits: {
    maxKbItems: { type: Number, default: null },
    maxLlmCost: { type: Number, default: null },
    maxOcrCost: { type: Number, default: null }
  }
}, {
  timestamps: true
});
 
usageTrackingSchema.index({ organizationId: 1, periodStart: 1 }, { unique: true });
 
usageTrackingSchema.methods.toJSON = function() {
  const obj = this.toObject();
  delete obj.__v;
  return obj;
};
 
module.exports = mongoose.model('UsageTracking', usageTrackingSchema);