templates.service.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. const connection = require('../sql');
  2. class TemplatesService {
  3. async listCount(type, keyword) {
  4. let statement = `
  5. SELECT
  6. COUNT(id) total
  7. FROM
  8. templates
  9. WHERE
  10. type = ${type}
  11. `;
  12. if (keyword) {
  13. statement += ` and name LIKE '%${keyword}%'`;
  14. }
  15. const [result] = await connection.execute(statement, []);
  16. return result[0];
  17. }
  18. async list(pageNum, pageSize, type, keyword) {
  19. const offset = (+pageNum - 1) * pageSize + '';
  20. const limit = pageSize;
  21. let statement = `
  22. SELECT
  23. id,
  24. name,
  25. description,
  26. union_id as unionId,
  27. tags,
  28. user_name as userName,
  29. install_count as installCount,
  30. image_url as imageUrl,
  31. is_recommend as isRecommend,
  32. updated_at as updatedAt,
  33. created_at as createdAt
  34. FROM
  35. templates
  36. WHERE
  37. (name LIKE COALESCE(CONCAT('%',?,'%'), name) OR ? IS NULL)
  38. AND
  39. type = ${type}
  40. LIMIT ${offset},${limit};`;
  41. const [result] = await connection.execute(statement, [keyword || null, keyword || null]);
  42. return result;
  43. }
  44. async create(params) {
  45. const statement =
  46. 'INSERT INTO templates (union_id, type, name, description, user_id, user_name, image_url, tags) VALUES (?, ?, ?, ?, ?, ?, ?, ?);';
  47. const [result] = await connection.execute(statement, [
  48. params.unionId,
  49. params.type,
  50. params.name,
  51. params.description,
  52. params.userId,
  53. params.userName,
  54. params.imageUrl,
  55. params.tags,
  56. ]);
  57. return result;
  58. }
  59. async getDetailById(id) {
  60. const statement =
  61. 'SELECT p.id, t.name, t.description , t.user_id, t.user_name, t.image_url, t.install_count FROM `projects` p RIGHT JOIN templates t on t.union_id = p.`id` WHERE t.id = ?;';
  62. const [result] = await connection.execute(statement, [id]);
  63. return result;
  64. }
  65. async deleteById(union_id, user_id) {
  66. const statement = 'DELETE FROM templates WHERE union_id = ? and user_id = ?;';
  67. const [result] = await connection.execute(statement, [union_id, user_id]);
  68. return result;
  69. }
  70. async update(id, name, description, isRecommend, imageUrl, installCount, user_id) {
  71. let statement = `UPDATE templates SET updated_at = ?`;
  72. let sql_params = [new Date()];
  73. if (name) {
  74. statement += `, name = ?`;
  75. sql_params.push(name);
  76. }
  77. if (description) {
  78. statement += `, description = ?`;
  79. sql_params.push(description);
  80. }
  81. if (isRecommend) {
  82. statement += `, is_recommend = ?`;
  83. sql_params.push(isRecommend);
  84. }
  85. if (imageUrl) {
  86. statement += `, image_url = ?`;
  87. sql_params.push(imageUrl);
  88. }
  89. if (installCount) {
  90. statement += `, install_count += 1`;
  91. }
  92. statement += ` WHERE id = ? and user_id = ?;`;
  93. sql_params.push(id);
  94. sql_params.push(user_id);
  95. const [result] = await connection.execute(statement, sql_params);
  96. return result;
  97. }
  98. async updateInstallCount(id) {
  99. let statement = `UPDATE templates SET install_count = install_count + 1 WHERE id = ?;`;
  100. const [result] = await connection.execute(statement, [id]);
  101. return result;
  102. }
  103. }
  104. module.exports = new TemplatesService();