134 lines
2.7 KiB
JavaScript
134 lines
2.7 KiB
JavaScript
const mongoose = require("mongoose");
|
|
const constant = require('../util/constant');
|
|
|
|
const userSchema = new mongoose.Schema({
|
|
userName: {
|
|
type: String,
|
|
unique: true,
|
|
default: function () {
|
|
let username = 'guest' + Math.floor(Math.random() * 10000);
|
|
return username;
|
|
}
|
|
},
|
|
image: {
|
|
|
|
fileName: {
|
|
type: String,
|
|
},
|
|
fileAddress: {
|
|
type: String,
|
|
}
|
|
|
|
},
|
|
|
|
imageUrl:{
|
|
type: String
|
|
},
|
|
firstName:{
|
|
type: String,
|
|
// required: true
|
|
},
|
|
lastName:{
|
|
type: String,
|
|
// required: true
|
|
|
|
},
|
|
|
|
address:{
|
|
|
|
type: String,
|
|
|
|
},
|
|
mobileNo:{
|
|
type: Number
|
|
|
|
},
|
|
|
|
email: {
|
|
type: String,
|
|
required: true,
|
|
lowercase: true, // it will covert the email into the lower case and then store in the db,
|
|
minLength: 10, // anything less than 10 will fail
|
|
unique: true
|
|
|
|
},
|
|
password: {
|
|
type: String,
|
|
},
|
|
userTypes: {
|
|
type: String,
|
|
enum: [constant.userTypes.admin, constant.userTypes.customer],
|
|
default: constant.userTypes.customer
|
|
|
|
},
|
|
status: {
|
|
type: String,
|
|
enum: ['Active', 'Deactive'],
|
|
default: 'Active'
|
|
|
|
},
|
|
registerWith: {
|
|
type: String,
|
|
enum: [constant.registerWith.Email, constant.registerWith.google, constant.registerWith.facebook],
|
|
default: constant.registerWith.Email
|
|
},
|
|
playlist: {
|
|
type: [mongoose.Schema.Types.ObjectId],
|
|
ref: 'PlayList'
|
|
},
|
|
favrioteSongs: {
|
|
type: [mongoose.Schema.Types.ObjectId],
|
|
ref: 'Song',
|
|
},
|
|
mostPlayedSongs: {
|
|
type: Object,
|
|
ref: 'Song',
|
|
default: {}
|
|
},
|
|
following: {
|
|
type: [mongoose.Schema.Types.ObjectId],
|
|
ref: 'Artist'
|
|
},
|
|
score: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
otp : Number,
|
|
|
|
createdAt: {
|
|
// I want to default to a new date
|
|
type: Date,
|
|
immutable: true, // This will ensure the createdAt column is never updated but once in the start
|
|
default: () => {
|
|
return Date.now();
|
|
}
|
|
},
|
|
updatedAt: {
|
|
type: Date,
|
|
default: () => {
|
|
return Date.now();
|
|
}
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
userSchema.pre('deleteOne', async function (next) {
|
|
const userId = this.getFilter()['_id'];
|
|
const Artist = require('../models/artist.model');
|
|
|
|
const artist = await Artist.find({
|
|
followers: userId
|
|
})
|
|
|
|
const artistPromises = artist.map(artist => {
|
|
artist.followers.pull(userId);
|
|
return artist.save();
|
|
})
|
|
|
|
await Promise.all(artistPromises);
|
|
|
|
})
|
|
|
|
module.exports = mongoose.model("User", userSchema); |