Fix user dashboard data display issue
Build And Push Image / docker (push) Successful in 3m15s
Details
Build And Push Image / docker (push) Successful in 3m15s
Details
- Enhanced session endpoint to fetch complete member data from database - Added getMemberByKeycloakId function to nocodb utils for member lookup by Keycloak ID - Session endpoint now returns both user authentication data and complete member profile - User dashboard will now display proper member information instead of 'Not provided' - Handles cases where member record might not exist gracefully
This commit is contained in:
parent
6e68e42f28
commit
a555584b2c
|
|
@ -16,6 +16,7 @@ export default defineEventHandler(async (event) => {
|
||||||
authenticated: false,
|
authenticated: false,
|
||||||
user: null,
|
user: null,
|
||||||
groups: [],
|
groups: [],
|
||||||
|
member: null
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -31,10 +32,34 @@ export default defineEventHandler(async (event) => {
|
||||||
username: session.user.username
|
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 {
|
return {
|
||||||
|
success: true,
|
||||||
authenticated: true,
|
authenticated: true,
|
||||||
user: session.user,
|
user: session.user,
|
||||||
groups: session.user.groups || [],
|
groups: session.user.groups || [],
|
||||||
|
member: memberData
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('❌ Session check error:', error);
|
console.error('❌ Session check error:', error);
|
||||||
|
|
@ -42,6 +67,7 @@ export default defineEventHandler(async (event) => {
|
||||||
authenticated: false,
|
authenticated: false,
|
||||||
user: null,
|
user: null,
|
||||||
groups: [],
|
groups: [],
|
||||||
|
member: null
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -294,6 +294,36 @@ export const getMemberById = async (id: string): Promise<Member> => {
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getMemberByKeycloakId = async (keycloakId: string): Promise<Member | null> => {
|
||||||
|
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<EntityResponse<Member>>(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<Member>): Promise<Member> => {
|
export const createMember = async (data: Partial<Member>): Promise<Member> => {
|
||||||
console.log('[nocodb.createMember] Creating member with fields:', Object.keys(data));
|
console.log('[nocodb.createMember] Creating member with fields:', Object.keys(data));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue