50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { getMemberById, handleNocoDbError } from '~/server/utils/nocodb';
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const id = getRouterParam(event, 'id');
|
|
|
|
console.log('[api/members/[id].get] =========================');
|
|
console.log('[api/members/[id].get] GET /api/members/' + id);
|
|
console.log('[api/members/[id].get] Request from:', getClientIP(event));
|
|
|
|
if (!id) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
statusMessage: 'Member ID is required'
|
|
});
|
|
}
|
|
|
|
try {
|
|
const member = await getMemberById(id);
|
|
|
|
// Add computed fields
|
|
const processedMember = {
|
|
...member,
|
|
FullName: `${member['First Name'] || ''} ${member['Last Name'] || ''}`.trim(),
|
|
FormattedPhone: formatPhoneNumber(member.Phone)
|
|
};
|
|
|
|
console.log('[api/members/[id].get] ✅ Successfully retrieved member:', id);
|
|
|
|
return {
|
|
success: true,
|
|
data: processedMember
|
|
};
|
|
|
|
} catch (error: any) {
|
|
console.error('[api/members/[id].get] ❌ Error fetching member:', error);
|
|
handleNocoDbError(error, 'getMemberById', 'Member');
|
|
}
|
|
});
|
|
|
|
function formatPhoneNumber(phone: string): string {
|
|
if (!phone) return '';
|
|
const cleaned = phone.replace(/\D/g, '');
|
|
if (cleaned.length === 10) {
|
|
return `(${cleaned.substring(0, 3)}) ${cleaned.substring(3, 6)}-${cleaned.substring(6)}`;
|
|
} else if (cleaned.length === 11 && cleaned.startsWith('1')) {
|
|
return `+1 (${cleaned.substring(1, 4)}) ${cleaned.substring(4, 7)}-${cleaned.substring(7)}`;
|
|
}
|
|
return phone;
|
|
}
|