@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
JavaScript
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',
},
};