groupController.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. const Group = require('../models/Group');
  2. // @desc 获取所有群组
  3. // @route GET /api/groups
  4. // @access Private/Admin
  5. const getGroups = async (req, res) => {
  6. try {
  7. const groups = await Group.findAll();
  8. res.json(groups);
  9. } catch (error) {
  10. res.status(500).json({ message: '服务器错误' });
  11. }
  12. };
  13. // @desc 获取单个群组
  14. // @route GET /api/groups/:id
  15. // @access Private/Admin
  16. const getGroupById = async (req, res) => {
  17. try {
  18. const group = await Group.findById(req.params.id);
  19. if (group) {
  20. res.json(group);
  21. } else {
  22. res.status(404).json({ message: '群组不存在' });
  23. }
  24. } catch (error) {
  25. res.status(500).json({ message: '服务器错误' });
  26. }
  27. };
  28. // @desc 创建群组
  29. // @route POST /api/groups
  30. // @access Private/Admin
  31. const createGroup = async (req, res) => {
  32. try {
  33. const {
  34. groupId,
  35. groupName,
  36. group_type = 'group',
  37. creator_id,
  38. admin_id,
  39. in_fee_rate = 0,
  40. in_exchange_rate = 1,
  41. out_fee_rate = 0,
  42. out_exchange_rate = 1
  43. } = req.body;
  44. const groupIdExists = await Group.findByGroupId(groupId);
  45. if (groupIdExists) {
  46. return res.status(400).json({ message: '群组ID已存在' });
  47. }
  48. const id = await Group.create({
  49. group_id: groupId,
  50. group_name: groupName,
  51. group_type,
  52. creator_id,
  53. admin_id,
  54. in_fee_rate,
  55. in_exchange_rate,
  56. out_fee_rate,
  57. out_exchange_rate
  58. });
  59. const group = await Group.findById(id);
  60. res.status(201).json(group);
  61. } catch (error) {
  62. console.error('创建群组失败:', error);
  63. res.status(500).json({ message: '服务器错误' });
  64. }
  65. };
  66. // @desc 更新群组
  67. // @route PUT /api/groups/:id
  68. // @access Private/Admin
  69. const updateGroup = async (req, res) => {
  70. try {
  71. const {
  72. group_name,
  73. is_active,
  74. in_fee_rate,
  75. in_exchange_rate,
  76. out_fee_rate,
  77. out_exchange_rate
  78. } = req.body;
  79. const group = await Group.findById(req.params.id);
  80. if (!group) {
  81. return res.status(404).json({ message: '群组不存在' });
  82. }
  83. await Group.update(req.params.id, {
  84. group_name,
  85. is_active,
  86. in_fee_rate,
  87. in_exchange_rate,
  88. out_fee_rate,
  89. out_exchange_rate
  90. });
  91. const updatedGroup = await Group.findById(req.params.id);
  92. res.json(updatedGroup);
  93. } catch (error) {
  94. console.error('更新群组失败:', error);
  95. res.status(500).json({ message: '服务器错误' });
  96. }
  97. };
  98. // @desc 删除群组
  99. // @route DELETE /api/groups/:id
  100. // @access Private/Admin
  101. const deleteGroup = async (req, res) => {
  102. try {
  103. const group = await Group.findById(req.params.id);
  104. if (!group) {
  105. return res.status(404).json({ message: '群组不存在' });
  106. }
  107. await Group.delete(req.params.id);
  108. res.json({ message: '群组已删除' });
  109. } catch (error) {
  110. res.status(500).json({ message: '服务器错误' });
  111. }
  112. };
  113. // @desc 添加群组操作人
  114. // @route POST /api/groups/:groupId/operators
  115. // @access Private
  116. const addOperator = async (req, res) => {
  117. try {
  118. const { groupId } = req.params;
  119. const { operator_id, operator_username } = req.body;
  120. const added_by = req.user.id;
  121. // 检查群组是否存在
  122. const group = await Group.findByGroupId(groupId);
  123. if (!group) {
  124. return res.status(404).json({ message: '群组不存在' });
  125. }
  126. // 检查添加人是否是群组创建者或现有操作人
  127. const isCreator = group.creator_id === added_by;
  128. const isOperator = await Group.isOperator(groupId, added_by);
  129. if (!isCreator && !isOperator) {
  130. return res.status(403).json({ message: '没有权限添加操作人' });
  131. }
  132. // 添加操作人
  133. await Group.addOperator(groupId, {
  134. operator_id,
  135. operator_username,
  136. added_by
  137. });
  138. res.status(201).json({ message: '操作人添加成功' });
  139. } catch (error) {
  140. console.error('添加操作人失败:', error);
  141. if (error.message === '该用户已经是操作人') {
  142. return res.status(400).json({ message: error.message });
  143. }
  144. res.status(500).json({ message: '服务器错误' });
  145. }
  146. };
  147. // @desc 获取群组操作人列表
  148. // @route GET /api/groups/:groupId/operators
  149. // @access Private
  150. const getOperators = async (req, res) => {
  151. try {
  152. const { groupId } = req.params;
  153. const operators = await Group.getOperators(groupId);
  154. res.json(operators);
  155. } catch (error) {
  156. console.error('获取操作人列表失败:', error);
  157. res.status(500).json({ message: '服务器错误' });
  158. }
  159. };
  160. // @desc 删除群组操作人
  161. // @route DELETE /api/groups/:groupId/operators/:operatorId
  162. // @access Private
  163. const removeOperator = async (req, res) => {
  164. try {
  165. const { groupId, operatorId } = req.params;
  166. const userId = req.user.id;
  167. // 检查群组是否存在
  168. const group = await Group.findByGroupId(groupId);
  169. if (!group) {
  170. return res.status(404).json({ message: '群组不存在' });
  171. }
  172. // 检查操作人是否是群组创建者或现有操作人
  173. const isCreator = group.creator_id === userId;
  174. const isOperator = await Group.isOperator(groupId, userId);
  175. if (!isCreator && !isOperator) {
  176. return res.status(403).json({ message: '没有权限删除操作人' });
  177. }
  178. // 删除操作人
  179. const success = await Group.removeOperator(groupId, operatorId);
  180. if (!success) {
  181. return res.status(404).json({ message: '操作人不存在' });
  182. }
  183. res.json({ message: '操作人删除成功' });
  184. } catch (error) {
  185. console.error('删除操作人失败:', error);
  186. res.status(500).json({ message: '服务器错误' });
  187. }
  188. };
  189. module.exports = {
  190. getGroups,
  191. getGroupById,
  192. createGroup,
  193. updateGroup,
  194. deleteGroup,
  195. addOperator,
  196. getOperators,
  197. removeOperator
  198. };