Refactor: Align system with gateway_users architecture
- Fixed database relationships: LlmRequest now properly uses gateway_user_id instead of user_id - Updated Models: GatewayUser and LlmRequest relationships corrected - Removed User->llmRequests relationship (admin users don't have LLM requests) - Simplified Dashboard: Now shows Gateway User statistics instead of admin users - Removed obsolete Budgets management pages (budgets handled directly in gateway_users) - Removed User Budgets admin section (redundant with gateway_users management) - Fixed view errors: Added null-checks for user_id in keys views - Updated navigation: Removed Budget and User Budget links - Updated routes: Cleaned up unused BudgetController and UserManagementController routes - Simplified StatisticsService: Focus on gateway_users and basic metrics only
This commit is contained in:
@@ -18,20 +18,12 @@ class DashboardController extends Controller
|
||||
{
|
||||
$stats = $this->statsService->getDashboardStats();
|
||||
$dailyUsage = $this->statsService->getDailyUsageChart(30);
|
||||
$topUsers = $this->statsService->getTopUsers(5);
|
||||
$providerStats = $this->statsService->getUsageByProvider(30);
|
||||
$modelStats = $this->statsService->getUsageByModel(30);
|
||||
$costTrends = $this->statsService->getCostTrends(30);
|
||||
$errorStats = $this->statsService->getErrorStats(30);
|
||||
|
||||
return view('dashboard', compact(
|
||||
'stats',
|
||||
'dailyUsage',
|
||||
'topUsers',
|
||||
'providerStats',
|
||||
'modelStats',
|
||||
'costTrends',
|
||||
'errorStats'
|
||||
'providerStats'
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,11 @@ class GatewayUser extends Model implements Authenticatable
|
||||
return $this->hasMany(UsageLog::class, 'gateway_user_id', 'user_id');
|
||||
}
|
||||
|
||||
public function llmRequests()
|
||||
{
|
||||
return $this->hasMany(LlmRequest::class, 'gateway_user_id', 'user_id');
|
||||
}
|
||||
|
||||
// Scopes
|
||||
public function scopeActive($query)
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
class LlmRequest extends Model
|
||||
{
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'gateway_user_id',
|
||||
'provider',
|
||||
'model',
|
||||
'request_payload',
|
||||
@@ -41,9 +41,9 @@ class LlmRequest extends Model
|
||||
'http_status' => 'integer',
|
||||
];
|
||||
|
||||
public function user(): BelongsTo
|
||||
public function gatewayUser(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
return $this->belongsTo(GatewayUser::class, 'gateway_user_id', 'user_id');
|
||||
}
|
||||
|
||||
public function isSuccess(): bool
|
||||
|
||||
@@ -69,12 +69,4 @@ class User extends Authenticatable
|
||||
{
|
||||
return $this->hasMany(UserProviderCredential::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user's LLM requests
|
||||
*/
|
||||
public function llmRequests()
|
||||
{
|
||||
return $this->hasMany(LlmRequest::class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\LlmRequest;
|
||||
use App\Models\User;
|
||||
use App\Models\GatewayUser;
|
||||
use App\Models\UserProviderCredential;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
@@ -15,8 +15,9 @@ class StatisticsService
|
||||
public function getDashboardStats(): array
|
||||
{
|
||||
return [
|
||||
'total_users' => User::count(),
|
||||
'active_credentials' => UserProviderCredential::where('is_active', true)->count(),
|
||||
'total_gateway_users' => GatewayUser::count(),
|
||||
'active_gateway_users' => GatewayUser::where('blocked', false)->count(),
|
||||
'blocked_gateway_users' => GatewayUser::where('blocked', true)->count(),
|
||||
'total_requests_today' => LlmRequest::whereDate('created_at', today())->count(),
|
||||
'total_spend_today' => LlmRequest::whereDate('created_at', today())->sum('total_cost') ?? 0,
|
||||
'total_tokens_today' => LlmRequest::whereDate('created_at', today())->sum('total_tokens') ?? 0,
|
||||
@@ -73,11 +74,11 @@ class StatisticsService
|
||||
}
|
||||
|
||||
/**
|
||||
* Get top users by spend
|
||||
* Get top gateway users by spend
|
||||
*/
|
||||
public function getTopUsers(int $limit = 10)
|
||||
{
|
||||
return User::select('users.*')
|
||||
return GatewayUser::select('gateway_users.*')
|
||||
->withCount('llmRequests')
|
||||
->withSum('llmRequests as total_cost', 'total_cost')
|
||||
->withSum('llmRequests as total_tokens', 'total_tokens')
|
||||
@@ -91,18 +92,18 @@ class StatisticsService
|
||||
*/
|
||||
public function getRecentActivity(int $limit = 20)
|
||||
{
|
||||
return LlmRequest::with('user')
|
||||
return LlmRequest::with('gatewayUser')
|
||||
->orderByDesc('created_at')
|
||||
->limit($limit)
|
||||
->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user statistics
|
||||
* Get gateway user statistics
|
||||
*/
|
||||
public function getUserStatistics(int $userId, int $days = 30)
|
||||
public function getGatewayUserStatistics(string $gatewayUserId, int $days = 30)
|
||||
{
|
||||
return LlmRequest::where('user_id', $userId)
|
||||
return LlmRequest::where('gateway_user_id', $gatewayUserId)
|
||||
->where('created_at', '>=', now()->subDays($days))
|
||||
->where('status', 'success')
|
||||
->selectRaw('
|
||||
|
||||
Reference in New Issue
Block a user