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.

60 lines
1.6 KiB
JavaScript

import { store } from "../store.mjs";
import { SessionStore, UserStore } from "../db/schemas.mjs";
export const applyUserRoutes = (router) => {
applyUserRoutesPublic(router);
router.get('/me/currentlyPlaying', async (req, res) => {
const currentlyPlaying = await (await res.locals.user.spotify.local)?.player?.getCurrentlyPlaying('track');
res.status(200);
res.send({ currentlyPlaying });
});
router.get('/me/role', (req, res) => {
res.status(200);
res.send({ role: res.locals.user?.role });
});
};
export const applyUserRoutesPublic = (router) => {
router.get('/users/:userId/info', async (req, res) => {
if (!req.params.userId) {
res.status(400);
res.send({ message: 'userId is missing' });
}
const { userId } = req.params;
const hostDB = await UserStore.findOne().bySpotifyId(userId);
if (!hostDB) {
res.status(400);
res.send({ message: 'user is not registered' });
return;
}
const host = await hostDB?.spotify?.local;
if (!host.player) {
res.status(500);
res.send({ message: 'user is outdated' });
return;
}
try {
const currentlyPlaying = await host.player.getCurrentlyPlaying('track');
res.status(200);
res.send({
currentlyPlaying,
user: {
displayName: host.client.user.displayName,
totalFollowers: host.client.user.totalFollowers,
images: host.client.user.images,
},
});
} catch (e) {
console.log(e);
res.status(500);
res.send({ message: 'server error' });
}
});
};