nakama/backend/models/User.js

90 lines
1.9 KiB
JavaScript
Raw Normal View History

2025-11-03 20:35:01 +00:00
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
telegramId: {
type: String,
required: true,
unique: true
},
username: {
type: String,
required: true
},
firstName: String,
lastName: String,
photoUrl: String,
bio: {
type: String,
default: '',
maxlength: 300
},
role: {
type: String,
enum: ['user', 'moderator', 'admin'],
default: 'user'
},
followers: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}],
following: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}],
settings: {
whitelist: {
noFurry: { type: Boolean, default: false },
onlyAnime: { type: Boolean, default: false },
2025-12-01 14:26:18 +00:00
// Скрыть контент 18+
noNSFW: { type: Boolean, default: false },
// Скрыть гомосексуальный контент
noHomo: { type: Boolean, default: true }
2025-11-03 20:35:01 +00:00
},
searchPreference: {
type: String,
2025-11-10 20:13:22 +00:00
enum: ['furry', 'anime'],
default: 'furry'
2025-11-03 20:35:01 +00:00
}
},
2025-11-10 20:13:22 +00:00
lastActiveAt: {
type: Date,
default: Date.now
},
2025-11-03 20:35:01 +00:00
banned: {
type: Boolean,
default: false
},
bannedUntil: Date,
2025-12-04 17:44:05 +00:00
// Реферальная система
referralCode: {
type: String,
unique: true,
sparse: true
},
referredBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
referralsCount: {
type: Number,
default: 0
},
2025-11-03 20:35:01 +00:00
createdAt: {
type: Date,
default: Date.now
}
});
2025-12-04 17:44:05 +00:00
// Генерировать реферальный код перед сохранением
UserSchema.pre('save', async function(next) {
if (!this.referralCode) {
// Генерировать уникальный код на основе telegramId
const code = `ref_${this.telegramId.slice(-8)}${Math.random().toString(36).substring(2, 6)}`.toUpperCase();
this.referralCode = code;
}
next();
});
2025-11-03 20:35:01 +00:00
module.exports = mongoose.model('User', UserSchema);