refactor(peer-support): delete provably dead code (Phase 1)
The Skills Exchange + Peer Support feature was replaced by Community
Connections on 2026-04-05, but several files and code paths were left
in place as backward-compat. None are reachable from the live UI:
- usePeerSupport.js composable: not imported anywhere
- PeerSupportBadge.vue: not imported anywhere
- peer-support.vue: stub redirect with no incoming links
- /api/peer-support.get.js: only consumed by usePeerSupport
- /api/members/me/peer-support.patch.js: same
- profile.patch.js offering/lookingFor write branches: profile form
no longer sends these fields (only writes communityConnections.*)
- PEER_SUPPORT_ENABLED/DISABLED activity types and renderers: only
written by the deleted peer-support.patch endpoint. The activityText
formatter has a fallback for unknown types so existing records
still display ("peer support enabled" with a generic icon).
Tests updated to drop peerSupportUpdateSchema coverage and the
offering/lookingFor passthrough assertion.
schemas.js cleanup deferred — concurrent communityConnections →
communityEcology rename is in flight in the working tree.
This commit is contained in:
parent
130e5bfa9f
commit
9577929e0d
11 changed files with 0 additions and 366 deletions
|
|
@ -1,97 +0,0 @@
|
|||
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',
|
||||
})
|
||||
}
|
||||
|
||||
if (body.enabled) {
|
||||
logActivity(member._id, 'peer_support_enabled', {
|
||||
topics: [...(body.skillTopics || []), ...(body.supportTopics || [])]
|
||||
})
|
||||
} else {
|
||||
logActivity(member._id, 'peer_support_disabled', {})
|
||||
}
|
||||
|
||||
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',
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
@ -31,8 +31,6 @@ export default defineEventHandler(async (event) => {
|
|||
"bioPrivacy",
|
||||
"locationPrivacy",
|
||||
"socialLinksPrivacy",
|
||||
"offeringPrivacy",
|
||||
"lookingForPrivacy",
|
||||
"craftTagsPrivacy",
|
||||
"communityConnectionsPrivacy",
|
||||
];
|
||||
|
|
@ -51,20 +49,6 @@ export default defineEventHandler(async (event) => {
|
|||
updateData.craftTags = body.craftTags;
|
||||
}
|
||||
|
||||
// Handle offering and lookingFor separately (nested objects)
|
||||
if (body.offering !== undefined) {
|
||||
updateData.offering = {
|
||||
text: body.offering.text || "",
|
||||
tags: body.offering.tags || [],
|
||||
};
|
||||
}
|
||||
if (body.lookingFor !== undefined) {
|
||||
updateData.lookingFor = {
|
||||
text: body.lookingFor.text || "",
|
||||
tags: body.lookingFor.tags || [],
|
||||
};
|
||||
}
|
||||
|
||||
// Handle privacy settings
|
||||
privacyFields.forEach((privacyField) => {
|
||||
if (body[privacyField] !== undefined) {
|
||||
|
|
@ -107,8 +91,6 @@ export default defineEventHandler(async (event) => {
|
|||
bio: member.bio,
|
||||
location: member.location,
|
||||
socialLinks: member.socialLinks,
|
||||
offering: member.offering,
|
||||
lookingFor: member.lookingFor,
|
||||
craftTags: member.craftTags,
|
||||
showInDirectory: member.showInDirectory,
|
||||
notifications: member.notifications,
|
||||
|
|
|
|||
|
|
@ -1,63 +0,0 @@
|
|||
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, useRuntimeConfig().jwtSecret);
|
||||
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",
|
||||
});
|
||||
}
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue