const mongoose = require('mongoose') const Schema = mongoose.Schema; const ObjectId = Schema.Types.ObjectId; const { Counter} = require('../models/User') const code = Math.floor(100000 + Math.random() * 900000); const generateinstallationId = async () => { var result = await Counter.findOneAndUpdate( { _id: 'installation_id' }, { $inc: { seq: 1 } }, { upsert: true, new: true } ); return result.seq; }; const installationschema = new mongoose.Schema({ // name: { type: String }, phone: { type: String, unique: true, trim: true }, address: String, installationId: { type: String }, phoneVerified: { type: Boolean, default: false }, phoneVerificationCode: { type: Number, default: 11111 }, passwordResetCode: { type: Number}, oneTimePasswordSetFlag: { type: Boolean, default: false }, emails: [{ email: String, verified: { type: Boolean, default: false } }], services: { password: { bcrypt: String } }, alternativeNumber: { type: String, default: null }, firstName: { type: String, default: null }, lastName: { type: String, default: null }, address1: { type: String, default: null }, address2: { type: String, default: null }, city: { type: String, default: null }, profile: { state: { type: String, default: null }, country: { type: String, default: null }, }, team : { type: String, default: null}, manager : { type: String, default: null}, longitude: { type : Number,default: 0.0}, latitude: {type: Number,default: 0.0}, fcmId: { type: String, default: null }, createdAt: { type: Date, default: function () { return Date.now(); }, }, createdBy: ObjectId, updatedAt: { type: Date, default: function () { return Date.now(); }, }, updatedBy: ObjectId, }); const profilePictureInstallSchema = new Schema({ installationId: { type: String, unique: true, required: true }, picture: { type: String, // Change the type to String required: true, validate: { validator: function (value) { const supportedFormats = ['jpg', 'jpeg', 'png']; const fileExtension = value.split('.').pop().toLowerCase(); return supportedFormats.includes(fileExtension); }, message: 'Picture must be a JPEG, PNG, or JPG image' } } }); const profilePictureStoreSchema = new Schema({ storeId: { type: String, unique: true, required: true }, picture: { type: String, // Change the type to String required: true, validate: { validator: function (value) { const supportedFormats = ['jpg', 'jpeg', 'png']; const fileExtension = value.split('.').pop().toLowerCase(); return supportedFormats.includes(fileExtension); }, message: 'Picture must be a JPEG, PNG, or JPG image' } } }); const storeSchema = new mongoose.Schema({ storename: { type: String }, phone: { type: String, unique: true, trim: true }, storeId: { type: String, default: null }, phoneVerified: { type: Boolean, default: false }, phoneVerificationCode: { type: Number, default: 11111 }, passwordResetCode: { type: Number, default: 11111 }, oneTimePasswordSetFlag: { type: Boolean, default: false }, emails: { type: String, unique: true }, services: { password: { bcrypt: { type: String, required: true } } }, description: { type: String, default: null }, startingPrice: { type: String, default: 0.0 }, profile: { role: [{ type: String, default: "store" }], firstName: { type: String, default: null }, lastName: { type: String, default: null }, contactNumber: { type: String, default: null }, alternativeContactNumber: { type: String, default: null }, office_address: { type: String, default: null }, city: { type: String, default: null }, state: { type: String, default: null }, country: { type: String, default: null }, zip: { type: String, default: null }, }, status: { type: String, enum: ['inactive', 'active'], default: 'active' }, longitude: { type: Number, default: 0.0 }, latitude: { type: Number, default: 0.0 }, isActive: Boolean, tenantId: ObjectId, fcmId: { type: String, default: null }, createdAt: { type: Date, default: function () { return Date.now(); }, }, createdBy: ObjectId, updatedAt: { type: Date, default: function () { return Date.now(); }, }, updatedBy: ObjectId, }, { versionKey: false }); module.exports = mongoose.model('Store', storeSchema); const waterLeverSensorInSchema = new mongoose.Schema({ storeId:{ type: String }, hardwareId: { type: String }, masterId: { type: String, default: null }, type: { type: String }, indate: { type: String }, hardwareId_company: { type: String }, qccheck: { type: String, default: null }, qccheckdate: { type: String, default: null }, qcby: { type: String, default: null }, comment: { type: String, default: "0" }, outforrepairdate: { type: String, default: "0" }, sendto: { type: String, default: null }, repairfeedback:{ type: String, default: "0" }, dateofinstallation: { type: String, default: null }, installedby: { type: String, default: "0" }, customerId:{ type: String,default:"0" }, comments:{ type: String,default:"0" }, slaves: { source: { type: String }, tankhardware: [ { tankhardwareId: { type: String }, slaveId: { type: String, default: null }, type: { type: String }, indate: { type: String }, hardwareId_company: { type: String }, qccheck: { type: String, default: null }, qccheckdate: { type: String, default: null }, qcby: { type: String, default: null }, comment: { type: String, default: "0" }, outforrepairdate: { type: String, default: "0" }, sendto: { type: String, default: null }, repairfeedback:{ type: String, default: "0" }, dateofinstallation: { type: String, default: null }, installedby: { type: String, default: "0" }, customerId:{ type: String,default:"0" }, comments:{ type: String,default:"0" }, } ] } }); const Store = mongoose.model("Store", storeSchema); const WaterLeverSensor = mongoose.model('WaterLeverSensor', waterLeverSensorInSchema); const ProfilePictureStore = mongoose.model('ProfilePictureStore', profilePictureStoreSchema); const ProfilePictureInstall = mongoose.model('ProfilePictureInstall', profilePictureInstallSchema); const Install = mongoose.model("Install", installationschema); module.exports = { Install, ProfilePictureInstall, generateinstallationId,Store,ProfilePictureStore,WaterLeverSensor};