Add DJ status check endpoint to music routes
Introduced `/music/{guildId}/dj/{userId}` endpoint to verify if a user has DJ permissions in a specific guild. Added `DjStatusResponse` DTO, integrated the logic into `MusicManager`, and provided OpenAPI documentation for the new route.
This commit is contained in:
1 parent
30ff1602b2
commit
9812e6da41
2 files changed
+46
No files matched your search
@@ -18,6 +18,7 @@ import io.javalin.openapi.OpenApiParam;
|
||||
import io.javalin.openapi.OpenApiRequestBody;
|
||||
import io.javalin.openapi.OpenApiResponse;
|
||||
import me.bobert.netneutrality.http.server.dto.CommandResultResponse;
|
||||
import me.bobert.netneutrality.http.server.dto.DjStatusResponse;
|
||||
import me.bobert.netneutrality.http.server.dto.ErrorResponse;
|
||||
import me.bobert.netneutrality.http.server.dto.MusicSourceResponse;
|
||||
import me.bobert.netneutrality.http.server.dto.MusicStatusResponse;
|
||||
@@ -38,6 +39,7 @@ import me.bobert.netneutrality.music.PlayOutcome;
|
||||
import me.bobert.netneutrality.music.QueueActionResult;
|
||||
import me.bobert.netneutrality.music.SourceFinder;
|
||||
import me.bobert.netneutrality.music.TrackInfo;
|
||||
import me.bobert.netneutrality.utils.MusicUtils;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
@@ -73,6 +75,7 @@ public final class MusicRoutes {
|
||||
routes.put("/music/{guildId}/volume", ctx -> volume(jdaSupplier, musicService, ctx));
|
||||
routes.put("/music/{guildId}/seek", ctx -> seek(jdaSupplier, musicService, ctx));
|
||||
routes.post("/music/{guildId}/vote-skip/{userId}", ctx -> voteSkip(jdaSupplier, musicService, ctx));
|
||||
routes.get("/music/{guildId}/dj/{userId}", ctx -> dj(jdaSupplier, musicService, ctx));
|
||||
routes.post("/music/{guildId}/queue", ctx -> play(jdaSupplier, musicService, ctx));
|
||||
routes.patch("/music/{guildId}/queue/reorder", ctx -> reorder(jdaSupplier, musicService, ctx));
|
||||
routes.post("/music/{guildId}/search", ctx -> search(jdaSupplier, musicService, ctx));
|
||||
@@ -334,6 +337,33 @@ public final class MusicRoutes {
|
||||
);
|
||||
}
|
||||
|
||||
@OpenApi(
|
||||
path = "/music/{guildId}/dj/{userId}",
|
||||
methods = HttpMethod.GET,
|
||||
summary = "Check whether a guild member is currently allowed to control music playback as the DJ",
|
||||
tags = {"Music"},
|
||||
pathParams = {
|
||||
@OpenApiParam(name = "guildId", description = "The Discord guild id"),
|
||||
@OpenApiParam(name = "userId", description = "The Discord user id to check")
|
||||
},
|
||||
responses = {
|
||||
@OpenApiResponse(status = "200", content = @OpenApiContent(from = DjStatusResponse.class)),
|
||||
@OpenApiResponse(status = "404", content = @OpenApiContent(from = ErrorResponse.class))
|
||||
}
|
||||
)
|
||||
private static void dj(Supplier<JDA> jdaSupplier, MusicService musicService, Context ctx) {
|
||||
Guild guild = GuildRoutes.guild(jdaSupplier, ctx);
|
||||
MusicManager manager = musicService.get(guild);
|
||||
String userId = ctx.pathParam("userId");
|
||||
|
||||
CacheOrFetch.<Member>resolve(
|
||||
ctx,
|
||||
() -> guild.getMemberById(userId),
|
||||
() -> guild.retrieveMemberById(userId),
|
||||
member -> new DjStatusResponse(userId, MusicUtils.isUserDj(member, manager))
|
||||
);
|
||||
}
|
||||
|
||||
@OpenApi(
|
||||
path = "/music/{guildId}/queue",
|
||||
methods = HttpMethod.POST,
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package me.bobert.netneutrality.http.server.dto;
|
||||
|
||||
/*
|
||||
* Copyright (c) anthorob
|
||||
*
|
||||
* https://discord.gg/qUa6zNFZsd
|
||||
*/
|
||||
|
||||
/**
|
||||
* OpenAPI schema for the {@code /music/{guildId}/dj/{userId}} response.
|
||||
*/
|
||||
public record DjStatusResponse(
|
||||
String userId,
|
||||
boolean isDj
|
||||
) {
|
||||
}
|
||||
Reference in new issue
Block a user