Add /music/sources endpoint to list playable music sources
Introduced a new GET route `/music/sources` to retrieve supported music source types. Added `MusicSourceResponse` DTO for OpenAPI schema integration and implemented filtering logic to exclude unsupported types. Updated `MusicRoutes` to register the new endpoint.
This commit is contained in:
1 parent
88298380f8
commit
22621e3912
2 files changed
+35
No files matched your search
@@ -19,18 +19,21 @@ import io.javalin.openapi.OpenApiResponse;
|
|||||||
import me.bobert.netneutrality.core.command.CommandExecutionResult;
|
import me.bobert.netneutrality.core.command.CommandExecutionResult;
|
||||||
import me.bobert.netneutrality.http.server.dto.CommandResultResponse;
|
import me.bobert.netneutrality.http.server.dto.CommandResultResponse;
|
||||||
import me.bobert.netneutrality.http.server.dto.ErrorResponse;
|
import me.bobert.netneutrality.http.server.dto.ErrorResponse;
|
||||||
|
import me.bobert.netneutrality.http.server.dto.MusicSourceResponse;
|
||||||
import me.bobert.netneutrality.http.server.dto.MusicStatusResponse;
|
import me.bobert.netneutrality.http.server.dto.MusicStatusResponse;
|
||||||
import me.bobert.netneutrality.http.server.dto.QueuedTrackResponse;
|
import me.bobert.netneutrality.http.server.dto.QueuedTrackResponse;
|
||||||
import me.bobert.netneutrality.http.server.dto.VolumeRequest;
|
import me.bobert.netneutrality.http.server.dto.VolumeRequest;
|
||||||
import me.bobert.netneutrality.http.server.dto.VolumeResponse;
|
import me.bobert.netneutrality.http.server.dto.VolumeResponse;
|
||||||
import me.bobert.netneutrality.music.MusicManager;
|
import me.bobert.netneutrality.music.MusicManager;
|
||||||
import me.bobert.netneutrality.music.MusicService;
|
import me.bobert.netneutrality.music.MusicService;
|
||||||
|
import me.bobert.netneutrality.music.SourceFinder;
|
||||||
import me.bobert.netneutrality.music.TrackInfo;
|
import me.bobert.netneutrality.music.TrackInfo;
|
||||||
import net.dv8tion.jda.api.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.api.entities.Guild;
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
import net.dv8tion.jda.api.entities.Member;
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel;
|
import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
@@ -48,6 +51,7 @@ public final class MusicRoutes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void register(RoutesConfig routes, Supplier<JDA> jdaSupplier, MusicService musicService) {
|
public static void register(RoutesConfig routes, Supplier<JDA> jdaSupplier, MusicService musicService) {
|
||||||
|
routes.get("/music/sources", MusicRoutes::sources);
|
||||||
routes.get("/music/{guildId}/status", ctx -> status(jdaSupplier, musicService, ctx));
|
routes.get("/music/{guildId}/status", ctx -> status(jdaSupplier, musicService, ctx));
|
||||||
routes.get("/music/{guildId}/queue", ctx -> queue(jdaSupplier, musicService, ctx));
|
routes.get("/music/{guildId}/queue", ctx -> queue(jdaSupplier, musicService, ctx));
|
||||||
routes.post("/music/{guildId}/skip", ctx -> skip(jdaSupplier, musicService, ctx));
|
routes.post("/music/{guildId}/skip", ctx -> skip(jdaSupplier, musicService, ctx));
|
||||||
@@ -56,6 +60,22 @@ public final class MusicRoutes {
|
|||||||
routes.post("/music/{guildId}/vote-skip/{userId}", ctx -> voteSkip(jdaSupplier, musicService, ctx));
|
routes.post("/music/{guildId}/vote-skip/{userId}", ctx -> voteSkip(jdaSupplier, musicService, ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OpenApi(
|
||||||
|
path = "/music/sources",
|
||||||
|
methods = HttpMethod.GET,
|
||||||
|
summary = "List the music sources the bot can play tracks from",
|
||||||
|
tags = {"Music"},
|
||||||
|
responses = @OpenApiResponse(status = "200", content = @OpenApiContent(from = MusicSourceResponse[].class))
|
||||||
|
)
|
||||||
|
private static void sources(Context ctx) {
|
||||||
|
ctx.json(
|
||||||
|
Arrays.stream(SourceFinder.AudioSourceType.values())
|
||||||
|
.filter(type -> type != SourceFinder.AudioSourceType.Nothing)
|
||||||
|
.map(type -> new MusicSourceResponse(type.name()))
|
||||||
|
.toList()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@OpenApi(
|
@OpenApi(
|
||||||
path = "/music/{guildId}/status",
|
path = "/music/{guildId}/status",
|
||||||
methods = HttpMethod.GET,
|
methods = HttpMethod.GET,
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package me.bobert.netneutrality.http.server.dto;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* https://discord.gg/qUa6zNFZsd
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenAPI schema for a {@code /music/sources} entry.
|
||||||
|
*/
|
||||||
|
public record MusicSourceResponse(
|
||||||
|
String name
|
||||||
|
) {
|
||||||
|
}
|
||||||
Reference in new issue
Block a user