import { model, Schema, ObjectId } from 'mongoose'; export const UserType = Object.freeze({ USER: 'user', MONITOR: 'monitor', ADMIN: 'admin' }); export const AlarmType = Object.freeze({ FALL: 'fall', TOILET: 'toilet' }); export const deviceSchema = new Schema( { name: { type: String, required: true, trim: true }, lastSeen: { type: Date, default: Date.now, required: true } }, { timestamps: { createdAt: true, updatedAt: false } } ); export const alarmSchema = new Schema( { reason: { type: String, enum: Object.values(AlarmType), required: true } }, { timestamps: { createdAt: true, updatedAt: false } } ); /** * User schema for MongoDB. * @type {module:mongoose.Schema} */ export const userSchema = new Schema( { username: { type: String, required: true, unique: true, trim: true }, passwordHash: { type: String, required: true }, email: { type: String, required: true, unique: true, trim: true }, type: { type: String, enum: Object.values(UserType), default: 'user' }, devices: { type: [deviceSchema], default: [] }, alarm: { type: alarmSchema }, monitoredUsers: { type: [ObjectId], ref: 'users' }, balance: { type: Number, default: 0 }, spendHistory: { type: [ObjectId], ref: 'spendHistory' }, emergencyContacts: { type: String }, medicalInfo: { type: String }, location: { // https://stackoverflow.com/a/27218808 // Longtitute, Latitude info type: [Number], index: { type: '2dsphere', sparse: true }, count: 2 } }, { timestamps: { createdAt: true, updatedAt: false } } ); export const DbUser = model('user', userSchema); console.log('[MONGODB] User schema initialized successfully!');