const mongoose = require("mongoose"); // const dbConnection =require('../config/config.js'); // mongoose.connection = dbConnection; // const { schema } = require('./Asset'); const Schema = mongoose.Schema; const ObjectId = Schema.Types.ObjectId; // Store a random password reset code const code = Math.floor(100000 + Math.random() * 900000); const RoleSchema = new Schema({ name: String }); const userSchema = new mongoose.Schema( { username: { type: String, unique: true, trim: true }, phone: { type: String, unique: true, trim: true }, address: String, 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 } }, profile: { role: [{ type: String, default: "user" }], firstName: { type: String, default: null }, lastName: { type: String, default: null }, contactNumber: { type: String, default: null }, address1: { type: String, default: null }, address2: { type: String, default: null }, city: { type: String, default: null }, state: { type: String, default: null }, country: { type: String, default: null }, zip: { type: String, default: null }, notes: { type: String, default: null }, }, stripeCustomerId: String, stripePaymentIntentId: String, stripeSubscriptionId: String, stripeSubscriptionStatus: { type: Boolean, default: false }, stripePaymentStatus: { type: Boolean, default: false }, stripePlanId: String, stripeAmountReceived: Number, stripeSubscripedOn: { type: Date }, stripeCancelledOn: { type: Date }, stripeData: Object, notes: String, 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] }, }, isActive: Boolean, tenantId: ObjectId, 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("User", userSchema);