mirror of
https://github.com/20kaushik02/spotify-manager.git
synced 2026-01-25 06:04:05 +00:00
MASSIVE commit
- moved to typescript - axios rate limitmodule is busted, removed for now, do something else for that - sequelize-typescript - dotenv, not dotenv-flow - removed playlist details route types for API ton of minor fixes and improvements
This commit is contained in:
55
controllers/playlists.ts
Normal file
55
controllers/playlists.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import {
|
||||
getCurrentUsersPlaylistsFirstPage,
|
||||
getCurrentUsersPlaylistsNextPage,
|
||||
} from "../api/spotify.ts";
|
||||
|
||||
import type { RequestHandler } from "express";
|
||||
import type {
|
||||
Pagination,
|
||||
SimplifiedPlaylistObject,
|
||||
} from "spotify_manager/index.d.ts";
|
||||
|
||||
import curriedLogger from "../utils/logger.ts";
|
||||
const logger = curriedLogger(import.meta.filename);
|
||||
|
||||
/**
|
||||
* Get user's playlists
|
||||
*/
|
||||
const fetchUserPlaylists: RequestHandler = async (req, res) => {
|
||||
try {
|
||||
// get first 50
|
||||
const respData = await getCurrentUsersPlaylistsFirstPage({ req, res });
|
||||
if (!respData) return null;
|
||||
|
||||
let tmpData = structuredClone(respData);
|
||||
const userPlaylists: Pick<
|
||||
Pagination<SimplifiedPlaylistObject>,
|
||||
"items" | "total"
|
||||
> = {
|
||||
items: [...tmpData.items],
|
||||
total: tmpData.total,
|
||||
};
|
||||
let nextURL = respData.next;
|
||||
// keep getting batches of 50 till exhausted
|
||||
while (nextURL) {
|
||||
const nextData = await getCurrentUsersPlaylistsNextPage({
|
||||
req,
|
||||
res,
|
||||
nextURL,
|
||||
});
|
||||
if (!nextData) return null;
|
||||
|
||||
userPlaylists.items.push(...nextData.items);
|
||||
nextURL = nextData.next;
|
||||
}
|
||||
|
||||
res.status(200).send(userPlaylists);
|
||||
logger.debug("Fetched user playlists", { num: userPlaylists.total });
|
||||
return null;
|
||||
} catch (error) {
|
||||
res.status(500).send({ message: "Internal Server Error" });
|
||||
logger.error("fetchUserPlaylists", { error });
|
||||
return null;
|
||||
}
|
||||
};
|
||||
export { fetchUserPlaylists };
|
||||
Reference in New Issue
Block a user