diff --git a/server/api/auth/session.get.ts b/server/api/auth/session.get.ts index b882d7d..4879c1c 100644 --- a/server/api/auth/session.get.ts +++ b/server/api/auth/session.get.ts @@ -16,6 +16,7 @@ export default defineEventHandler(async (event) => { authenticated: false, user: null, groups: [], + member: null }; } @@ -31,10 +32,34 @@ export default defineEventHandler(async (event) => { username: session.user.username }); + // Fetch complete member data from database + let memberData = null; + try { + console.log('🔍 Fetching member data for Keycloak ID:', session.user.id); + const { getMemberByKeycloakId } = await import('~/server/utils/nocodb'); + memberData = await getMemberByKeycloakId(session.user.id); + + if (memberData) { + console.log('✅ Member data found:', { + memberId: memberData.member_id, + email: memberData.email, + name: `${memberData.first_name} ${memberData.last_name}`, + duesStatus: memberData.current_year_dues_paid + }); + } else { + console.log('⚠️ No member record found for Keycloak ID:', session.user.id); + } + } catch (memberError) { + console.error('❌ Failed to fetch member data:', memberError); + // Continue without member data - user can still access basic features + } + return { + success: true, authenticated: true, user: session.user, groups: session.user.groups || [], + member: memberData }; } catch (error) { console.error('❌ Session check error:', error); @@ -42,6 +67,7 @@ export default defineEventHandler(async (event) => { authenticated: false, user: null, groups: [], + member: null }; } }); diff --git a/server/utils/nocodb.ts b/server/utils/nocodb.ts index 2b6d096..b55aeea 100644 --- a/server/utils/nocodb.ts +++ b/server/utils/nocodb.ts @@ -294,6 +294,36 @@ export const getMemberById = async (id: string): Promise => { return result; }; +export const getMemberByKeycloakId = async (keycloakId: string): Promise => { + console.log('[nocodb.getMemberByKeycloakId] Searching for member with Keycloak ID:', keycloakId); + + try { + // Use the where parameter to search by keycloak_id + const result = await $fetch>(createTableUrl(Table.Members), { + headers: { + "xc-token": getNocoDbConfiguration().token, + }, + params: { + where: `(keycloak_id,eq,${keycloakId})`, + limit: 1, + }, + }); + + if (result.list && result.list.length > 0) { + const member = normalizeFieldsFromNocoDB(result.list[0]); + console.log('[nocodb.getMemberByKeycloakId] Found member:', member.member_id || member.Id); + return member; + } + + console.log('[nocodb.getMemberByKeycloakId] No member found with Keycloak ID:', keycloakId); + return null; + } catch (error: any) { + console.error('[nocodb.getMemberByKeycloakId] Error searching for member:', error); + // Return null instead of throwing to allow graceful handling + return null; + } +}; + export const createMember = async (data: Partial): Promise => { console.log('[nocodb.createMember] Creating member with fields:', Object.keys(data));