v3: added playlist moderation permission
All checks were successful
Build and Publish Docker Image / build-and-push (push) Successful in 43s

This commit is contained in:
khannurien
2026-06-28 06:37:23 +00:00
parent 4fb5caa146
commit 551e29c564
8 changed files with 99 additions and 66 deletions

View File

@@ -8,6 +8,7 @@ import {
isUpdatePlaylistRequest,
} from "../model/interfaces.ts";
import { authMiddleware, type AuthState } from "../middleware/auth.ts";
import { can } from "../lib/permissions.ts";
import {
addDumpToPlaylist,
createPlaylist,
@@ -72,13 +73,18 @@ router.put("/:playlistId", authMiddleware, async (ctx) => {
ctx.params.playlistId,
body,
ctx.state.user.userId,
can(ctx.state.user, "playlist:moderate"),
);
ctx.response.body = { success: true, data: playlist };
});
// DELETE /api/playlists/:playlistId
router.delete("/:playlistId", authMiddleware, (ctx) => {
deletePlaylist(ctx.params.playlistId, ctx.state.user.userId);
deletePlaylist(
ctx.params.playlistId,
ctx.state.user.userId,
can(ctx.state.user, "playlist:moderate"),
);
ctx.response.status = 204;
});
@@ -88,6 +94,7 @@ router.post("/:playlistId/dumps/:dumpId", authMiddleware, (ctx) => {
ctx.params.playlistId,
ctx.params.dumpId,
ctx.state.user.userId,
can(ctx.state.user, "playlist:moderate"),
);
ctx.response.status = 204;
});
@@ -98,6 +105,7 @@ router.delete("/:playlistId/dumps/:dumpId", authMiddleware, (ctx) => {
ctx.params.playlistId,
ctx.params.dumpId,
ctx.state.user.userId,
can(ctx.state.user, "playlist:moderate"),
);
ctx.response.status = 204;
});
@@ -129,6 +137,7 @@ router.post("/:playlistId/image", authMiddleware, async (ctx) => {
ctx.params.playlistId,
mime,
ctx.state.user.userId,
can(ctx.state.user, "playlist:moderate"),
);
const filePath = `${PLAYLIST_IMAGES_DIR}/${playlist.id}`;
await Deno.mkdir(PLAYLIST_IMAGES_DIR, { recursive: true });
@@ -166,7 +175,12 @@ router.put("/:playlistId/order", authMiddleware, async (ctx) => {
"Invalid request",
);
}
reorderPlaylist(ctx.params.playlistId, body.dumpIds, ctx.state.user.userId);
reorderPlaylist(
ctx.params.playlistId,
body.dumpIds,
ctx.state.user.userId,
can(ctx.state.user, "playlist:moderate"),
);
ctx.response.body = { success: true, data: null };
});