route.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import dbConnect from "../../lib/dbConnect";
  2. import Activity from "../../models/Activity";
  3. import { NextResponse } from "next/server";
  4. import { setCORSHeaders, handleError } from "../../lib/apiUtils";
  5. export async function GET(request) {
  6. await dbConnect();
  7. console.log("GET request received");
  8. try {
  9. const isFromFrontend = request.headers.get("x-from-frontend") === "true";
  10. console.log("isFromFrontend", isFromFrontend);
  11. let activities;
  12. let message;
  13. if (isFromFrontend) {
  14. activities = await Activity.find({ isActive: true }).sort({
  15. createdAt: -1,
  16. });
  17. message = activities.length > 0 ? "成功获取活跃活动" : "当前没有活跃活动";
  18. } else {
  19. // 其他请求,返回所有记录
  20. activities = await Activity.find().sort({ createdAt: -1 });
  21. message = activities.length > 0 ? "成功获取所有活动" : "当前没有任何活动";
  22. }
  23. const response = NextResponse.json(
  24. {
  25. success: true,
  26. data: activities,
  27. message,
  28. total: activities.length,
  29. },
  30. { status: 200 }
  31. );
  32. return setCORSHeaders(response);
  33. } catch (error) {
  34. console.error("Error in GET /api/activity:", error);
  35. return handleError(error);
  36. }
  37. }
  38. export async function POST(request) {
  39. await dbConnect();
  40. try {
  41. const activityData = await request.json();
  42. console.log("activityData", activityData);
  43. const activity = await Activity.create(activityData);
  44. const response = NextResponse.json(
  45. {
  46. success: true,
  47. message: "Activity created successfully",
  48. data: activity,
  49. },
  50. { status: 201 }
  51. );
  52. return setCORSHeaders(response);
  53. } catch (error) {
  54. console.error("Error creating activity:", error);
  55. return handleError(error);
  56. }
  57. }
  58. export async function PUT(request) {
  59. await dbConnect();
  60. try {
  61. const { id, ...updateData } = await request.json();
  62. console.log("Updating activity with id:", id);
  63. console.log("Update data:", updateData);
  64. if (!id) {
  65. return setCORSHeaders(
  66. NextResponse.json(
  67. { success: false, error: "Activity ID is required" },
  68. { status: 400 }
  69. )
  70. );
  71. }
  72. const updatedActivity = await Activity.findByIdAndUpdate(id, updateData, {
  73. new: true,
  74. runValidators: true,
  75. });
  76. if (!updatedActivity) {
  77. return setCORSHeaders(
  78. NextResponse.json(
  79. { success: false, error: "Activity not found" },
  80. { status: 404 }
  81. )
  82. );
  83. }
  84. const response = NextResponse.json(
  85. {
  86. success: true,
  87. data: updatedActivity,
  88. message: "Activity updated successfully",
  89. },
  90. { status: 200 }
  91. );
  92. return setCORSHeaders(response);
  93. } catch (error) {
  94. console.error("Error updating activity:", error);
  95. return handleError(error);
  96. }
  97. }
  98. export async function DELETE(request) {
  99. await dbConnect();
  100. try {
  101. const { searchParams } = new URL(request.url);
  102. const id = searchParams.get("id");
  103. const deletedActivity = await Activity.findByIdAndDelete(id);
  104. if (!deletedActivity) {
  105. return NextResponse.json(
  106. { success: false, error: "Activity not found" },
  107. { status: 404 }
  108. );
  109. }
  110. const response = NextResponse.json(
  111. { success: true, message: "Activity deleted successfully" },
  112. { status: 200 }
  113. );
  114. return setCORSHeaders(response);
  115. } catch (error) {
  116. console.error("Error deleting activity:", error);
  117. return handleError(error);
  118. }
  119. }
  120. export async function OPTIONS() {
  121. const response = new NextResponse(null, { status: 204 });
  122. return setCORSHeaders(response);
  123. }