feat: 完善剩余功能

This commit is contained in:
ethan.chen
2025-11-05 14:24:15 +08:00
parent f67a3835fa
commit 73945c40e5
8 changed files with 105 additions and 59 deletions

View File

@@ -5,10 +5,9 @@
import { Hono } from "hono";
import { cors } from "cors";
import { logger } from "logger";
import { ConnectionManager } from "./websocket_manager.ts";
import { getMusicStatus, controlMusic } from "./apple_music.ts";
import { getLyricsData } from "./lyrics.ts";
import { getLyricsData, searchLyrics, saveLyrics, deleteLyrics } from "./lyrics.ts";
export interface ControlRequest {
action: "playpause" | "previous" | "next" | "seek";
@@ -16,7 +15,7 @@ export interface ControlRequest {
}
export interface SearchLyricsRequest {
title: string;
track_name: string;
artist: string;
}
@@ -25,6 +24,17 @@ export interface GetLyricsFromIdRequest {
artist: string;
}
export interface SaveLyricsRequest {
track_name: string;
artist: string;
lyrics: string;
}
export interface DeleteLyricsRequest {
track_name: string;
artist: string;
}
/**
* 注册所有路由
*/
@@ -89,27 +99,50 @@ export function registerRoutes(app: Hono, manager: ConnectionManager): void {
}
});
app.delete("/lyrics", async (c) => {
try {
const body = (await c.req.json()) as DeleteLyricsRequest;
const { track_name, artist } = body;
await deleteLyrics(track_name, artist);
return c.json({ status: "success", message: "歌词删除成功" });
} catch (error) {
return c.json({ status: "error", error: String(error) }, 500);
}
});
// 搜索歌词
app.post("/lyrics/search", async (c) => {
try {
const body = (await c.req.json()) as SearchLyricsRequest;
if (!body.title) {
return c.json({ status: "error", message: "缺少 title 参数" }, 400);
}
// 这里可以实现歌词搜索逻辑
// 暂时返回空结果
const { track_name, artist } = body;
const lyricsData = await searchLyrics(track_name, artist);
return c.json({
status: "success",
lyrics: null,
message: "歌词搜索功能待实现",
songs: [{
name: track_name,
artist: artist,
lyrics: lyricsData,
}],
message: "歌词搜索成功",
});
} catch (error) {
return c.json({ status: "error", error: String(error) }, 500);
}
});
// 保存歌词
app.post("/lyrics/save", async (c) => {
try {
const body = (await c.req.json()) as SaveLyricsRequest;
const { track_name, artist, lyrics } = body;
await saveLyrics(track_name, artist, lyrics, "search");
return c.json({ status: "success", message: "歌词保存成功" });
} catch (error) {
return c.json({ status: "error", error: String(error) }, 500);
}
});
// 根据歌曲信息获取歌词
app.post("/lyrics/get", async (c) => {
try {