44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import express from 'express';
|
|
|
|
import { albumcache } from '..';
|
|
import { logger } from '../logger';
|
|
import { deezerInstance } from '../deemix';
|
|
|
|
const router = express.Router();
|
|
|
|
router.get('/api/album', async (req, res) => {
|
|
if (!req.query.id) return res.sendStatus(400);
|
|
if (Array.isArray(req.query.id)) req.query.id = req.query.id.join('');
|
|
req.query.id = req.query.id as string;
|
|
|
|
let album: Album;
|
|
try {
|
|
album = albumcache[req.query.id] || (await deezerInstance.api.get_album(req.query.id));
|
|
if (!albumcache[req.query.id]) albumcache[req.query.id] = album;
|
|
} catch (err) {
|
|
logger.error((err as Error).toString());
|
|
return res.status(404).send('Album not found!');
|
|
}
|
|
|
|
res.send({
|
|
id: album.id,
|
|
title: album.title,
|
|
link: album.link,
|
|
releaseDate: album.release_date,
|
|
explicitCover: album.explicit_content_cover,
|
|
tracks: await Promise.all(album.tracks.data.map(async ({id}) => {
|
|
const t = await deezerInstance.api.get_track(id);
|
|
return {
|
|
id: t.id,
|
|
title: t.title,
|
|
duration: t.duration,
|
|
link: t.link,
|
|
artist: t.artist.name,
|
|
explicit: t.explicit_content_lyrics,
|
|
contributors: t.contributors
|
|
};
|
|
}))
|
|
});
|
|
});
|
|
|
|
export default router; |