@codetanzania/ewea-event
Version:
A representation of an entity which define and track an instance(or occurrence) of an emergency(or disaster) event.
111 lines (96 loc) • 3.21 kB
JavaScript
import {
POPULATION_MAX_DEPTH,
COLLECTION_NAME_EVENT,
COLLECTION_NAME_EVENTCHANGELOG,
} from '@codetanzania/ewea-internals';
import { idOf } from '@lykmapipo/common';
import { getString } from '@lykmapipo/env';
import { isObjectId } from '@lykmapipo/mongoose-common';
// common constants
export const DEFAULT_COUNTRY_CODE = getString('DEFAULT_COUNTRY_CODE', 'TZ');
export const COUNTRY_CODE = getString('COUNTRY_CODE', DEFAULT_COUNTRY_CODE);
// event schema
export const EVENT_SCHEMA_OPTIONS = { collection: COLLECTION_NAME_EVENT };
// event options
export const EVENT_OPTION_SELECT = { group: 1, type: 1, number: 1 };
export const EVENT_OPTION_AUTOPOPULATE = {
select: EVENT_OPTION_SELECT,
maxDepth: POPULATION_MAX_DEPTH,
};
// event stages
export const EVENT_STAGE_ALERT = 'Alert';
export const EVENT_STAGE_EVENT = 'Event';
export const EVENT_STAGES = [EVENT_STAGE_ALERT, EVENT_STAGE_EVENT];
// changelog schema
export const CHANGELOG_SCHEMA_OPTIONS = {
collection: COLLECTION_NAME_EVENTCHANGELOG,
};
// changelog use
export const CHANGELOG_USE_CHANGE = 'change';
export const CHANGELOG_USE_NOTIFICATION = 'notification';
export const CHANGELOG_USE_NEED = 'need';
export const CHANGELOG_USE_EFFECT = 'effect';
export const CHANGELOG_USE_ASSESSMENT = 'assessment';
export const CHANGELOG_USE_ACTION = 'action';
export const CHANGELOG_USE_EXPOSURE = 'exposure';
export const CHANGELOG_USES = [
CHANGELOG_USE_CHANGE,
CHANGELOG_USE_NOTIFICATION,
CHANGELOG_USE_NEED,
CHANGELOG_USE_EFFECT,
CHANGELOG_USE_ASSESSMENT,
CHANGELOG_USE_ACTION,
CHANGELOG_USE_EXPOSURE,
];
// relation options
export const PREDEFINE_OPTION_SELECT = {
'strings.name': 1,
'strings.color': 1,
'strings.code': 1,
};
export const PREDEFINE_OPTION_AUTOPOPULATE = {
select: PREDEFINE_OPTION_SELECT,
maxDepth: POPULATION_MAX_DEPTH,
};
export const EVENT_UPDATE_ARRAY_FIELDS = ['areas', 'agencies', 'focals'];
export const EVENT_UPDATE_IGNORED_FIELDS = [
'_id',
'id',
'event',
'keyword',
'number',
// 'location', ignore for changelog
// 'address', ignore for changelog
'createdAt',
'use',
];
export const EVENT_CHANGELOG_RELATED_FIELDS = [
'group',
'type',
'level',
'severity',
'certainty',
'status',
'urgency',
];
export const EVENT_RELATION_PREDEFINE_FIELDS = {
// group: undefined, // TODO: default group(Unknown)
type: undefined, // TODO: default type(Unknown)
level: { 'strings.name.en': 'White', namespace: 'EventLevel' },
severity: { 'strings.name.en': 'Unknown', namespace: 'EventSeverity' },
certainty: { 'strings.name.en': 'Unknown', namespace: 'EventCertainty' },
status: { 'strings.name.en': 'Actual', namespace: 'EventStatus' },
urgency: { 'strings.name.en': 'Unknown', namespace: 'EventUrgency' },
response: { 'strings.name.en': 'None', namespace: 'EventResponse' },
};
// TODO: refactor to areSameObjectId(vali8&common)
export const deduplicate = (a, b) => {
// grab actual ids
const idOfA = idOf(a) || a;
const idOfB = idOf(b) || b;
// convert to string
const idA = isObjectId(idOfA) ? idOfA.toString() : idOfA;
const idB = isObjectId(idOfB) ? idOfB.toString() : idOfB;
// check if are equal
return idA === idB;
};