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.

189 lines
6.2 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,
2 years ago
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,
2 years ago
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({
3 years ago
customerId: { type: String, default: null },
supplierId: { type: String, default: null },
status: { type: String, default: "pending" },
// timestamp: { type: Date, default: Date.now }
2 years ago
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},
2 years ago
fcmId: { type: String, default: null },
});
2 years ago
const profilePictureSupplierSchema = new Schema({
2 years ago
supplierId: {
type: String,
2 years ago
unique: true,
required: true
},
picture: {
2 years ago
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);
},
2 years ago
message: 'Picture must be a JPEG, PNG, or JPG image'
}
}
});
const requestedSupplierSchema = new mongoose.Schema({
supplierId: String,
quoted_amount: Number,
custom_field: String // ✅ New field added here
}, { _id: false });
const requestedBookingSchema = new mongoose.Schema({
customerId: { type: String, required: true },
type_of_water: String,
capacity: String,
quantity: String,
total_required_capacity: Number,
date: String,
time: String,
requested_suppliers: [requestedSupplierSchema],
status: { type: String, default: "pending" },
}, { timestamps: true });
const RequestedBooking = mongoose.model('RequestedBooking', requestedBookingSchema);
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,RequestedBooking}