UNPKG

@codetanzania/ewea-event

Version:

A representation of an entity which define and track an instance(or occurrence) of an emergency(or disaster) event.

409 lines (396 loc) 10.4 kB
import { get } from 'lodash'; import moment from 'moment'; import { compact } from '@lykmapipo/common'; import { COUNTRY_CODE, EVENT_STAGE_ALERT, EVENT_STAGES } from '../internals'; /** * @name stage * @description Human readable evolving step of an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {string[]} enum - collection of allowed values * @property {boolean} index - ensure database index * @property {boolean} searchable - allow for searching * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {boolean} default - default value set when none provided * @property {object} fake - fake data generator options * * @since 0.1.0 * @version 0.1.0 * @instance * @example * Alert */ export const stage = { type: String, trim: true, enum: EVENT_STAGES, index: true, searchable: true, taggable: true, exportable: true, default: EVENT_STAGE_ALERT, fake: true, }; /** * @name number * @description Human readable, unique identifier of an event. * * It consist of two letters to identify the event(or disaster) type * (e.g. FL - flood); the year of the event; a six-digit, sequential * event number; and the three-letter ISO code for country of occurrence * e.g FL-2001-000033-TZA. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} uppercase - force value to uppercase * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} unique - ensure unique database index * @property {boolean} searchable - allow searching * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * FL-2018-000033-TZA */ export const number = { type: String, trim: true, uppercase: true, required: true, index: true, // unique: true, searchable: true, taggable: true, exportable: true, sequenceable: { prefix: function prefix() { const eventTypeCode = get(this, 'type.strings.code', ''); const year = moment(new Date()).format('YYYY'); return compact([eventTypeCode, year]).join('-'); }, suffix: COUNTRY_CODE, length: 6, pad: '0', separator: '-', }, fake: { generator: 'random', type: 'uuid', }, }; /** * @name causes * @description A brief human readable summary about cause(s) of an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} searchable - allow for searching * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * Heavy rainfall */ export const causes = { type: String, trim: true, // required: true, index: true, searchable: true, taggable: true, exportable: true, fake: { generator: 'lorem', type: 'sentence', }, }; /** * @name description * @description A brief summary about an event i.e additional details * that clarify more about an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} searchable - allow for searching * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * Overflowing water from the dam. */ export const description = { type: String, trim: true, // required: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentence', }, }; /** * @name places * @description Human readable text describing the affected area(s) * of an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} searchable - allow searching * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @since 0.1.0 * @version 0.1.0 * @instance * @example * Ilala, Temeke, Dar es Salaam */ export const places = { type: String, trim: true, // required: true, index: true, searchable: true, taggable: true, exportable: true, fake: { generator: 'address', type: 'county', }, }; /** * @name instructions * @description A brief human readable, caution(s) to be taken by * responders on an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} index - ensure database index * @property {boolean} searchable - allow searching * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @since 0.1.0 * @version 0.1.0 * @instance * @example * Continue monitor the situation */ export const instructions = { type: String, trim: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentence', }, }; /** * @name interventions * @description A brief human readable interventions and directives * of an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} index - ensure database index * @property {boolean} searchable - allow for searching * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * Affected victims were evacuated and relocated */ export const interventions = { type: [String], trim: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentence', }, }; /** * @name impacts * @description A brief human readable effect(s) an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} index - ensure database index * @property {boolean} searchable - allow for searching * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * 55 people affected, 72 houses destroyed and 9 schools damaged */ export const impacts = { type: String, trim: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentence', }, }; /** * @name constraints * @description A brief human readable gaps and constraints * about an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} index - ensure database index * @property {boolean} searchable - allow for searching * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * Rehabilitation and reconstruction resources */ export const constraints = { type: [String], trim: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentences', }, }; /** * @name remarks * @description A brief human readable comments and recommendations * about an event. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} trim - force trimming * @property {boolean} index - ensure database index * @property {boolean} searchable - allow for searching * @property {boolean} exportable - allow field use for exporting * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * Requested relief items should be provided to the victims immediately */ export const remarks = { type: [String], trim: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentences', }, }; /** * @name startedAt * @description Date when an event was effective occured(or reported). * * @type {object} * @property {object} type - schema(data) type * @property {boolean} index - ensure database index * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * 2018-10-17T07:53:32.831Z */ export const startedAt = { type: Date, index: true, exportable: true, // before: 'endedAt', fake: { generator: 'date', type: 'past', }, }; /** * @name endedAt * @description Date when an event was declared no longer a threat. * * @type {object} * @property {object} type - schema(data) type * @property {boolean} index - ensure database index * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * 2018-10-19T07:53:32.831Z */ export const endedAt = { type: Date, index: true, exportable: true, // after: 'reportedAt', fake: { generator: 'date', type: 'recent', }, };