UNPKG

@codetanzania/ewea-case

Version:

A representation of an entity which define and track cases during an emergency event.

392 lines (381 loc) 10.9 kB
import { PREDEFINE_NAMESPACE_CASESEVERITY, PREDEFINE_NAMESPACE_CASESTAGE, } from '@codetanzania/ewea-internals'; import { get } from 'lodash'; import moment from 'moment'; import { ObjectId } from '@lykmapipo/mongoose-common'; import { Predefine } from '@lykmapipo/predefine'; import { DEFAULT_SEEDS } from '@codetanzania/ewea-common'; import { Event } from '@codetanzania/ewea-event'; import { AUTOPOPULATE_OPTION_PREDEFINE, COUNTRY_CODE } from '../internals'; /** * @name group * @description Event group underwhich a case belongs to. * * @memberof Case * * @type {object} * @property {object} type - schema(data) type * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} exists - ensure ref exists before save * @property {object} autopopulate - auto populate(eager loading) options * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {boolean} aggregatable - allow field use for aggregation * @property {boolean} default - default value set when none provided * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * { * _id: '5dde6ca23631a92c2d616253', * strings: { name: { en: 'Meteorological' }, code: 'MAT' }, * } */ export const group = { type: ObjectId, ref: Predefine.MODEL_NAME, // required: true, index: true, exists: true, aggregatable: { unwind: true }, autopopulate: AUTOPOPULATE_OPTION_PREDEFINE, taggable: true, exportable: { format: (v) => get(v, 'strings.name.en'), default: 'NA', }, default: undefined, }; /** * @name type * @description Event type underwhich a case belongs to. * * @memberof Case * * @type {object} * @property {object} type - schema(data) type * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} exists - ensure ref exists before save * @property {object} autopopulate - auto populate(eager loading) options * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {boolean} aggregatable - allow field use for aggregation * @property {boolean} default - default value set when none provided * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * { * _id: '5dde6ca33631a92c2d616298', * strings: { name: { en: 'Flood' }, code: 'FL' }, * } */ export const type = { type: ObjectId, ref: Predefine.MODEL_NAME, // required: true, index: true, exists: true, aggregatable: { unwind: true }, autopopulate: AUTOPOPULATE_OPTION_PREDEFINE, taggable: true, exportable: { format: (v) => get(v, 'strings.name.en'), default: 'NA', }, default: undefined, }; /** * @name event * @description Event underwhich a case belongs to. * * @memberof Case * * @type {object} * @property {object} type - schema(data) type * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} exists - ensure ref exists before save * @property {object} autopopulate - auto populate(eager loading) options * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {boolean} aggregatable - allow field use for aggregation * @property {boolean} default - default value set when none provided * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.1.0 * @version 0.1.0 * @instance * @example * { * _id: '5dde6ca33631a92c2d616298', * strings: { name: { en: 'Flood' }, code: 'FL' }, * } */ export const event = { type: ObjectId, ref: Event.MODEL_NAME, // required: true, index: true, exists: true, aggregatable: { unwind: true }, autopopulate: Event.OPTION_AUTOPOPULATE, taggable: true, exportable: { format: (v) => get(v, 'strings.name.en'), default: 'NA', }, default: undefined, }; /** * @name stage * @description Currently assigned stage of a case. * * @memberof Case * * @type {object} * @property {object} type - schema(data) type * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} exists - ensure ref exists before save * @property {object} autopopulate - auto populate(eager loading) options * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {boolean} aggregatable - allow field use for aggregation * @property {boolean} default - default value set when none provided * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.4.0 * @version 0.1.0 * @instance * @example * { * _id: '5dde6ca23631a92c2d616250', * strings: { name: { en: 'Confirmed' } }, * } */ export const stage = { type: ObjectId, ref: Predefine.MODEL_NAME, // required: true, index: true, exists: true, aggregatable: { unwind: true }, autopopulate: AUTOPOPULATE_OPTION_PREDEFINE, taggable: true, exportable: { format: (v) => get(v, 'strings.name.en'), default: 'NA', }, default: DEFAULT_SEEDS[PREDEFINE_NAMESPACE_CASESTAGE], }; /** * @name severity * @description Currently assigned severity of a case. * * @memberof Case * * @type {object} * @property {object} type - schema(data) type * @property {boolean} required - mark required * @property {boolean} index - ensure database index * @property {boolean} exists - ensure ref exists before save * @property {object} autopopulate - auto populate(eager loading) options * @property {boolean} taggable - allow field use for tagging * @property {boolean} exportable - allow field use for exporting * @property {boolean} aggregatable - allow field use for aggregation * @property {boolean} default - default value set when none provided * @property {object} fake - fake data generator options * * @author lally elias <lallyelias87@gmail.com> * @since 0.4.0 * @version 0.1.0 * @instance * @example * { * _id: '5dde6ca23631a92c2d616250', * strings: { name: { en: 'Extreme' } }, * } */ export const severity = { type: ObjectId, ref: Predefine.MODEL_NAME, // required: true, index: true, exists: true, aggregatable: { unwind: true }, autopopulate: AUTOPOPULATE_OPTION_PREDEFINE, taggable: true, exportable: { format: (v) => get(v, 'strings.name.en'), default: 'NA', }, default: DEFAULT_SEEDS[PREDEFINE_NAMESPACE_CASESEVERITY], }; /** * @name number * @description Human readable, unique identifier of a case. * * It consist of two letters to identify the emergency event 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. * * @memberof Case * * @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 year = moment(new Date()).format('YYYY-MM'); return year; }, suffix: COUNTRY_CODE, length: 4, pad: '0', separator: '-', }, fake: { generator: 'random', type: 'uuid', }, }; /** * @name description * @description A brief summary about a case i.e additional * details that clarify more about a case. * * @memberof Case * * @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 * Provide medical assistance on rescue mission. */ export const description = { type: String, trim: true, // required: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentence', }, }; /** * @name remarks * @description A brief human readable comments and feedbacks * about a case. * * @memberof Case * * @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 first aid were provided to the victim immediately. */ export const remarks = { type: String, trim: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentence', }, }; /** * @name outcome * @description An outcome of about a case followup. * * @memberof Case * * @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 * Home */ export const outcome = { type: String, trim: true, index: true, searchable: true, exportable: true, fake: { generator: 'lorem', type: 'sentence', }, };