station.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import mongoose from "mongoose";
  2. export default {
  3. name: { type: String, lowercase: true, maxlength: 16, minlength: 2, index: true, unique: true, required: true },
  4. type: { type: String, enum: ["official", "community"], required: true },
  5. displayName: { type: String, minlength: 2, maxlength: 32, required: true, unique: true },
  6. description: { type: String, minlength: 2, maxlength: 128, required: true },
  7. paused: { type: Boolean, default: false, required: true },
  8. currentSong: {
  9. _id: { type: String },
  10. songId: { type: String },
  11. title: { type: String },
  12. artists: [{ type: String }],
  13. duration: { type: Number },
  14. skipDuration: { type: Number },
  15. thumbnail: { type: String },
  16. likes: { type: Number, default: -1 },
  17. dislikes: { type: Number, default: -1 },
  18. skipVotes: [{ type: String }],
  19. requestedAt: { type: Date }
  20. },
  21. currentSongIndex: { type: Number, default: 0, required: true },
  22. timePaused: { type: Number, default: 0, required: true },
  23. pausedAt: { type: Number, default: 0, required: true },
  24. startedAt: { type: Number, default: 0, required: true },
  25. playlist: { type: Array },
  26. playlist2: { type: mongoose.Schema.Types.ObjectId, required: true },
  27. genres: [{ type: String }],
  28. blacklistedGenres: [{ type: String }],
  29. privacy: { type: String, enum: ["public", "unlisted", "private"], default: "private" },
  30. locked: { type: Boolean, default: false },
  31. queue: [
  32. {
  33. songId: { type: String, required: true },
  34. title: { type: String },
  35. artists: [{ type: String }],
  36. duration: { type: Number },
  37. skipDuration: { type: Number },
  38. thumbnail: { type: String },
  39. likes: { type: Number, default: -1 },
  40. dislikes: { type: Number, default: -1 },
  41. requestedBy: { type: String, required: true },
  42. requestedAt: { type: Date }
  43. }
  44. ],
  45. owner: { type: String },
  46. privatePlaylist: { type: mongoose.Schema.Types.ObjectId },
  47. partyMode: { type: Boolean },
  48. theme: { type: String, enum: ["blue", "purple", "teal", "orange"], default: "blue" },
  49. // includedPlaylists: [{ type: mongoose.Schema.Types.ObjectId }],
  50. // excludedPlaylists: [{ type: mongoose.Schema.Types.ObjectId }],
  51. documentVersion: { type: Number, default: 1, required: true }
  52. };