63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
import jwt from "jsonwebtoken";
|
|
import Member from "../models/member.js";
|
|
import { connectDB } from "../utils/mongoose.js";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
await connectDB();
|
|
|
|
// Check if user is authenticated (optional for this endpoint)
|
|
const token = getCookie(event, "auth-token");
|
|
let isAuthenticated = false;
|
|
|
|
if (token) {
|
|
try {
|
|
jwt.verify(token, process.env.JWT_SECRET);
|
|
isAuthenticated = true;
|
|
} catch (err) {
|
|
isAuthenticated = false;
|
|
}
|
|
}
|
|
|
|
const query = getQuery(event);
|
|
const topic = query.topic;
|
|
|
|
// Build query for peer supporters
|
|
const dbQuery = {
|
|
"peerSupport.enabled": true,
|
|
status: "active",
|
|
};
|
|
|
|
// Filter by topic if specified
|
|
if (topic) {
|
|
dbQuery["peerSupport.topics"] = topic;
|
|
}
|
|
|
|
try {
|
|
const supporters = await Member.find(dbQuery)
|
|
.select(
|
|
"name avatar circle peerSupport slackUserId createdAt"
|
|
)
|
|
.sort({ createdAt: -1 })
|
|
.lean();
|
|
|
|
// Get unique topics for filter options
|
|
const allTopics = supporters
|
|
.flatMap((supporter) => supporter.peerSupport?.topics || [])
|
|
.filter((topic, index, self) => self.indexOf(topic) === index)
|
|
.sort();
|
|
|
|
return {
|
|
supporters,
|
|
totalCount: supporters.length,
|
|
filters: {
|
|
availableTopics: allTopics,
|
|
},
|
|
};
|
|
} catch (error) {
|
|
console.error("Peer support fetch error:", error);
|
|
throw createError({
|
|
statusCode: 500,
|
|
statusMessage: "Failed to fetch peer supporters",
|
|
});
|
|
}
|
|
});
|