import { Model } from "mongoose"; import { MongooseModule, currentDate, } from "../helpers"; import { GeoPointSchema } from "./schema/geojson"; import { WatchDutyEventType, WatchDutyRegionType } from "../types/watchduty-event"; export interface WatchDutyEvent extends WatchDutyEventType { } export default async function WatchDutyEventModule(mongoose: MongooseModule) { const { Schema } = mongoose; const GeoJSONPoint = GeoPointSchema(mongoose); const WatchDutyRegion = new Schema({ name: { type: String, default: "", }, state: { type: String, default: "", }, }, { _id: false, id: false, }); const modelSchema = new Schema({ _id: { type: Schema.Types.ObjectId, auto: true, }, watchDutyId: { type: Number, required: true, }, name: { type: String, default: "", }, description: { type: String, default: "", }, geoEventType: { type: String, default: "", }, locationGeoJSON: { type: GeoJSONPoint, default: null, }, address: { type: String, default: "", }, isPrescribed: { type: Boolean, default: false, }, areaSquareMeters: { type: Number, default: null, }, containment: { type: Number, default: null, }, evacuationOrders: { type: String, default: "", }, evacuationWarnings: { type: String, default: "", }, evacuationAdvisories: { type: String, default: "", }, evacuationShelterInPlace: { type: String, default: "", }, regions: { type: [WatchDutyRegion], default: [], }, active: { type: Boolean, default: true, }, watchDutyCreatedAt: { type: Date, required: true, }, watchDutyModifiedAt: { type: Date, required: true, }, created: { type: Date, default: currentDate, }, modified: { type: Date, default: currentDate, }, }, { autoIndex: false, timestamps: { createdAt: "created", updatedAt: "modified", }, }); modelSchema.index({ watchDutyId: 1, }, { name: "watchDutyId_1_unique", unique: true, }); modelSchema.index({ active: 1, modified: 1, }, { name: "active_1_modified_1", }); return mongoose.model("WatchDutyEvent", modelSchema, "massive_watchduty_event", { overwriteModels: true }); } export interface WatchDutyEventModel extends Model { }