You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							167 lines
						
					
					
						
							5.6 KiB
						
					
					
				
			
		
		
	
	
							167 lines
						
					
					
						
							5.6 KiB
						
					
					
				| 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}
 | |
| 
 | |
| 
 |