音乐数据导入导出
This commit is contained in:
@@ -94,6 +94,17 @@ export async function POST(req: NextRequest) {
|
|||||||
continue;
|
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 = {
|
const userData = {
|
||||||
// 播放记录
|
// 播放记录
|
||||||
playRecords: await db.getAllPlayRecords(username),
|
playRecords: await db.getAllPlayRecords(username),
|
||||||
@@ -103,6 +114,10 @@ export async function POST(req: NextRequest) {
|
|||||||
searchHistory: await db.getSearchHistory(username),
|
searchHistory: await db.getSearchHistory(username),
|
||||||
// 跳过片头片尾配置
|
// 跳过片头片尾配置
|
||||||
skipConfigs: await db.getAllSkipConfigs(username),
|
skipConfigs: await db.getAllSkipConfigs(username),
|
||||||
|
// 音乐播放记录
|
||||||
|
musicPlayRecords: await db.getAllMusicPlayRecords(username),
|
||||||
|
// 音乐歌单(包含歌曲)
|
||||||
|
musicPlaylists: playlistsWithSongs,
|
||||||
// V2用户的加密密码
|
// V2用户的加密密码
|
||||||
passwordV2: finalPasswordV2
|
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`);
|
console.log(`成功导入 ${importedCount} 个用户的user:info`);
|
||||||
|
|||||||
@@ -865,6 +865,25 @@ export abstract class BaseRedisStorage implements IStorage {
|
|||||||
if (skipConfigKeys.length > 0) {
|
if (skipConfigKeys.length > 0) {
|
||||||
await this.withRetry(() => this.adapter.del(skipConfigKeys));
|
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) ----------
|
// ---------- 新版用户存储(使用Hash和Sorted Set) ----------
|
||||||
|
|||||||
Reference in New Issue
Block a user