Updates to profile

This commit is contained in:
Jennie Robinson Faber 2025-10-06 14:52:03 +01:00
parent 1b8dacf92a
commit 970b185151
16 changed files with 652 additions and 1585 deletions

View file

@ -24,7 +24,7 @@ export default defineEventHandler(async (event) => {
const query = getQuery(event);
const search = query.search || "";
const circle = query.circle || "";
const skills = query.skills ? query.skills.split(",") : [];
const tags = query.tags ? query.tags.split(",") : [];
// Build query
const dbQuery = {
@ -45,15 +45,36 @@ export default defineEventHandler(async (event) => {
];
}
// Filter by skills
if (skills.length > 0) {
dbQuery.skills = { $in: skills };
// Filter by tags (search in offering.tags or lookingFor.tags)
if (tags.length > 0) {
dbQuery.$or = [
{ "offering.tags": { $in: tags } },
{ "lookingFor.tags": { $in: tags } },
];
// If search is also present, combine with AND
if (search) {
dbQuery.$and = [
{
$or: [
{ name: { $regex: search, $options: "i" } },
{ bio: { $regex: search, $options: "i" } },
],
},
{
$or: [
{ "offering.tags": { $in: tags } },
{ "lookingFor.tags": { $in: tags } },
],
},
];
delete dbQuery.$or;
}
}
try {
const members = await Member.find(dbQuery)
.select(
"name pronouns timeZone avatar studio bio skills location socialLinks offering lookingFor privacy circle createdAt"
"name pronouns timeZone avatar studio bio location socialLinks offering lookingFor privacy circle createdAt",
)
.sort({ createdAt: -1 })
.lean();
@ -83,7 +104,6 @@ export default defineEventHandler(async (event) => {
if (isVisible("timeZone")) filtered.timeZone = member.timeZone;
if (isVisible("studio")) filtered.studio = member.studio;
if (isVisible("bio")) filtered.bio = member.bio;
if (isVisible("skills")) filtered.skills = member.skills;
if (isVisible("location")) filtered.location = member.location;
if (isVisible("socialLinks")) filtered.socialLinks = member.socialLinks;
if (isVisible("offering")) filtered.offering = member.offering;
@ -92,17 +112,20 @@ export default defineEventHandler(async (event) => {
return filtered;
});
// Get unique skills for filter options
const allSkills = members
.flatMap((m) => m.skills || [])
.filter((skill, index, self) => self.indexOf(skill) === index)
// Get unique tags for filter options (from both offering and lookingFor)
const allTags = members
.flatMap((m) => [
...(m.offering?.tags || []),
...(m.lookingFor?.tags || []),
])
.filter((tag, index, self) => self.indexOf(tag) === index)
.sort();
return {
members: filteredMembers,
totalCount: filteredMembers.length,
filters: {
availableSkills: allSkills,
availableTags: allTags,
},
};
} catch (error) {

View file

@ -30,7 +30,8 @@ export default defineEventHandler(async (event) => {
// Build update object for peer support settings
const updateData = {
"peerSupport.enabled": body.enabled || false,
"peerSupport.topics": body.topics || [],
"peerSupport.skillTopics": body.skillTopics || [],
"peerSupport.supportTopics": body.supportTopics || [],
"peerSupport.availability": body.availability || "",
"peerSupport.personalMessage": body.personalMessage || "",
"peerSupport.slackUsername": body.slackUsername || "",

View file

@ -34,11 +34,8 @@ export default defineEventHandler(async (event) => {
"avatar",
"studio",
"bio",
"skills",
"location",
"socialLinks",
"offering",
"lookingFor",
"showInDirectory",
"helcimCustomerId",
];
@ -50,7 +47,6 @@ export default defineEventHandler(async (event) => {
"avatarPrivacy",
"studioPrivacy",
"bioPrivacy",
"skillsPrivacy",
"locationPrivacy",
"socialLinksPrivacy",
"offeringPrivacy",
@ -66,6 +62,16 @@ export default defineEventHandler(async (event) => {
}
});
// Handle offering and lookingFor separately (nested objects)
if (body.offering !== undefined) {
updateData["offering.text"] = body.offering.text || "";
updateData["offering.tags"] = body.offering.tags || [];
}
if (body.lookingFor !== undefined) {
updateData["lookingFor.text"] = body.lookingFor.text || "";
updateData["lookingFor.tags"] = body.lookingFor.tags || [];
}
// Handle privacy settings
privacyFields.forEach((privacyField) => {
if (body[privacyField] !== undefined) {
@ -100,7 +106,6 @@ export default defineEventHandler(async (event) => {
avatar: member.avatar,
studio: member.studio,
bio: member.bio,
skills: member.skills,
location: member.location,
socialLinks: member.socialLinks,
offering: member.offering,