ghostguild-org/server/api/members/me/peer-support.patch.js

89 lines
2.9 KiB
JavaScript

import Member from '../../../models/member.js'
import { connectDB } from '../../../utils/mongoose.js'
export default defineEventHandler(async (event) => {
await connectDB()
const member = await requireAuth(event)
const body = await validateBody(event, peerSupportUpdateSchema)
// Build update object for peer support settings
const updateData = {
'peerSupport.enabled': body.enabled || false,
'peerSupport.skillTopics': body.skillTopics || [],
'peerSupport.supportTopics': body.supportTopics || [],
'peerSupport.availability': body.availability || '',
'peerSupport.personalMessage': body.personalMessage || '',
'peerSupport.slackUsername': body.slackUsername || '',
}
// If Slack username provided and peer support enabled, try to fetch Slack user ID
if (body.enabled && body.slackUsername) {
try {
console.log(
`[Peer Support] Attempting to fetch Slack user ID for: ${body.slackUsername}`,
)
const { getSlackService } = await import('../../../utils/slack.ts')
const slackService = getSlackService()
if (slackService) {
console.log('[Peer Support] Slack service initialized, looking up user...')
const slackUserId = await slackService.findUserIdByUsername(body.slackUsername)
if (slackUserId) {
updateData['slackUserId'] = slackUserId
console.log(
`[Peer Support] ✓ Found Slack user ID for ${body.slackUsername}: ${slackUserId}`,
)
console.log('[Peer Support] Opening DM channel...')
const dmChannelId = await slackService.openDMChannel(slackUserId)
if (dmChannelId) {
updateData['peerSupport.slackDMChannelId'] = dmChannelId
console.log(`[Peer Support] ✓ Got DM channel ID: ${dmChannelId}`)
} else {
console.warn('[Peer Support] Could not get DM channel ID')
}
} else {
console.warn(
`[Peer Support] Could not find Slack user ID for username: ${body.slackUsername}`,
)
}
} else {
console.log('[Peer Support] Slack service not configured, skipping user ID lookup')
}
} catch (error) {
console.error('[Peer Support] Error fetching Slack user ID:', error.message)
console.error('[Peer Support] Stack trace:', error.stack)
// Continue anyway - we'll still save the username
}
}
try {
const updated = await Member.findByIdAndUpdate(
member._id,
{ $set: updateData },
{ new: true, runValidators: true },
)
if (!updated) {
throw createError({
statusCode: 404,
statusMessage: 'Member not found',
})
}
return {
success: true,
peerSupport: updated.peerSupport,
}
} catch (error) {
console.error('Peer support update error:', error)
throw createError({
statusCode: 500,
statusMessage: 'Failed to update peer support settings',
})
}
})