const mongoose = require('mongoose') const mongoosePaginate = require('mongoose-paginate-v2') const timestamp = require('mongoose-timestamp') const userSchema = new mongoose.Schema({ mobile: { type: String, required: false, trim: true, unique: true }, otp: { type: String, required: false, trim: true, minLength: 6, maxLength: 6, default: null }, user_name: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, password: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, first_name: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, last_name: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, user_type: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, is_verified: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: 'none' }, profile_image: { type: String, required: false, trim: true, default: null }, national_card_image: { type: String, required: false, trim: true, default: null }, expertise: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, sub_expertise: { type: [String], // تغییر نوع به آرایه از استرینگ required: false, trim: true, minLength: 1, maxLength: 255, default: null }, gender: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, height: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, weight: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, size: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, eye_color: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, hair_color: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, cooperation_type: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, cooperation_abroad: { type: Boolean, required: false, default: null }, conversation_projects: { type: Boolean, required: false, default: null }, bio: { type: String, required: false, minLength: 1, maxLength: 1024, default: null }, national_code: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, birthday: { type: Date, required: false, default: null }, is_Register: { type: String, default: false }, shaba: { type: String, required: false, trim: true, minLength: 1, maxLength: 255, default: null }, address: { type: String, trim: true, minLength: 1, maxLength: 512, default: null }, province: { type: Object, default: null }, city: { type: Object, default: null }, lat: { type: String, trim: true, minLength: 1, maxLength: 512, default: null }, lng: { type: String, trim: true, minLength: 1, maxLength: 512, default: null }, show_location: { type: Boolean, required: false, default: null }, rate: { type: String, trim: true, maxLength: 512, default: null }, referral_code: { type: String, trim: true, minLength: 1, maxLength: 512, default: null }, shop_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Shop', default: null }, last_online: { type: Date, // ذخیره تاریخ و زمان آخرین بازدید default: Date.now // تنظیم تاریخ به تاریخ فعلی }, business_license: { type: String, required: false, trim: true, default: null }, user_level: { type: String, trim: true, minLength: 1, maxLength: 512, default: null }, user_score: { type: String, trim: true, minLength: 1, maxLength: 512, default: null }, last_post: { type: Object, default: null }, // user_ratings: [{ // project_id: { // type: mongoose.Schema.Types.ObjectId, // ref: 'Project', // required: true // }, // creator_id: { // type: mongoose.Schema.Types.ObjectId, // ref: 'User', // required: true // }, // rating: { // type: Number, // required: true // }, // comment: { // type: String, // trim: true // } // }], daily_free_request: { type: Number, default: 1 }, last_free_request_date: { type: Date, default: null }, blocked_by: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }], blocked_users: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }], block_status: { type: Boolean, required: false, default: null }, advertising_profiles: [{ type: mongoose.Schema.Types.ObjectId, ref: 'AdvertisingProfile' }], services: [{ title: { type: String, required: true, trim: true }, originalPrice: { type: String, required: true }, discountPrice: { type: String, required: false }, discountPercentage: { type: Number, required: false }, status: { type: String, default: "UnderReview", required: false }, image: { type: String, required: false, trim: true } }], monthly_free_offer: { type: Number, default: 1 }, last_free_offer_date: { type: Date, default: null } // contactInfo: { // phone: String, // mobile: String, // telegramLink: String, // whatsappNumber: String, // instagramLink: String, // saveInfoForNextAds: { type: Boolean, default: false } // }, // adTotalRatings: { // type: Number, // default: 0 // }, // adRatingsCount: { // type: Number, // default: 0 // }, // adAverageRating: { // type: Number, // default: 0 // } }) userSchema.plugin(timestamp) userSchema.plugin(mongoosePaginate) const UserModel = mongoose.model('User', userSchema) module.exports = UserModel