messageRecordController.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const messageRecordModel_1 = require("../models/messageRecordModel");
  4. const mongoose_1 = require("mongoose");
  5. class MessageRecordController {
  6. /**
  7. * @route POST /api/message-record
  8. * @desc Creates a new message record
  9. * @access Private
  10. */
  11. async createRecord(req, res) {
  12. try {
  13. const newRecord = new messageRecordModel_1.MessageRecord(req.body);
  14. await newRecord.save();
  15. return res.status(201).json({ success: true, data: newRecord });
  16. }
  17. catch (error) {
  18. console.error("Error creating message record:", error);
  19. return res.status(500).json({ success: false, message: "Server error", error: error.message });
  20. }
  21. }
  22. /**
  23. * @route GET /api/message-records
  24. * @desc Retrieves all message records with pagination and optional filters
  25. * @access Private
  26. */
  27. async getPaginatedRecords(req, res) {
  28. const { page = 1, limit = 30, uid, activityId, status, startDate, endDate } = req.query;
  29. const pageNum = parseInt(page, 10);
  30. const limitNum = parseInt(limit, 10);
  31. // 动态构建查询过滤器
  32. const filters = {};
  33. if (uid) {
  34. filters.uid = uid;
  35. }
  36. if (activityId) {
  37. // 检查 activityId 是否是有效的 ObjectId 格式
  38. if (!(0, mongoose_1.isObjectIdOrHexString)(activityId)) {
  39. return res.status(400).json({ success: false, message: "Invalid activityId" });
  40. }
  41. filters.activityId = activityId;
  42. }
  43. if (status) {
  44. const statusNum = parseInt(status, 30);
  45. if (!isNaN(statusNum)) {
  46. filters.status = statusNum;
  47. }
  48. }
  49. // 处理日期范围筛选,默认为 createdAt
  50. if (startDate || endDate) {
  51. filters.createdAt = {};
  52. if (startDate) {
  53. filters.createdAt.$gte = new Date(startDate);
  54. }
  55. if (endDate) {
  56. filters.createdAt.$lte = new Date(endDate);
  57. }
  58. }
  59. try {
  60. const records = await messageRecordModel_1.MessageRecord.find(filters)
  61. .sort({ createdAt: -1 })
  62. .skip((pageNum - 1) * limitNum)
  63. .limit(limitNum);
  64. const total = await messageRecordModel_1.MessageRecord.countDocuments(filters);
  65. return res.status(200).json({
  66. success: true,
  67. data: records,
  68. pagination: {
  69. total,
  70. page: pageNum,
  71. limit: limitNum,
  72. totalPages: Math.ceil(total / limitNum),
  73. },
  74. });
  75. }
  76. catch (error) {
  77. console.error("Error fetching paginated records:", error);
  78. return res.status(500).json({ success: false, message: "Server error", error: error.message });
  79. }
  80. }
  81. /**
  82. * @route GET /api/message-records/user/:uid
  83. * @desc Retrieves message records by user UID
  84. * @access Private
  85. */
  86. async getRecordsByUid(req, res) {
  87. try {
  88. const records = await messageRecordModel_1.MessageRecord.find({ uid: req.params.uid }).sort({ createdAt: -1 });
  89. if (!records || records.length === 0) {
  90. return res.status(404).json({ success: false, message: "No records found for this user" });
  91. }
  92. return res.status(200).json({ success: true, data: records });
  93. }
  94. catch (error) {
  95. console.error("Error fetching records by user UID:", error);
  96. return res.status(500).json({ success: false, message: "Server error", error: error.message });
  97. }
  98. }
  99. /**
  100. * @route GET /api/message-records/activity/:activityId
  101. * @desc Retrieves message records by activity ID
  102. * @access Private
  103. */
  104. async getRecordsByActivityId(req, res) {
  105. try {
  106. // 检查 activityId 是否是有效的 ObjectId 格式
  107. if (!(0, mongoose_1.isObjectIdOrHexString)(req.params.activityId)) {
  108. return res.status(400).json({ success: false, message: "Invalid activityId" });
  109. }
  110. const records = await messageRecordModel_1.MessageRecord.find({ activityId: req.params.activityId }).sort({ createdAt: -1 });
  111. if (!records || records.length === 0) {
  112. return res.status(404).json({ success: false, message: "No records found for this activity" });
  113. }
  114. return res.status(200).json({ success: true, data: records });
  115. }
  116. catch (error) {
  117. console.error("Error fetching records by activity ID:", error);
  118. return res.status(500).json({ success: false, message: "Server error", error: error.message });
  119. }
  120. }
  121. /**
  122. * @route GET /api/message-record/:id
  123. * @desc Retrieves a single message record by ID
  124. * @access Private
  125. */
  126. async getRecordById(req, res) {
  127. try {
  128. // 检查 id 是否是有效的 ObjectId 格式
  129. if (!(0, mongoose_1.isObjectIdOrHexString)(req.params.id)) {
  130. return res.status(400).json({ success: false, message: "Invalid record ID" });
  131. }
  132. const record = await messageRecordModel_1.MessageRecord.findById(req.params.id);
  133. if (!record) {
  134. return res.status(404).json({ success: false, message: "Message record not found" });
  135. }
  136. return res.status(200).json({ success: true, data: record });
  137. }
  138. catch (error) {
  139. console.error("Error fetching message record by ID:", error);
  140. return res.status(500).json({ success: false, message: "Server error", error: error.message });
  141. }
  142. }
  143. /**
  144. * @route PUT /api/message-record/:id
  145. * @desc Updates the status of a message record
  146. * @access Private
  147. */
  148. async updateRecord(req, res) {
  149. try {
  150. // 检查 id 是否是有效的 ObjectId 格式
  151. if (!(0, mongoose_1.isObjectIdOrHexString)(req.params.id)) {
  152. return res.status(400).json({ success: false, message: "Invalid record ID" });
  153. }
  154. const updatedRecord = await messageRecordModel_1.MessageRecord.findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true });
  155. if (!updatedRecord) {
  156. return res.status(404).json({ success: false, message: "Message record not found" });
  157. }
  158. return res.status(200).json({ success: true, data: updatedRecord });
  159. }
  160. catch (error) {
  161. console.error("Error updating message record:", error);
  162. return res.status(500).json({ success: false, message: "Server error", error: error.message });
  163. }
  164. }
  165. }
  166. exports.default = new MessageRecordController();