const mongoose = require("mongoose"); const Schema = mongoose.Schema; const ObjectId = Schema.Types.ObjectId; const moment = require('moment'); const code = Math.floor(100000 + Math.random() * 900000); const { User,Counter, generateBookingId,resetCounter,generateCustomerId,ProfilePicture} = require('../models/User') const generateSupplierId = async () => { var result = await Counter.findOneAndUpdate( { _id: 'supplier_id' }, { $inc: { seq: 1 } }, { upsert: true, new: true } ); return result.seq; }; const supplierSchema = new mongoose.Schema( { suppliername: { type: String }, phone: { type: String, unique: true, trim: true }, supplierId: {type : String, default: null}, phoneVerified: { type: Boolean, default: false }, phoneVerificationCode: { type: Number, default: 11111 }, passwordResetCode: { type: Number, default: code }, oneTimePasswordSetFlag: { type: Boolean, default: false }, emails: [{ email: String, verified: { type: Boolean, default: false } }], services: { password: { bcrypt: String } }, description: {type : String, default: null}, startingPrice : { type : String, default: 0.0}, profile: { role: [{ type: String, default: "supplier" }], 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' }, // currentGPS: { // // It's important to define type within type field, because // // mongoose use "type" to identify field's object type. // gpsType: { type: String, default: "Point" }, // // Default value is needed. Mongoose pass an empty array to // // array type by default, but it will fail MongoDB's pre-save // // validation. // coordinates: { type: [Number], default: [0, 0] }, // }, // location: { // type: { type: String }, // coordinates: [Number] // }, 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 } ); // const deliveryAgent = new mongoose.Schema({ // deliveryboyId : { type: String, default: null }, // deliveryboyname : { type: String }, // vechilenumber : { type: String, default: null }, // bookingid : { type: String, default: null }, // status: { // type: String, // enum: ['complete', 'pending'], // default: 'pending' // }, // }) const friendRequestSchema = new mongoose.Schema({ customerId: { type: String, default: null }, supplierId: { type: String, default: null }, status: { type: String, default: "pending" }, // timestamp: { type: Date, default: Date.now } timestamp: { type: String, default: moment().format('DD-MM-YY HH:mm:ss') }, }); const deliveryBoySchema = new mongoose.Schema({ supplierId:{ type: String, default: null }, suppliername:{ type: String, default: null }, name: { type: String, default: null }, phone: { type: String, default: null,unique:true }, alternativeContactNumber : { type : String,default: null }, phoneVerified: { type: Boolean, default: false }, phoneVerificationCode: { type: Number, default: 11111 }, passwordResetCode: { type: Number, default: code }, oneTimePasswordSetFlag: { type: Boolean, default: false }, address: { type: String, default: null }, city: { type: String, default: null }, state: { type: String, default: null }, zip: { type: String, default: null }, timestamp: { type: Date, default: Date.now }, status: { type: String, default: "Inactive" }, longitude: { type : Number,default: 0.0}, latitude: {type: Number,default: 0.0}, fcmId: { type: String, default: null }, }); const profilePictureSupplierSchema = new Schema({ supplierId: { 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 Supplier = mongoose.model("Supplier", supplierSchema); //const DeliveryAgent = mongoose.model("DeliveryAgent", deliveryAgent); const FriendRequest = mongoose.model('FriendRequest', friendRequestSchema); const DeliveryBoy = mongoose.model('DeliveryBoy', deliveryBoySchema); const profilePictureSupplier = mongoose.model('ProfilePictureSupplier', profilePictureSupplierSchema); module.exports = { Supplier, generateSupplierId, FriendRequest,DeliveryBoy, profilePictureSupplier}