user.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import mongoose from "mongoose";
  2. export default {
  3. username: { type: String, required: true },
  4. role: { type: String, default: "user", enum: ["user", "moderator", "admin"], required: true },
  5. email: {
  6. verified: { type: Boolean, default: false, required: true },
  7. verificationToken: String,
  8. address: String
  9. },
  10. avatar: {
  11. type: { type: String, enum: ["gravatar", "initials"], required: true },
  12. url: { type: String, required: false },
  13. color: { type: String, enum: ["blue", "orange", "green", "purple", "teal"], required: false }
  14. },
  15. services: {
  16. password: {
  17. password: String,
  18. reset: {
  19. code: { type: String, min: 8, max: 8 },
  20. expires: { type: Date }
  21. },
  22. set: {
  23. code: { type: String, min: 8, max: 8 },
  24. expires: { type: Date }
  25. }
  26. },
  27. github: {
  28. id: Number,
  29. access_token: String
  30. },
  31. oidc: {
  32. sub: String,
  33. access_token: String
  34. }
  35. },
  36. statistics: {
  37. songsRequested: { type: Number, default: 0, required: true }
  38. },
  39. likedSongsPlaylist: { type: mongoose.Schema.Types.ObjectId },
  40. dislikedSongsPlaylist: { type: mongoose.Schema.Types.ObjectId },
  41. favoriteStations: [{ type: String }],
  42. name: { type: String, required: true },
  43. location: { type: String, default: "" },
  44. bio: { type: String, default: "" },
  45. createdAt: { type: Date, default: Date.now },
  46. preferences: {
  47. orderOfPlaylists: [{ type: mongoose.Schema.Types.ObjectId }],
  48. nightmode: { type: Boolean, default: false, required: true },
  49. autoSkipDisliked: { type: Boolean, default: true, required: true },
  50. activityLogPublic: { type: Boolean, default: false, required: true },
  51. anonymousSongRequests: { type: Boolean, default: false, required: true },
  52. activityWatch: { type: Boolean, default: false, required: true }
  53. },
  54. documentVersion: { type: Number, default: 4, required: true }
  55. };