83 lines
1.5 KiB
JavaScript
83 lines
1.5 KiB
JavaScript
const { Schema, model } = require("mongoose");
|
|
|
|
const { DSF_AUTH_USER_MODEL_NAME } = require("../../const");
|
|
|
|
const userSchema = new Schema({
|
|
phone_number: {
|
|
type: String,
|
|
required: true,
|
|
unique: true,
|
|
match: /^\+?\d{10,15}$/
|
|
},
|
|
first_name: {
|
|
type: String,
|
|
required: true,
|
|
trim: true
|
|
},
|
|
second_name: {
|
|
type: String,
|
|
required: true,
|
|
trim: true
|
|
},
|
|
role: {
|
|
type: String,
|
|
enum: ["dogsitter", "owner"],
|
|
required: true
|
|
},
|
|
location: {
|
|
type: String,
|
|
required: function() {
|
|
return this.role === "dogsitter";
|
|
}
|
|
},
|
|
price: {
|
|
type: Number,
|
|
min: 0,
|
|
required: function() {
|
|
return this.role === "dogsitter";
|
|
}
|
|
},
|
|
about_me: {
|
|
type: String,
|
|
maxlength: 500
|
|
},
|
|
rating: {
|
|
type: Number,
|
|
min: 0,
|
|
max: 5,
|
|
default: 0
|
|
},
|
|
ratings: {
|
|
type: [Number],
|
|
default: [],
|
|
validate: {
|
|
validator: function(arr) {
|
|
return arr.every(v => v >= 0 && v <= 5);
|
|
},
|
|
message: "Рейтинг должен быть в диапазоне от 0 до 5!"
|
|
}
|
|
},
|
|
tg: {
|
|
type: String,
|
|
match: /^[a-zA-Z0-9_]{5,32}$/
|
|
},
|
|
created: {
|
|
type: Date,
|
|
default: Date.now
|
|
}
|
|
});
|
|
|
|
userSchema.virtual("id").get(function() {
|
|
return this._id.toHexString();
|
|
});
|
|
|
|
userSchema.set("toJSON", {
|
|
virtuals: true,
|
|
versionKey: false,
|
|
transform: function(doc, ret) {
|
|
delete ret._id;
|
|
delete ret.__v;
|
|
}
|
|
});
|
|
|
|
module.exports.User = model(DSF_AUTH_USER_MODEL_NAME, userSchema); |