'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')
})
}