diff --git a/src/schemas/channel/channelSchema.js b/src/schemas/channel/channelSchema.js index bbf72c5..0ae1dbb 100644 --- a/src/schemas/channel/channelSchema.js +++ b/src/schemas/channel/channelSchema.js @@ -30,7 +30,7 @@ const emoteModel = require('../emoteSchema'); const channelPermissionSchema = require('./channelPermissionSchema'); const channelBanSchema = require('./channelBanSchema'); const queuedMediaSchema = require('./media/queuedMediaSchema'); -const playlistSchema = require('./media/playlistSchema'); +const playlistSchema = require('./media/playlist/playlistSchema'); const chatSchema = require('./chatSchema'); //Utils const { exceptionHandler, errorHandler } = require('../../utils/loggerUtils'); diff --git a/src/schemas/channel/media/playlist/channelPlaylistSchema.js b/src/schemas/channel/media/playlist/channelPlaylistSchema.js new file mode 100644 index 0000000..e6d7bc7 --- /dev/null +++ b/src/schemas/channel/media/playlist/channelPlaylistSchema.js @@ -0,0 +1,40 @@ +/*Canopy - The next generation of stoner streaming software +Copyright (C) 2024-2025 Rainbownapkin and the TTN Community + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see .*/ + +//NPM Imports +const {mongoose} = require('mongoose'); + +//Local Imports +const playlistSchema = require('./playlistSchema'); + +/** + * DB Schema for Documents representing channel playlists + */ +const channelPlaylistProperties = new mongoose.Schema({ + channel: { + type: mongoose.SchemaTypes.ObjectID, + ref: "channel", + required: true + } +}, +{ + discriminatorKey: 'location' +}); +//Create 'channelPlaylistSchema' as descriminator of playlistSchema +var channelPlaylistSchema = playlistSchema.discriminator('channel', channelPlaylistProperties); + +//Export mongoose model based on channelPlaylistSchema +module.exports = mongoose.model("channelPlaylists", channelPlaylistSchema); \ No newline at end of file diff --git a/src/schemas/channel/media/playlistMediaSchema.js b/src/schemas/channel/media/playlist/playlistMediaSchema.js similarity index 95% rename from src/schemas/channel/media/playlistMediaSchema.js rename to src/schemas/channel/media/playlist/playlistMediaSchema.js index 4a61829..7cab31b 100644 --- a/src/schemas/channel/media/playlistMediaSchema.js +++ b/src/schemas/channel/media/playlist/playlistMediaSchema.js @@ -18,8 +18,8 @@ along with this program. If not, see .*/ const {mongoose} = require('mongoose'); //Local Imports -const mediaSchema = require('./mediaSchema'); -const media = require('../../../app/channel/media/media'); +const mediaSchema = require('../mediaSchema'); +const media = require('../../../../app/channel/media/media'); /** * DB Schema for documents represnting a piece of media held in a playlist diff --git a/src/schemas/channel/media/playlistSchema.js b/src/schemas/channel/media/playlist/playlistSchema.js similarity index 99% rename from src/schemas/channel/media/playlistSchema.js rename to src/schemas/channel/media/playlist/playlistSchema.js index e78ce9e..5246605 100644 --- a/src/schemas/channel/media/playlistSchema.js +++ b/src/schemas/channel/media/playlist/playlistSchema.js @@ -34,6 +34,9 @@ const playlistSchema = new mongoose.Schema({ required: false, default: [] }] +}, +{ + discriminatorKey: 'location' }); //methods diff --git a/src/schemas/channel/media/playlist/userPlaylistSchema.js b/src/schemas/channel/media/playlist/userPlaylistSchema.js new file mode 100644 index 0000000..1dedcdc --- /dev/null +++ b/src/schemas/channel/media/playlist/userPlaylistSchema.js @@ -0,0 +1,40 @@ +/*Canopy - The next generation of stoner streaming software +Copyright (C) 2024-2025 Rainbownapkin and the TTN Community + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see .*/ + +//NPM Imports +const {mongoose} = require('mongoose'); + +//Local Imports +const playlistSchema = require('./playlistSchema'); + +/** + * DB Schema for Documents representing user playlists + */ +const userPlaylistProperties = new mongoose.Schema({ + user:{ + type: mongoose.SchemaTypes.ObjectID, + ref: "user", + required: true + } +}, +{ + discriminatorKey: 'location' +}); +//Create 'userPlaylistSchema' as descriminator of playlistSchema +var userPlaylistSchema = playlistSchema.discriminator('user', userPlaylistProperties); + +//Export mongoose model based on userPlaylistSchema +module.exports = mongoose.model("userPlaylists", userPlaylistSchema); \ No newline at end of file diff --git a/src/schemas/user/userSchema.js b/src/schemas/user/userSchema.js index 783b241..32e9f6c 100644 --- a/src/schemas/user/userSchema.js +++ b/src/schemas/user/userSchema.js @@ -27,7 +27,7 @@ const flairModel = require('../flairSchema'); const permissionModel = require('../permissionSchema'); const emoteModel = require('../emoteSchema'); const emailChangeModel = require('./emailChangeSchema'); -const playlistSchema = require('../channel/media/playlistSchema'); +const playlistSchema = require('../channel/media/playlist/playlistSchema'); const rememberMeModel = require('./rememberMeSchema'); //Utils const hashUtil = require('../../utils/hashUtils');