const connection = require('../sql'); class PagesService { async listCount(keyword, type, userId) { const statement = "SELECT COUNT(`id`) total FROM lib WHERE (name like COALESCE(CONCAT('%',?,'%'), name) OR ? IS NULL) AND " + (type == 1 ? 'user_id = ?' : 'user_id != ?'); const [result] = await connection.execute(statement, [keyword || null, keyword || null, userId]); return result[0]; } async list(pageNum, pageSize, keyword, type, userId) { const offset = (+pageNum - 1) * pageSize + ''; const limit = pageSize; const statement = ` SELECT id, tag, name, description, user_id as userId, SUBSTRING_INDEX(user_name, '@', 1) as userName, updated_at as updatedAt, created_at as createdAt FROM lib WHERE (name LIKE COALESCE(CONCAT('%',?,'%'), name) OR ? IS NULL) AND ` + (type == 1 ? 'user_id = ? ' : 'user_id != ? ') + `ORDER BY updated_at DESC LIMIT ${offset},${limit};`; const [result] = await connection.execute(statement, [keyword || null, keyword || null, userId]); return result; } async installList(userId) { const statement = ` SELECT a.id, a.tag, a.name, a.user_id as userId, SUBSTRING_INDEX(a.user_name, '@', 1) as userName, b.release_id as releaseId, b.react_url as reactUrl, b.css_url as cssUrl, b.config_url as configUrl, b.release_hash as releaseHash FROM lib as a RIGHT JOIN lib_publish as b ON a.id = b.lib_id WHERE b.user_id = ? ORDER BY a.updated_at DESC `; const [result] = await connection.execute(statement, [userId]); return result; } async createLib(tag, name, description = '', userId, userName) { const statement = 'INSERT INTO lib (tag, name, description,user_id,user_name) VALUES (?, ?, ?, ?, ?);'; const [result] = await connection.execute(statement, [tag, name, description, userId, userName]); return result; } async getDetailById(id, userId) { const statement = ` select a.id, a.tag, a.name, a.description, a.react_code as reactCode, a.less_code as lessCode, a.config_code as configCode, a.md_code as mdCode, a.hash, a.user_id as userId, SUBSTRING_INDEX(a.user_name, '@', 1) as userName, a.updated_at as updatedAt, a.created_at as createdAt, b.release_id as releaseId, b.react_url as reactUrl, b.css_url as cssUrl, b.config_url as configUrl, b.release_hash as releaseHash from lib as a left join lib_publish as b ON a.id = b.lib_id where a.id = ? and a.user_id = ?;`; const [result] = await connection.execute(statement, [id, userId]); return result; } async getOwnLibById(id, userId) { const statement = 'SELECT * FROM lib WHERE id = ? AND user_id = ?;'; const [result] = await connection.execute(statement, [id, userId]); return result[0]; } async deleteLibById(id, userId) { const statement = 'DELETE FROM lib WHERE id = ? and user_id = ?;'; const [result] = await connection.execute(statement, [id, userId]); return result; } async updateLib(tag, name, description, id) { const statement = 'UPDATE lib SET tag = ?, name = ?, description = ? where id = ?'; const [result] = await connection.execute(statement, [tag, name, description, id]); return result; } async saveLib(params) { let statement = `UPDATE lib SET updated_at = ?`; let sql_params = [new Date()]; if (params.reactCode) { statement += `, react_code = ?`; sql_params.push(params.reactCode); } if (params.lessCode) { statement += `, less_code = ?`; sql_params.push(params.lessCode); } if (params.configCode) { statement += `, config_code = ?`; sql_params.push(params.configCode); } if (params.mdCode) { statement += `, md_code = ?`; sql_params.push(params.mdCode); } if (params.hash) { statement += `, hash = ?`; sql_params.push(params.hash); } statement += ` WHERE id = ?;`; sql_params.push(params.id); const [result] = await connection.execute(statement, sql_params); return result; } async publish(params) { const statement = 'INSERT INTO lib_publish (release_id, lib_id, react_url, css_url, config_url, release_hash, user_id, user_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?);'; const [result] = await connection.execute(statement, [ params.releaseId, params.libId, params.reactUrl, params.cssUrl, params.configUrl, params.releaseHash, params.userId, params.userName, ]); return result; } async getPublishByLibId(lib_id) { const statement = 'SELECT id, release_id as releaseId, lib_id as libId, react_url as reactUrl, css_url as cssUrl, config_url as configUrl, release_hash as releaseHash, user_id as userId, user_name as userName, count, updated_at as updatedAt FROM lib_publish WHERE lib_id = ?;'; const [result] = await connection.execute(statement, [lib_id]); return result[0]; } async updateLibPublish(params) { let statement = `UPDATE lib_publish SET react_url = ?, config_url = ?, release_hash = ?, count = count + 1`; let sql_params = [params.reactUrl, params.configUrl, params.releaseHash]; if (params.cssUrl) { statement += `, css_url = ?`; sql_params.push(params.cssUrl); } statement += ` WHERE lib_id = ?`; sql_params.push(params.libId); const [result] = await connection.execute(statement, sql_params); return result; } async deletePublishById(lib_id, userId) { const statement = 'DELETE FROM lib_publish WHERE lib_id = ? and user_id = ?;'; const [result] = await connection.execute(statement, [lib_id, userId]); return result; } } module.exports = new PagesService();