mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
114 lines
3.7 KiB
JavaScript
114 lines
3.7 KiB
JavaScript
// User.js
|
|
// =======
|
|
// Defines the user data model (schema) for use via the API.
|
|
|
|
// Dependencies
|
|
// ------------
|
|
var mongoose = require("mongoose");
|
|
var Schema = mongoose.Schema;
|
|
var shared = require('../../../common');
|
|
var _ = require('lodash');
|
|
var moment = require('moment');
|
|
|
|
// Task Schema
|
|
// -----------
|
|
|
|
var TaskSchema = {
|
|
//_id:{type: String,'default': helpers.uuid},
|
|
id: {type: String,'default': shared.uuid},
|
|
dateCreated: {type:Date, 'default':Date.now},
|
|
text: String,
|
|
notes: {type: String, 'default': ''},
|
|
tags: {type: Schema.Types.Mixed, 'default': {}}, //{ "4ddf03d9-54bd-41a3-b011-ca1f1d2e9371" : true },
|
|
value: {type: Number, 'default': 0}, // redness
|
|
priority: {type: Number, 'default': '1'},
|
|
attribute: {type: String, 'default': "str", enum: ['str','con','int','per']},
|
|
challenge: {
|
|
id: {type: 'String', ref:'Challenge'},
|
|
broken: String, // CHALLENGE_DELETED, TASK_DELETED, UNSUBSCRIBED, CHALLENGE_CLOSED
|
|
winner: String // user.profile.name
|
|
// group: {type: 'Strign', ref: 'Group'} // if we restore this, rename `id` above to `challenge`
|
|
},
|
|
reminders: [{
|
|
id: {type:String,'default':shared.uuid},
|
|
startDate: Date,
|
|
time: Date
|
|
}]
|
|
};
|
|
|
|
var HabitSchema = new Schema(
|
|
_.defaults({
|
|
type: {type:String, 'default': 'habit'},
|
|
history: Array, // [{date:Date, value:Number}], // this causes major performance problems
|
|
up: {type: Boolean, 'default': true},
|
|
down: {type: Boolean, 'default': true}
|
|
}, TaskSchema)
|
|
, { _id: false, minimize:false }
|
|
);
|
|
|
|
var collapseChecklist = {type:Boolean, 'default':false};
|
|
var checklist = [{
|
|
completed:{type:Boolean,'default':false},
|
|
text: String,
|
|
_id:false,
|
|
id: {type:String,'default':shared.uuid}
|
|
}];
|
|
|
|
var DailySchema = new Schema(
|
|
_.defaults({
|
|
type: {type: String, 'default': 'daily'},
|
|
frequency: {type: String, 'default': 'weekly', enum: ['daily', 'weekly']},
|
|
everyX: {type: Number, 'default': 1}, // e.g. once every X weeks
|
|
startDate: {type: Date, 'default': moment().startOf('day').toDate()},
|
|
history: Array,
|
|
completed: {type: Boolean, 'default': false},
|
|
repeat: { // used only for 'weekly' frequency,
|
|
m: {type: Boolean, 'default': true},
|
|
t: {type: Boolean, 'default': true},
|
|
w: {type: Boolean, 'default': true},
|
|
th: {type: Boolean, 'default': true},
|
|
f: {type: Boolean, 'default': true},
|
|
s: {type: Boolean, 'default': true},
|
|
su: {type: Boolean, 'default': true}
|
|
},
|
|
collapseChecklist:collapseChecklist,
|
|
checklist:checklist,
|
|
streak: {type: Number, 'default': 0}
|
|
}, TaskSchema)
|
|
, { _id: false, minimize:false }
|
|
)
|
|
|
|
var TodoSchema = new Schema(
|
|
_.defaults({
|
|
type: {type:String, 'default': 'todo'},
|
|
completed: {type: Boolean, 'default': false},
|
|
dateCompleted: Date,
|
|
date: String, // due date for todos // FIXME we're getting parse errors, people have stored as "today" and "3/13". Need to run a migration & put this back to type: Date
|
|
collapseChecklist:collapseChecklist,
|
|
checklist:checklist
|
|
}, TaskSchema)
|
|
, { _id: false, minimize:false }
|
|
);
|
|
|
|
var RewardSchema = new Schema(
|
|
_.defaults({
|
|
type: {type:String, 'default': 'reward'}
|
|
}, TaskSchema)
|
|
, { _id: false, minimize:false }
|
|
);
|
|
|
|
/**
|
|
* Workaround for bug when _id & id were out of sync, we can remove this after challenges has been running for a while
|
|
*/
|
|
//_.each([HabitSchema, DailySchema, TodoSchema, RewardSchema], function(schema){
|
|
// schema.post('init', function(doc){
|
|
// if (!doc.id && doc._id) doc.id = doc._id;
|
|
// })
|
|
//})
|
|
|
|
module.exports.TaskSchema = TaskSchema;
|
|
module.exports.HabitSchema = HabitSchema;
|
|
module.exports.DailySchema = DailySchema;
|
|
module.exports.TodoSchema = TodoSchema;
|
|
module.exports.RewardSchema = RewardSchema;
|