You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
import mongoose, { model } from "mongoose";
|
|
const { Schema } = mongoose;
|
|
import { findUserBySpotifyId } from "../lib/helpers.mjs";
|
|
|
|
const userSchema = new Schema({
|
|
accessToken: String,
|
|
role: String,
|
|
spotify: {
|
|
refreshToken: String,
|
|
userId: String,
|
|
local: {
|
|
type: Boolean,
|
|
async get(local) {
|
|
if (!local) return false;
|
|
return await findUserBySpotifyId({
|
|
userId: this.spotify.userId,
|
|
refreshToken: this.spotify.refreshToken,
|
|
}, { create: true });
|
|
},
|
|
},
|
|
},
|
|
}, {
|
|
query: {
|
|
bySpotifyId(id) {
|
|
return this.where({ 'spotify.userId': id });
|
|
},
|
|
byAccessToken(accessToken) {
|
|
return this.where({ accessToken });
|
|
},
|
|
},
|
|
});
|
|
|
|
const sessionSchema = new Schema({
|
|
host: userSchema,
|
|
clients: Array,
|
|
queue: Array,
|
|
}, {
|
|
query: {
|
|
async byHostSpotifyId(id) {
|
|
const _id = (await UserStore.findOne().bySpotifyId(id))._id;
|
|
return this.where({ 'host._id': _id });
|
|
},
|
|
async byClientSpotifyId(id) {
|
|
const _id = (await UserStore.findOne().bySpotifyId(id))._id;
|
|
return this.where({ 'clients._id': _id });
|
|
},
|
|
async bySpotifyId(id) {
|
|
const _id = (await UserStore.findOne().bySpotifyId(id))._id;
|
|
return this.where({ '$or': [
|
|
{ 'host._id': _id },
|
|
{ 'clients._id': _id },
|
|
]});
|
|
},
|
|
},
|
|
});
|
|
|
|
export const UserStore = model('User', userSchema);
|
|
export const SessionStore = model('Session', sessionSchema);
|