Source: ressource/EntityArchive.js


'use strict'
const { hasProp } = require('sesajstools')

const Ressource = require('../../constructors/Ressource')
const ressourceSchema = require('./EntityRessource.schema')

const properties = { ...ressourceSchema.properties, dateArchivage: { instanceof: 'Date' } }
const required = [...ressourceSchema.required, 'dateArchivage']
const archiveSchema = { ...ressourceSchema, properties, required }

module.exports = function (component) {
  component.entity('EntityArchive', function () {
    const EntityArchive = this
    /**
     * Idem {@link EntityRessource}, avec dateArchivage en plus et moins d'index
     * @name EntityArchive
     * @entity EntityArchive
     * @extends Ressource
     * @extends Entity
     */
    EntityArchive.construct(function (data) {
      if (!data) throw Error('constructeur d’archive appelé sans ressource ni archive')
      if (!data.rid || !hasProp(data, 'version')) throw Error('rid et version sont obligatoires pour archiver une ressource')
      const ressource = new Ressource(data)
      Object.assign(this, ressource)

      // on ajoute une date d'archivage si y'en a pas
      this.dateArchivage = data.dateArchivage || new Date()

      // on force l'unicité en imposant l'oid à partir de ressourceOid + version
      // mais à priori y'a plus l'oid de la ressource dans ce qu'on nous passe (pour forcer la création, et ne pas risquer de se mélanger les oid)
      const ressourceOid = this.rid.substr(this.rid.indexOf('/') + 1)
      this.oid = ressourceOid + '-' + this.version
    })

    EntityArchive.validateJsonSchema(archiveSchema)

    EntityArchive
      .defineIndex('rid')
      .defineIndex('version')
  })
}