station.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. module.exports = {
  2. _id: { type: String, lowercase: true, maxlength: 16, minlength: 2, index: true, unique: true, required: true },
  3. type: { type: String, enum: ["official", "community"], required: true },
  4. displayName: { type: String, minlength: 2, maxlength: 32, required: true, unique: true },
  5. description: { type: String, minlength: 2, maxlength: 128, required: true },
  6. paused: { type: Boolean, default: false, required: true },
  7. currentSong: {
  8. songId: { type: String },
  9. title: { type: String },
  10. artists: [{ type: String }],
  11. duration: { type: Number },
  12. skipDuration: { type: Number },
  13. thumbnail: { type: String },
  14. likes: { type: Number, default: -1 },
  15. dislikes: { type: Number, default: -1 },
  16. skipVotes: [{ type: String }],
  17. },
  18. currentSongIndex: { type: Number, default: 0, required: true },
  19. timePaused: { type: Number, default: 0, required: true },
  20. pausedAt: { type: Number, default: 0, required: true },
  21. startedAt: { type: Number, default: 0, required: true },
  22. playlist: { type: Array },
  23. genres: [{ type: String }],
  24. blacklistedGenres: [{ type: String }],
  25. privacy: { type: String, enum: ["public", "unlisted", "private"], default: "private" },
  26. locked: { type: Boolean, default: false },
  27. queue: [{
  28. songId: { type: String, required: true },
  29. title: { type: String },
  30. artists: [{ type: String }],
  31. duration: { type: Number },
  32. skipDuration: { type: Number },
  33. thumbnail: { type: String },
  34. likes: { type: Number, default: -1 },
  35. dislikes: { type: Number, default: -1 },
  36. requestedBy: { type: String, required: true }
  37. }],
  38. owner: { type: String },
  39. privatePlaylist: { type: String },
  40. partyMode: { type: Boolean }
  41. };