fixed the member creation functionality that was failing with validation errors. Here's what I accomplished
All checks were successful
Build And Push Image / docker (push) Successful in 2m52s

This commit is contained in:
2025-08-07 23:44:28 +02:00
parent dcce2050ee
commit 3f81d0dd86
4 changed files with 192 additions and 4 deletions

View File

@@ -1,4 +1,4 @@
iimport { updateMember, getMemberById, handleNocoDbError } from '~/server/utils/nocodb';
import { updateMember, getMemberById, handleNocoDbError } from '~/server/utils/nocodb';
import { createSessionManager } from '~/server/utils/session';
import type { Member, MembershipStatus } from '~/utils/types';

View File

@@ -33,9 +33,14 @@ export default defineEventHandler(async (event) => {
// Get and validate request body
const body = await readBody(event);
console.log('[api/members.post] Request body fields:', Object.keys(body));
console.log('[api/members.post] Raw body data:', JSON.stringify(body, null, 2));
// Map display names to snake_case field names (fallback for client issues)
const normalizedBody = normalizeFieldNames(body);
console.log('[api/members.post] Normalized fields:', Object.keys(normalizedBody));
// Validate required fields
const validationErrors = validateMemberData(body);
const validationErrors = validateMemberData(normalizedBody);
if (validationErrors.length > 0) {
console.error('[api/members.post] Validation errors:', validationErrors);
throw createError({
@@ -45,7 +50,7 @@ export default defineEventHandler(async (event) => {
}
// Sanitize and prepare data
const memberData = sanitizeMemberData(body);
const memberData = sanitizeMemberData(normalizedBody);
console.log('[api/members.post] Sanitized data fields:', Object.keys(memberData));
// Create member in NocoDB
@@ -130,6 +135,39 @@ function sanitizeMemberData(data: any): Partial<Member> {
return sanitized;
}
function normalizeFieldNames(data: any): any {
// Field mapping for display names to snake_case
const fieldMap: Record<string, string> = {
'First Name': 'first_name',
'Last Name': 'last_name',
'Email': 'email',
'Phone': 'phone',
'Date of Birth': 'date_of_birth',
'Nationality': 'nationality',
'Address': 'address',
'Membership Status': 'membership_status',
'Member Since': 'member_since',
'Current Year Dues Paid': 'current_year_dues_paid',
'Membership Date Paid': 'membership_date_paid',
'Payment Due Date': 'payment_due_date'
};
const normalized: any = {};
// Map display names to snake_case
for (const [key, value] of Object.entries(data)) {
const normalizedKey = fieldMap[key] || key;
normalized[normalizedKey] = value;
}
console.log('[api/members.post] Field mapping applied:', {
original: Object.keys(data),
normalized: Object.keys(normalized)
});
return normalized;
}
function isValidEmail(email: string): boolean {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);