fix: updated from 9.3.3 to 15

This commit is contained in:
2026-06-17 17:49:00 +01:00
parent 8589c83fb8
commit e9555c9f74
9 changed files with 545 additions and 445 deletions
+3 -2
View File
@@ -3,6 +3,7 @@
import { query } from '@/lib/db'; import { query } from '@/lib/db';
import { NextResponse } from 'next/server'; import { NextResponse } from 'next/server';
import { DriverServerRow } from '@/types/racing';
export const dynamic = 'force-dynamic'; export const dynamic = 'force-dynamic';
@@ -35,9 +36,9 @@ export async function GET() {
ORDER BY s.server_id, u.user_rank ASC ORDER BY s.server_id, u.user_rank ASC
`; `;
const rows = await query(sql); const rows = await query<DriverServerRow>(sql);
const drivers = rows.map((row: unknown) => ({ const drivers = rows.map((row) => ({
driver_guid: row.driver_guid, driver_guid: row.driver_guid,
driver_name: row.driver_name, driver_name: row.driver_name,
driver_team: row.driver_team, driver_team: row.driver_team,
+4 -5
View File
@@ -4,7 +4,7 @@
import { NextResponse } from 'next/server'; import { NextResponse } from 'next/server';
import { query } from '@/lib/db'; import { query } from '@/lib/db';
import { DriverWithServer } from '@/types/racing'; import { DriverServerRow } from '@/types/racing';
export async function GET(request: Request) { export async function GET(request: Request) {
try { try {
@@ -40,10 +40,10 @@ export async function GET(request: Request) {
ORDER BY u.user_rank ASC ORDER BY u.user_rank ASC
`; `;
const rows = await query(sql); const rows = await query<DriverServerRow>(sql);
// Transform to proper structure // Transform to proper structure
const drivers: DriverWithServer[] = rows.map((row: unkown) => ({ const drivers = rows.map((row) => ({
driver_guid: row.driver_guid, driver_guid: row.driver_guid,
driver_name: row.driver_name, driver_name: row.driver_name,
driver_team: row.driver_team, driver_team: row.driver_team,
@@ -57,7 +57,6 @@ export async function GET(request: Request) {
is_loading: row.is_loading, is_loading: row.is_loading,
current_server: row.current_server, current_server: row.current_server,
created_at: row.created_at, created_at: row.created_at,
// Include server info if they're connected
server: row.server_id ? { server: row.server_id ? {
server_id: row.server_id, server_id: row.server_id,
server_name: row.server_name, server_name: row.server_name,
@@ -65,7 +64,7 @@ export async function GET(request: Request) {
session_type: row.session_type, session_type: row.session_type,
session_flag: row.session_flag, session_flag: row.session_flag,
connected_players: row.connected_players, connected_players: row.connected_players,
} : undefined, } : null, // Handle case where driver is not connected to a server
})); }));
return NextResponse.json({ return NextResponse.json({
+4 -1
View File
@@ -3,6 +3,7 @@
import { NextResponse } from 'next/server'; import { NextResponse } from 'next/server';
import { query, queryOne } from '@/lib/db'; import { query, queryOne } from '@/lib/db';
import { EventCheckRow } from '@/types/racing';
export async function POST(request: Request) { export async function POST(request: Request) {
try { try {
@@ -51,7 +52,9 @@ export async function POST(request: Request) {
} }
// Check if event exists and is open // Check if event exists and is open
const eventCheck: unknown = await queryOne(
const eventCheck = await queryOne<EventCheckRow>(
`SELECT event_id, event_status, max_participants, `SELECT event_id, event_status, max_participants,
(SELECT COUNT(*) FROM event_registrations (SELECT COUNT(*) FROM event_registrations
WHERE event_id = $1 AND status = 'REGISTERED') as current_registrations WHERE event_id = $1 AND status = 'REGISTERED') as current_registrations
+8 -7
View File
@@ -3,6 +3,7 @@
import { getTelemetryBridge } from '@/lib/telemetryBridge'; import { getTelemetryBridge } from '@/lib/telemetryBridge';
import { query } from '@/lib/db'; import { query } from '@/lib/db';
import { RankRow } from '@/types/racing';
export const dynamic = 'force-dynamic'; export const dynamic = 'force-dynamic';
export const runtime = 'nodejs'; export const runtime = 'nodejs';
@@ -20,20 +21,20 @@ async function updateRankCache() {
try { try {
// Get all users sorted by rank (higher is better) // Get all users sorted by rank (higher is better)
const users = await query( const users = await query<RankRow>(`
`SELECT SELECT
driver_guid, driver_guid,
user_rank, user_rank,
ROW_NUMBER() OVER (ORDER BY user_rank DESC) as rank_position ROW_NUMBER() OVER (ORDER BY user_rank DESC) as rank_position
FROM users FROM users
WHERE user_rank IS NOT NULL WHERE user_rank IS NOT NULL
ORDER BY user_rank DESC` ORDER BY user_rank DESC
); `);
rankCache.clear(); rankCache.clear();
users.forEach((row: unknown) => { users.forEach((row) => {
rankCache.set(row.driver_guid.toString(), { rankCache.set(String(row.driver_guid), {
rank: row.rank_position, rank: row.user_position,
rating: row.user_rank rating: row.user_rank
}); });
}); });
+4 -1
View File
@@ -4,6 +4,7 @@
import { query } from '@/lib/db'; import { query } from '@/lib/db';
import { LiveDotIcon } from '@/components/ui/icons'; import { LiveDotIcon } from '@/components/ui/icons';
import DashboardClient from '@/components/dashboard/DashboardClient'; import DashboardClient from '@/components/dashboard/DashboardClient';
import { Driver, DriverServerRow } from '@/types/racing';
export const dynamic = "force-dynamic"; export const dynamic = "force-dynamic";
async function getConnectedDrivers() { async function getConnectedDrivers() {
@@ -36,7 +37,7 @@ async function getConnectedDrivers() {
const rows = await query(sql); const rows = await query(sql);
return rows.map((row: unknown) => ({ const drivers: Driver[] = rows.map((row: DriverServerRow) => ({
driver_guid: row.driver_guid, driver_guid: row.driver_guid,
driver_name: row.driver_name, driver_name: row.driver_name,
driver_team: row.driver_team, driver_team: row.driver_team,
@@ -59,6 +60,8 @@ async function getConnectedDrivers() {
connected_players: row.connected_players, connected_players: row.connected_players,
}, },
})); }));
return drivers;
} }
export default async function DashboardPage() { export default async function DashboardPage() {
+455 -390
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -11,10 +11,10 @@
"dependencies": { "dependencies": {
"axios": "^1.12.2", "axios": "^1.12.2",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"next": "^15", "next": "^16.2.9",
"pg": "^8.16.3", "pg": "^8.16.3",
"react": "^19.2.3", "react": "^19.2.7",
"react-dom": "^19.2.3", "react-dom": "^19.2.7",
"socket.io-client": "^4.2.0" "socket.io-client": "^4.2.0"
}, },
"devDependencies": { "devDependencies": {
+1 -1
View File
@@ -15,7 +15,7 @@
"moduleResolution": "bundler", "moduleResolution": "bundler",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"jsx": "preserve", "jsx": "react-jsx",
"incremental": true, "incremental": true,
"plugins": [ "plugins": [
{ {
+30 -2
View File
@@ -41,8 +41,29 @@ export interface Driver {
} }
// Helpful joined type for displaying drivers with their server info // Helpful joined type for displaying drivers with their server info
export interface DriverWithServer extends Driver { export interface DriverServerRow extends Driver {
server?: Partial<Server>; // Make it partial since we don't always need all fields server_id: number;
server_name: string;
server_track: string;
server_config: string;
session_type: number;
session_flag: FlagType;
session_time: number;
session_laps: number;
session_elapsed_time: number;
session_ambient_temp: number;
session_road_temp: number;
connected_players: number;
}
export interface RankRow {
driver_guid: number;
user_rank: number;
user_position: number;
} }
// For live tracking (you mentioned getting positions from parser) // For live tracking (you mentioned getting positions from parser)
@@ -92,6 +113,13 @@ export interface Event {
updated_at: Date; updated_at: Date;
} }
export interface EventCheckRow {
event_id: number;
event_status: 'OPEN' | 'CLOSED' | 'COMPLETED' | 'CANCELLED';
max_participants: number;
current_registrations: number;
}
export interface EventRegistration { export interface EventRegistration {
registration_id: number; registration_id: number;
event_id: number; event_id: number;