mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-15 21:57:22 +01:00
Mongoose: use $type as the typeKey (#10789)
* use $type as the typeKey in mongoose * fix and add tests
This commit is contained in:
committed by
Sabe Jones
parent
490531cc76
commit
79c0499672
@@ -69,31 +69,31 @@ export const MAX_CHAT_COUNT = 200;
|
||||
export const MAX_SUBBED_GROUP_CHAT_COUNT = 400;
|
||||
|
||||
export let schema = new Schema({
|
||||
name: {type: String, required: true},
|
||||
summary: {type: String, maxlength: MAX_SUMMARY_SIZE_FOR_GUILDS},
|
||||
name: {$type: String, required: true},
|
||||
summary: {$type: String, maxlength: MAX_SUMMARY_SIZE_FOR_GUILDS},
|
||||
description: String,
|
||||
leader: {type: String, ref: 'User', validate: [v => validator.isUUID(v), 'Invalid uuid.'], required: true},
|
||||
type: {type: String, enum: ['guild', 'party'], required: true},
|
||||
privacy: {type: String, enum: ['private', 'public'], default: 'private', required: true},
|
||||
leader: {$type: String, ref: 'User', validate: [v => validator.isUUID(v), 'Invalid uuid.'], required: true},
|
||||
type: {$type: String, enum: ['guild', 'party'], required: true},
|
||||
privacy: {$type: String, enum: ['private', 'public'], default: 'private', required: true},
|
||||
chat: Array, // Used for backward compatibility, but messages aren't stored here
|
||||
leaderOnly: { // restrict group actions to leader (members can't do them)
|
||||
challenges: {type: Boolean, default: false, required: true},
|
||||
// invites: {type: Boolean, default: false, required: true},
|
||||
challenges: {$type: Boolean, default: false, required: true},
|
||||
// invites: {$type: Boolean, default: false, required: true},
|
||||
// Some group plans prevent members from getting gems
|
||||
getGems: {type: Boolean, default: false},
|
||||
getGems: {$type: Boolean, default: false},
|
||||
},
|
||||
memberCount: {type: Number, default: 1},
|
||||
challengeCount: {type: Number, default: 0},
|
||||
balance: {type: Number, default: 0},
|
||||
memberCount: {$type: Number, default: 1},
|
||||
challengeCount: {$type: Number, default: 0},
|
||||
balance: {$type: Number, default: 0},
|
||||
logo: String,
|
||||
leaderMessage: String,
|
||||
quest: {
|
||||
key: String,
|
||||
active: {type: Boolean, default: false},
|
||||
leader: {type: String, ref: 'User'},
|
||||
active: {$type: Boolean, default: false},
|
||||
leader: {$type: String, ref: 'User'},
|
||||
progress: {
|
||||
hp: Number,
|
||||
collect: {type: Schema.Types.Mixed, default: () => {
|
||||
collect: {$type: Schema.Types.Mixed, default: () => {
|
||||
return {};
|
||||
}}, // {feather: 5, ingot: 3}
|
||||
rage: Number, // limit break / "energy stored in shell", for explosion-attacks
|
||||
@@ -102,34 +102,35 @@ export let schema = new Schema({
|
||||
// Shows boolean for each party-member who has accepted the quest. Eg {UUID: true, UUID: false}. Once all users click
|
||||
// 'Accept', the quest begins. If a false user waits too long, probably a good sign to prod them or boot them.
|
||||
// TODO when booting user, remove from .joined and check again if we can now start the quest
|
||||
members: {type: Schema.Types.Mixed, default: () => {
|
||||
members: {$type: Schema.Types.Mixed, default: () => {
|
||||
return {};
|
||||
}},
|
||||
extra: {type: Schema.Types.Mixed, default: () => {
|
||||
extra: {$type: Schema.Types.Mixed, default: () => {
|
||||
return {};
|
||||
}},
|
||||
},
|
||||
tasksOrder: {
|
||||
habits: [{type: String, ref: 'Task'}],
|
||||
dailys: [{type: String, ref: 'Task'}],
|
||||
todos: [{type: String, ref: 'Task'}],
|
||||
rewards: [{type: String, ref: 'Task'}],
|
||||
habits: [{$type: String, ref: 'Task'}],
|
||||
dailys: [{$type: String, ref: 'Task'}],
|
||||
todos: [{$type: String, ref: 'Task'}],
|
||||
rewards: [{$type: String, ref: 'Task'}],
|
||||
},
|
||||
purchased: {
|
||||
plan: {type: SubscriptionPlanSchema, default: () => {
|
||||
plan: {$type: SubscriptionPlanSchema, default: () => {
|
||||
return {};
|
||||
}},
|
||||
},
|
||||
managers: {type: Schema.Types.Mixed, default: () => {
|
||||
managers: {$type: Schema.Types.Mixed, default: () => {
|
||||
return {};
|
||||
}},
|
||||
categories: [{
|
||||
slug: {type: String},
|
||||
name: {type: String},
|
||||
slug: {$type: String},
|
||||
name: {$type: String},
|
||||
}],
|
||||
}, {
|
||||
strict: true,
|
||||
minimize: false, // So empty objects are returned
|
||||
typeKey: '$type', // So that we can use fields named `type`
|
||||
});
|
||||
|
||||
schema.plugin(baseModel, {
|
||||
|
||||
Reference in New Issue
Block a user