音乐数据导入导出
This commit is contained in:
@@ -94,6 +94,17 @@ export async function POST(req: NextRequest) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 获取用户的所有歌单
|
||||
const playlists = await db.getUserMusicPlaylists(username);
|
||||
const playlistsWithSongs = [];
|
||||
for (const playlist of playlists) {
|
||||
const songs = await db.getPlaylistSongs(playlist.id);
|
||||
playlistsWithSongs.push({
|
||||
...playlist,
|
||||
songs
|
||||
});
|
||||
}
|
||||
|
||||
const userData = {
|
||||
// 播放记录
|
||||
playRecords: await db.getAllPlayRecords(username),
|
||||
@@ -103,6 +114,10 @@ export async function POST(req: NextRequest) {
|
||||
searchHistory: await db.getSearchHistory(username),
|
||||
// 跳过片头片尾配置
|
||||
skipConfigs: await db.getAllSkipConfigs(username),
|
||||
// 音乐播放记录
|
||||
musicPlayRecords: await db.getAllMusicPlayRecords(username),
|
||||
// 音乐歌单(包含歌曲)
|
||||
musicPlaylists: playlistsWithSongs,
|
||||
// V2用户的加密密码
|
||||
passwordV2: finalPasswordV2
|
||||
};
|
||||
|
||||
@@ -225,6 +225,44 @@ export async function POST(req: NextRequest) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 导入音乐播放记录
|
||||
if (user.musicPlayRecords) {
|
||||
for (const [key, record] of Object.entries(user.musicPlayRecords)) {
|
||||
const [platform, id] = key.split('+');
|
||||
if (platform && id) {
|
||||
await db.saveMusicPlayRecord(username, platform, id, record as any);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 导入音乐歌单
|
||||
if (user.musicPlaylists && Array.isArray(user.musicPlaylists)) {
|
||||
for (const playlist of user.musicPlaylists) {
|
||||
// 创建歌单
|
||||
await db.createMusicPlaylist(username, {
|
||||
id: playlist.id,
|
||||
name: playlist.name,
|
||||
description: playlist.description,
|
||||
cover: playlist.cover,
|
||||
});
|
||||
|
||||
// 导入歌单中的歌曲
|
||||
if (playlist.songs && Array.isArray(playlist.songs)) {
|
||||
for (const song of playlist.songs) {
|
||||
await db.addSongToPlaylist(playlist.id, {
|
||||
platform: song.platform,
|
||||
id: song.id,
|
||||
name: song.name,
|
||||
artist: song.artist,
|
||||
album: song.album,
|
||||
pic: song.pic,
|
||||
duration: song.duration || 0,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`成功导入 ${importedCount} 个用户的user:info`);
|
||||
|
||||
@@ -865,6 +865,25 @@ export abstract class BaseRedisStorage implements IStorage {
|
||||
if (skipConfigKeys.length > 0) {
|
||||
await this.withRetry(() => this.adapter.del(skipConfigKeys));
|
||||
}
|
||||
|
||||
// 删除音乐播放记录
|
||||
await this.withRetry(() => this.adapter.del(this.musicPlayRecordHashKey(userName)));
|
||||
|
||||
// 删除用户的所有歌单
|
||||
const playlistIds = await this.withRetry(() =>
|
||||
this.adapter.zRange(this.musicPlaylistsKey(userName), 0, -1)
|
||||
);
|
||||
if (playlistIds && playlistIds.length > 0) {
|
||||
for (const playlistId of playlistIds) {
|
||||
const id = ensureString(playlistId);
|
||||
// 删除歌单信息
|
||||
await this.withRetry(() => this.adapter.del(this.musicPlaylistKey(id)));
|
||||
// 删除歌单的歌曲列表
|
||||
await this.withRetry(() => this.adapter.del(this.musicPlaylistSongsKey(id)));
|
||||
}
|
||||
}
|
||||
// 删除用户的歌单列表
|
||||
await this.withRetry(() => this.adapter.del(this.musicPlaylistsKey(userName)));
|
||||
}
|
||||
|
||||
// ---------- 新版用户存储(使用Hash和Sorted Set) ----------
|
||||
|
||||
Reference in New Issue
Block a user