Replace all mock/placeholder data with real data systems
All checks were successful
Build And Push Image / docker (push) Successful in 2m13s
All checks were successful
Build And Push Image / docker (push) Successful in 2m13s
- Added getUserCount() method to Keycloak admin for real user statistics - Replaced hardcoded userCount (25) with live Keycloak data in admin stats - Fixed board meeting API to query real events, removed Jan 15 2025 fallback - Updated board stats to count real events instead of hardcoded 3 - Created member-tiers service for proper tier determination - Created dues-calculator service for accurate dues tracking - Updated auth callback to use member-tiers service - Updated overdue-count API to use dues-calculator - Added data quality tracking with confidence levels - Added proper error handling - returns null/0 instead of fake data - Included source tracking for all data (live/calculated/fallback) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -36,12 +36,24 @@ export default defineEventHandler(async (event) => {
|
||||
// Get user info
|
||||
const userInfo = await keycloak.getUserInfo(tokens.access_token);
|
||||
|
||||
// Tier determination logic - admin > board > user priority
|
||||
const determineTier = (groups: string[]): 'user' | 'board' | 'admin' => {
|
||||
if (groups.includes('admin')) return 'admin';
|
||||
if (groups.includes('board')) return 'board';
|
||||
return 'user'; // Default tier
|
||||
};
|
||||
// Use member-tiers service for proper tier determination
|
||||
const { determineMemberTierByEmail, determineMemberTierFromKeycloak } = await import('~/server/utils/member-tiers');
|
||||
|
||||
// First try to determine tier by email (checks NocoDB and Keycloak)
|
||||
const tierResult = await determineMemberTierByEmail(userInfo.email);
|
||||
|
||||
// Log tier determination for monitoring
|
||||
console.log(`[auth-callback] Tier determination for ${userInfo.email}:`, {
|
||||
tier: tierResult.tier,
|
||||
source: tierResult.source,
|
||||
confidence: tierResult.confidence,
|
||||
reason: tierResult.reason
|
||||
});
|
||||
|
||||
// Alert admin if tier confidence is low
|
||||
if (tierResult.confidence === 'low') {
|
||||
console.warn(`[auth-callback] Low confidence tier assignment for ${userInfo.email}. Manual review recommended.`);
|
||||
}
|
||||
|
||||
// Create session
|
||||
const sessionData = {
|
||||
@@ -52,7 +64,8 @@ export default defineEventHandler(async (event) => {
|
||||
firstName: userInfo.given_name,
|
||||
lastName: userInfo.family_name,
|
||||
username: userInfo.preferred_username,
|
||||
tier: determineTier(userInfo.groups || []),
|
||||
tier: tierResult.tier,
|
||||
tierSource: tierResult.source, // Track where tier came from
|
||||
groups: userInfo.groups || ['user'],
|
||||
},
|
||||
tokens: {
|
||||
|
||||
Reference in New Issue
Block a user