Group.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. const { pool } = require('../config/database');
  2. // 创建群组表
  3. const createGroupTable = async () => {
  4. try {
  5. await pool.query(`
  6. CREATE TABLE IF NOT EXISTS groups (
  7. id INT AUTO_INCREMENT PRIMARY KEY,
  8. group_id VARCHAR(50) NOT NULL UNIQUE,
  9. group_name VARCHAR(100) NOT NULL,
  10. creator_id VARCHAR(50) NOT NULL,
  11. is_active BOOLEAN DEFAULT TRUE,
  12. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  13. )
  14. `);
  15. } catch (error) {
  16. console.error('创建群组表失败:', error);
  17. }
  18. };
  19. // 初始化表
  20. createGroupTable();
  21. // 群组相关方法
  22. const Group = {
  23. // 获取所有群组
  24. findAll: async () => {
  25. try {
  26. const [rows] = await pool.query('SELECT * FROM groups ORDER BY created_at DESC');
  27. return rows;
  28. } catch (error) {
  29. console.error('查询群组列表失败:', error);
  30. throw error;
  31. }
  32. },
  33. // 根据ID查找群组
  34. findById: async (id) => {
  35. try {
  36. const [rows] = await pool.query(
  37. 'SELECT * FROM groups WHERE id = ?',
  38. [id]
  39. );
  40. return rows[0];
  41. } catch (error) {
  42. console.error('查询群组失败:', error);
  43. throw error;
  44. }
  45. },
  46. // 根据群组ID查找群组
  47. findByGroupId: async (groupId) => {
  48. const [rows] = await pool.query(
  49. 'SELECT * FROM groups WHERE group_id = ?',
  50. [groupId]
  51. );
  52. return rows[0];
  53. },
  54. // 创建群组
  55. create: async ({
  56. group_id,
  57. group_name,
  58. group_type = 'group',
  59. creator_id,
  60. admin_id,
  61. in_fee_rate = 0,
  62. in_exchange_rate = 1,
  63. out_fee_rate = 0,
  64. out_exchange_rate = 1
  65. }) => {
  66. try {
  67. const [result] = await pool.query(
  68. `INSERT INTO groups (
  69. group_id,
  70. group_name,
  71. group_type,
  72. creator_id,
  73. admin_id,
  74. in_fee_rate,
  75. in_exchange_rate,
  76. out_fee_rate,
  77. out_exchange_rate
  78. ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
  79. [
  80. group_id,
  81. group_name,
  82. group_type,
  83. creator_id,
  84. admin_id,
  85. in_fee_rate,
  86. in_exchange_rate,
  87. out_fee_rate,
  88. out_exchange_rate
  89. ]
  90. );
  91. return result.insertId;
  92. } catch (error) {
  93. console.error('创建群组失败:', error);
  94. throw error;
  95. }
  96. },
  97. // 更新群组
  98. update: async (id, {
  99. group_name,
  100. is_active,
  101. in_fee_rate,
  102. in_exchange_rate,
  103. out_fee_rate,
  104. out_exchange_rate
  105. }) => {
  106. try {
  107. const [result] = await pool.query(
  108. `UPDATE groups
  109. SET group_name = ?,
  110. is_active = ?,
  111. in_fee_rate = ?,
  112. in_exchange_rate = ?,
  113. out_fee_rate = ?,
  114. out_exchange_rate = ?,
  115. updated_at = CURRENT_TIMESTAMP
  116. WHERE id = ?`,
  117. [
  118. group_name,
  119. is_active,
  120. in_fee_rate,
  121. in_exchange_rate,
  122. out_fee_rate,
  123. out_exchange_rate,
  124. id
  125. ]
  126. );
  127. if (result.affectedRows === 0) {
  128. throw new Error('群组不存在');
  129. }
  130. return result;
  131. } catch (error) {
  132. console.error('更新群组失败:', error);
  133. throw error;
  134. }
  135. },
  136. // 删除群组
  137. delete: async (id) => {
  138. try {
  139. const [result] = await pool.query('DELETE FROM groups WHERE id = ?', [id]);
  140. if (result.affectedRows === 0) {
  141. throw new Error('群组不存在');
  142. }
  143. return result;
  144. } catch (error) {
  145. console.error('删除群组失败:', error);
  146. throw error;
  147. }
  148. }
  149. };
  150. module.exports = Group;