import * as uuid from "uuid"; import { MongooseModule, } from "../helpers"; import { Model } from "mongoose"; import { TrackerResponderType } from "../types/tracker-responder"; export interface TrackerResponder extends TrackerResponderType, Record { } export default async function TrackerResponderModule(mongoose: MongooseModule) { const { Schema } = mongoose; const modelSchema = new Schema({ _id: { type: Schema.Types.ObjectId, auto: true, }, departmentId: { type: String, required: true, }, // Transponder MAC address, the vendor-side identity of the tracked seat mac: { type: String, required: true, uppercase: true, }, // Stable identity carried by Location.transponderUUID uuid: { type: String, required: true, default: uuid.v4, }, // Vendor personnelId verbatim (not a PersonnelKnown reference) trackerPersonnelId: { type: String, default: "", }, // Vendor-owned names, taken verbatim from the TXRX webhook body personnelName: { type: String, default: "", }, friendlyName: { type: String, default: "", }, // User-owned display name, editable on our end (eventually via iOS); // the webhook never touches this displayName: { type: String, default: "", }, seatPosition: { type: String, default: "", }, // "" = unassigned, otherwise PersonnelKnown.uuid personnelUUID: { type: String, default: "", }, assignedBy: { type: String, default: "", }, assignedAt: { type: Date, default: null, }, active: { type: Boolean, default: true, }, source: { type: String, default: "", }, }, { timestamps: { updatedAt: "modified", }, autoIndex: false, }); modelSchema.index({ departmentId: 1, mac: 1, }, { name: "departmentId_1_mac_1_unique", unique: true, }); // Lookup path for resolving Location.transponderUUID back to a responder modelSchema.index({ departmentId: 1, uuid: 1, }, { name: "departmentId_1_uuid_1_unique", unique: true, }); return mongoose.model("TrackerResponder", modelSchema, "massive_tracker_responders", { overwriteModels: true }); } export interface TrackerResponderModel extends Model { }