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 { NextResponse } from 'next/server';
import { DriverServerRow } from '@/types/racing';
export const dynamic = 'force-dynamic';
@@ -35,9 +36,9 @@ export async function GET() {
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_name: row.driver_name,
driver_team: row.driver_team,
+4 -5
View File
@@ -4,7 +4,7 @@
import { NextResponse } from 'next/server';
import { query } from '@/lib/db';
import { DriverWithServer } from '@/types/racing';
import { DriverServerRow } from '@/types/racing';
export async function GET(request: Request) {
try {
@@ -40,10 +40,10 @@ export async function GET(request: Request) {
ORDER BY u.user_rank ASC
`;
const rows = await query(sql);
const rows = await query<DriverServerRow>(sql);
// Transform to proper structure
const drivers: DriverWithServer[] = rows.map((row: unkown) => ({
const drivers = rows.map((row) => ({
driver_guid: row.driver_guid,
driver_name: row.driver_name,
driver_team: row.driver_team,
@@ -57,7 +57,6 @@ export async function GET(request: Request) {
is_loading: row.is_loading,
current_server: row.current_server,
created_at: row.created_at,
// Include server info if they're connected
server: row.server_id ? {
server_id: row.server_id,
server_name: row.server_name,
@@ -65,7 +64,7 @@ export async function GET(request: Request) {
session_type: row.session_type,
session_flag: row.session_flag,
connected_players: row.connected_players,
} : undefined,
} : null, // Handle case where driver is not connected to a server
}));
return NextResponse.json({
+4 -1
View File
@@ -3,6 +3,7 @@
import { NextResponse } from 'next/server';
import { query, queryOne } from '@/lib/db';
import { EventCheckRow } from '@/types/racing';
export async function POST(request: Request) {
try {
@@ -51,7 +52,9 @@ export async function POST(request: Request) {
}
// 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 COUNT(*) FROM event_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 { query } from '@/lib/db';
import { RankRow } from '@/types/racing';
export const dynamic = 'force-dynamic';
export const runtime = 'nodejs';
@@ -20,20 +21,20 @@ async function updateRankCache() {
try {
// Get all users sorted by rank (higher is better)
const users = await query(
`SELECT
const users = await query<RankRow>(`
SELECT
driver_guid,
user_rank,
ROW_NUMBER() OVER (ORDER BY user_rank DESC) as rank_position
FROM users
WHERE user_rank IS NOT NULL
ORDER BY user_rank DESC`
);
ORDER BY user_rank DESC
`);
rankCache.clear();
users.forEach((row: unknown) => {
rankCache.set(row.driver_guid.toString(), {
rank: row.rank_position,
users.forEach((row) => {
rankCache.set(String(row.driver_guid), {
rank: row.user_position,
rating: row.user_rank
});
});
+4 -1
View File
@@ -4,6 +4,7 @@
import { query } from '@/lib/db';
import { LiveDotIcon } from '@/components/ui/icons';
import DashboardClient from '@/components/dashboard/DashboardClient';
import { Driver, DriverServerRow } from '@/types/racing';
export const dynamic = "force-dynamic";
async function getConnectedDrivers() {
@@ -36,7 +37,7 @@ async function getConnectedDrivers() {
const rows = await query(sql);
return rows.map((row: unknown) => ({
const drivers: Driver[] = rows.map((row: DriverServerRow) => ({
driver_guid: row.driver_guid,
driver_name: row.driver_name,
driver_team: row.driver_team,
@@ -59,6 +60,8 @@ async function getConnectedDrivers() {
connected_players: row.connected_players,
},
}));
return drivers;
}
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": {
"axios": "^1.12.2",
"date-fns": "^4.1.0",
"next": "^15",
"next": "^16.2.9",
"pg": "^8.16.3",
"react": "^19.2.3",
"react-dom": "^19.2.3",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"socket.io-client": "^4.2.0"
},
"devDependencies": {
+1 -1
View File
@@ -15,7 +15,7 @@
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"jsx": "react-jsx",
"incremental": true,
"plugins": [
{
+30 -2
View File
@@ -41,8 +41,29 @@ export interface Driver {
}
// Helpful joined type for displaying drivers with their server info
export interface DriverWithServer extends Driver {
server?: Partial<Server>; // Make it partial since we don't always need all fields
export interface DriverServerRow extends Driver {
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)
@@ -92,6 +113,13 @@ export interface Event {
updated_at: Date;
}
export interface EventCheckRow {
event_id: number;
event_status: 'OPEN' | 'CLOSED' | 'COMPLETED' | 'CANCELLED';
max_participants: number;
current_registrations: number;
}
export interface EventRegistration {
registration_id: number;
event_id: number;