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
All checks were successful
Build And Push Image / docker (push) Successful in 2m52s
This commit is contained in:
@@ -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';
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user