1
0
Code Issues Pull Requests Projects Releases Wiki Activity GitHub Gitee
Files
tools/netease_music/src/dataManager.js

265 lines
11 KiB
JavaScript

const dbUtils = global.dbUtils;
module.exports = {
song: {
insertCollection: async (songInfoList) => {
if (songInfoList.length == 0) return;
// image 因为接口没有返回,所以不更新
let result = await dbUtils.query(`
INSERT INTO song (
song_id, title, type, alias, pop, fee, quality, cd,
no, dj_id, s_id, origin_cover_type, pub_time,
no_copyright_rcmd, mv, single, version, data_version
) VALUES ? ON DUPLICATE KEY UPDATE
title = VALUES(title), type = VALUES(type), alias = VALUES(alias), pop = VALUES(pop), fee = VALUES(fee), quality = VALUES(quality), cd = VALUES(cd),
no = VALUES(no), dj_id = VALUES(dj_id), s_id = VALUES(s_id), origin_cover_type = VALUES(origin_cover_type), pub_time = VALUES(pub_time),
no_copyright_rcmd = VALUES(no_copyright_rcmd), mv = VALUES(mv), single = VALUES(single), version = VALUES(version), data_version = VALUES(data_version)
`, [songInfoList.map(songInfo => [
songInfo.id, songInfo.title, songInfo.type, songInfo.alias, songInfo.pop, songInfo.fee, songInfo.quality, songInfo.cd,
songInfo.no, songInfo.djId, songInfo.sId, songInfo.originCoverType, songInfo.pubTime,
songInfo.noCopyrightRcmd, songInfo.mv, songInfo.single, songInfo.version, 2
])]);
await dbUtils.query(`
DELETE FROM wait_fetch_song WHERE id IN ?
`, [[songInfoList.map(songInfo => songInfo.id)]])
return result;
},
getIdsToFetch: async (args) => {
let whereClause = [
args.min ? `id > ${args.min}` : '1=1',
args.max ? `id <= ${args.max}` : '1=1',
].join(' AND ');
let sql = `
SELECT id FROM wait_fetch_song WHERE ${whereClause}
${args.order ? `ORDER BY id ${args.order}` : ''}
${args.limit ? `LIMIT ${args.limit}` : ''}
`;
// 更新现有数据
// sql = `SELECT song_id FROM song WHERE data_version = 1`;
console.log(sql);
let songIds = await dbUtils.query(sql, []);
songIds = songIds.map(item => item.id);
return songIds;
},
},
album: {
insert: async (albumInfo) => {
return await dbUtils.query('INSERT IGNORE INTO album SET ?', albumInfo);
},
update: async (albumId, albumInfo) => {
return await dbUtils.query(`UPDATE album SET ? WHERE album_id = ${albumId}`, albumInfo);
},
getIdsToFetch: async (args, isUpdate) => {
let sql = "";
if (isUpdate) {
sql = `SELECT album_id FROM album WHERE (full_description = '' or full_description is null) and description like '%专辑《%》,简介:%' and description not regexp '^.*?专辑《.*?》,简介:[:space:]*?。,更多.*$'`;
} else {
let whereClause = [
args.min ? `id > ${args.min}` : '1=1',
args.max ? `id <= ${args.max}` : '1=1',
].join(' AND ');
sql = `
SELECT id FROM wait_fetch_album WHERE ${whereClause}
${args.order ? `ORDER BY id ${args.order}` : ''}
${args.limit ? `LIMIT ${args.limit}` : ''}
`;
}
console.log(sql);
let albumIds = await dbUtils.query(sql, []);
albumIds = albumIds.map(item => item.id);
return albumIds;
},
getInfoById: async (albumId, { getRelation = true }) => {
if (!albumId) return {}
// 查询出专辑
const sql = 'SELECT * FROM album WHERE album_id = ?'
let infoResultSet = await dbUtils.query(sql, [albumId]);
if (infoResultSet.length == 0) return {};
let albumInfo = JSON.parse(JSON.stringify(infoResultSet[0]));
if (getRelation) {
// 查出专辑与歌曲对应关系
const sql2 = 'SELECT * FROM song_album_relation WHERE album_id = ?'
let relationResultSet = await dbUtils.query(sql2, [albumId]);
// 拼装
albumInfo.songIds = relationResultSet.map(song => song.song_id);
} else {
albumInfo.songIds = null;
}
return albumInfo;
},
},
artist: {
insert: async (artistInfo) => {
return await dbUtils.query('INSERT IGNORE INTO artist SET ?', artistInfo);
},
getIdsToFetch: async (args) => {
let whereClause = [
args.min ? `id > ${args.min}` : '1=1',
args.max ? `id <= ${args.max}` : '1=1',
].join(' AND ');
let sql = `
SELECT id FROM wait_fetch_artist WHERE ${whereClause}
${args.order ? `ORDER BY id ${args.order}` : ''}
${args.limit ? `LIMIT ${args.limit}` : ''}
`;
console.log(sql);
let artistIds = await dbUtils.query(sql, []);
artistIds = artistIds.map(item => item.id);
return artistIds;
},
getInfoById: async (artistId, { getRelation = true }) => {
if (!artistId) return {}
// 查询出歌手
const sql = 'SELECT * FROM artist WHERE artist_id = ?'
let infoResultSet = await dbUtils.query(sql, [artistId]);
if (infoResultSet.length == 0) return {};
let artistInfo = JSON.parse(JSON.stringify(infoResultSet[0]));
if (getRelation) {
// 查出歌手与歌曲对应关系
const sql2 = 'SELECT * FROM song_artist_relation WHERE artist_id = ?'
let relationResultSet = await dbUtils.query(sql2, [artistId]);
// 拼装
artistInfo.songIds = relationResultSet.map(song => song.song_id);
} else {
artistInfo.songIds = null;
}
return artistInfo;
},
},
lyric: {
insert: async (lyricInfo) => {
return await dbUtils.query('INSERT IGNORE INTO lyric SET ?', lyricInfo);
},
getIdsToFetch: async (args) => {
let whereClause = [
args.min ? `id > ${args.min}` : '1=1',
args.max ? `id <= ${args.max}` : '1=1',
].join(' AND ');
var sql = `
SELECT id FROM wait_fetch_lyric WHERE ${whereClause}
${args.order ? `ORDER BY id ${args.order}` : ''}
${args.limit ? `LIMIT ${args.limit}` : ''}
`;
console.log(sql);
let songIds = await dbUtils.query(sql, []);
songIds = songIds.map(item => item.id);
return songIds;
},
},
comment: {
insertCollection: async (commentInfoList) => {
if (commentInfoList.length == 0) return;
return await dbUtils.query(`
INSERT INTO comment ( comment_id, parent_comment_id, user_id, song_id, content, time, like_count, comment_type ) VALUES ?
ON DUPLICATE KEY UPDATE content = VALUES(content), like_count = VALUES(like_count), comment_type = GREATEST(comment_type, VALUES(comment_type)), modify_time = CURRENT_TIMESTAMP
`, [commentInfoList]);
},
getIdsToFetch: async (args) => {
let whereClause = [
args.min ? `song_id > ${args.min}` : '1=1',
args.max ? `song_id <= ${args.max}` : '1=1',
].join(' AND ');
var sql = `
SELECT song_id FROM comment_progress WHERE ${whereClause} AND current_status != 2
ORDER BY current_status DESC${args.order ? `, song_id ${args.order}` : ''}
${args.limit ? `LIMIT ${args.limit}` : ''}
`;
console.log(sql);
let songIds = await dbUtils.query(sql, []);
songIds = songIds.map(item => item.song_id);
return songIds;
},
},
comment_progress: {
update: async (commentProgressInfo, songId) => {
return await dbUtils.query('UPDATE comment_progress SET ? WHERE song_id = ? LIMIT 1', [commentProgressInfo, songId]);
},
},
playlist: {
insertCollection: async (playlistInfo) => {
if (playlistInfo.length == 0) return;
return await dbUtils.query(`
INSERT INTO playlist ( ${Object.keys(playlistInfo).map(field => `\`${field}\``).join(",")} ) VALUES ?
ON DUPLICATE KEY UPDATE ${Object.keys(playlistInfo).map(field => `${field}=VALUES(${field})`).join(", ")}
`, [[Object.values(playlistInfo)]]);
},
},
user: {
insertCollection: async (userInfoList) => {
if (userInfoList.length == 0) return;
return await dbUtils.query(`
INSERT INTO user ( user_id, user_type, nickname, avatar_url ) VALUES ?
ON DUPLICATE KEY UPDATE user_type = VALUES(user_type), nickname = VALUES(nickname), avatar_url = VALUES(avatar_url), modify_time = CURRENT_TIMESTAMP
`, [userInfoList]);
},
},
song_album: {
insertCollection: async (songAlbumRel) => {
if (songAlbumRel.length == 0) return;
return await dbUtils.query('INSERT IGNORE INTO song_album_relation (song_id, album_id) VALUES ?', [songAlbumRel]);
},
},
song_artist: {
insertCollection: async (songArtistRel) => {
if (songArtistRel.length == 0) return;
return await dbUtils.query('INSERT IGNORE INTO song_artist_relation (song_id, artist_id) VALUES ?', [songArtistRel]);
},
},
song_playlist: {
insertCollection: async (trackIds) => {
if (trackIds.length == 0) return;
return await dbUtils.query('INSERT IGNORE INTO song_playlist_relation (song_id, playlist_id, alg) VALUES ?', [trackIds]);
},
},
/* ##################################################### */
// 将 id 插入待检查表
wait_check: {
insert: async (type, ids) => {
// 过滤掉 id 为 0 的
ids = ids.filter(id => id > 0);
if (ids.length == 0) return;
return await dbUtils.query(`INSERT IGNORE INTO wait_check_${type} (id) VALUES ?`, [ids.map(id => [id])]);
},
},
wait_fetch: {
deleteCollection: async function (type, ids) {
// console.log("wait_fetch.deleteCollection", type, ids);
if (ids.length > 0)
return await dbUtils.query(`DELETE FROM wait_fetch_${type} WHERE id IN ?`, [[ids]]);
}
}
};