Replace all mock/placeholder data with real data systems
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:
2025-08-31 18:28:38 +02:00
parent 9d93f0ca84
commit 1aef356d78
8 changed files with 954 additions and 121 deletions

View File

@@ -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: {