You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
4.2 KiB

7 years ago
  1. var mongoose = require('mongoose');
  2. var mongooseUniqueValidator = require('mongoose-unique-validator');
  3. var Schema = mongoose.Schema;
  4. var userSchema = new Schema({
  5. name: {type: String, required: true, unique: true},
  6. role: {type: String, required: true},
  7. password: {type: String, select: false},
  8. tokens: [{
  9. userAgent: {type: String},
  10. token: {type: String},
  11. os: {type: String},
  12. browser: {type: String},
  13. device: {type: String},
  14. os_version: {type: String},
  15. browser_version: {type: String},
  16. ip: {type: String},
  17. lastLogin: {type: Date},
  18. birthdate: {type: Date},
  19. }],
  20. testimonial: {type :String},//Para la landing page, sera como una review del sitio
  21. email: {type: String, required: true, unique: true},
  22. description: {type: String},
  23. direction: {type: String},
  24. city: {type: String},
  25. avatar: {type: String},
  26. background: {type: String},
  27. attributes: {
  28. height: {type: Number},
  29. weight: {type: Number},
  30. gender: {type: String},//Home, Dona, Altres -->com a mínim aquestes 3 opcions, més endavant tenim el debat de com s'enfoca
  31. age: {type: Number}
  32. },
  33. publications: [{
  34. type: mongoose.Schema.Types.ObjectId,
  35. ref: 'publicationModel'
  36. }],
  37. runs: [{
  38. type: mongoose.Schema.Types.ObjectId,
  39. ref: 'runModel'
  40. }],
  41. totalkm: {type: Number},
  42. conversations: [{
  43. type: mongoose.Schema.Types.ObjectId,
  44. ref: 'conversationModel'
  45. }],
  46. diets: [{
  47. type: mongoose.Schema.Types.ObjectId,
  48. ref: 'dietModel'
  49. }],
  50. trainers: [{
  51. type: mongoose.Schema.Types.ObjectId,
  52. ref: 'userModel'
  53. }],
  54. routines: [{
  55. type: mongoose.Schema.Types.ObjectId,
  56. ref: 'routineModel'
  57. }],// trainermodel
  58. disciplines : [{
  59. name: {type: String}
  60. }],
  61. specialties : [{
  62. name: {type: String}
  63. }],
  64. clients: [{
  65. client: {
  66. type: mongoose.Schema.Types.ObjectId,
  67. ref: 'userModel'
  68. },
  69. petitionMessage: {type: String},
  70. date: {type: Date}
  71. }],
  72. clientsPetitions: [{
  73. clientid: {
  74. type: mongoose.Schema.Types.ObjectId,
  75. ref: 'userModel'
  76. },
  77. message: {type: String},
  78. state: {type: String}//pendent, accepted, declined
  79. }],
  80. valoration: {type:String}, //La media de todas las valoraciones
  81. valorations: [{
  82. clientid: {
  83. type: mongoose.Schema.Types.ObjectId,
  84. ref: 'userModel'
  85. },
  86. date: {type: Date},
  87. message: {type: String},//missatge de valoració
  88. value: {type: Number}//per exemple sistema d'estrelles sobre 5
  89. }],//end of trainermodel
  90. points: {
  91. total: {type: Number},
  92. history: [{
  93. concept: {type: String},
  94. date: {type: Date},
  95. value: {type: Number}
  96. }]
  97. },
  98. marks: [{
  99. title: {type: String},
  100. unit: {type: String},//si són kg, km
  101. best: {
  102. date: {type: Date},
  103. value: {type: String}
  104. },
  105. days:[{
  106. date: {type: Date},
  107. value: {type: String}
  108. }]
  109. }],
  110. notifications: [{
  111. state: {type: String},//viewed, pendent
  112. message: {type: String},
  113. link: {type: String},//aquí oju, a la app i a la web calen links diferents, però ho podem fer posant sempre a la app i a la web el prefix del link (#!/app) o (#/app/), i després afegint-hi la pàgina on volem enviar el routing, per exemple (dashboard)
  114. icon: {type: String},
  115. date: {type: Date},
  116. dateviewed: {type: Date}
  117. }],
  118. followers: [{
  119. type: mongoose.Schema.Types.ObjectId,
  120. ref: 'userModel'
  121. }],
  122. following: [{
  123. type: mongoose.Schema.Types.ObjectId,
  124. ref: 'userModel'
  125. }],
  126. google: {
  127. id: {type: String},
  128. token: {type: String},
  129. email: {type: String},
  130. name: {type: String},
  131. },
  132. twitter: {
  133. id: {type: String},
  134. token: {type: String},
  135. email: {type: String},
  136. name: {type: String},
  137. }
  138. });
  139. userSchema.plugin(mongooseUniqueValidator);
  140. module.exports = mongoose.model('userModel', userSchema);