fix: updated from 9.3.3 to 15
This commit is contained in:
@@ -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,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,9 +64,9 @@ 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({
|
||||
success: true,
|
||||
data: drivers,
|
||||
|
||||
@@ -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,12 +52,14 @@ export async function POST(request: Request) {
|
||||
}
|
||||
|
||||
// Check if event exists and is open
|
||||
const eventCheck: unknown = await queryOne(
|
||||
`SELECT event_id, event_status, max_participants,
|
||||
(SELECT COUNT(*) FROM event_registrations
|
||||
WHERE event_id = $1 AND status = 'REGISTERED') as current_registrations
|
||||
FROM events WHERE event_id = $1`,
|
||||
[eventId]
|
||||
|
||||
|
||||
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
|
||||
FROM events WHERE event_id = $1`,
|
||||
[eventId]
|
||||
);
|
||||
|
||||
if (!eventCheck) {
|
||||
|
||||
@@ -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
|
||||
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`
|
||||
);
|
||||
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
|
||||
`);
|
||||
|
||||
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
|
||||
});
|
||||
});
|
||||
|
||||
+26
-23
@@ -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() {
|
||||
@@ -35,30 +36,32 @@ async function getConnectedDrivers() {
|
||||
`;
|
||||
|
||||
const rows = await query(sql);
|
||||
|
||||
const drivers: Driver[] = rows.map((row: DriverServerRow) => ({
|
||||
driver_guid: row.driver_guid,
|
||||
driver_name: row.driver_name,
|
||||
driver_team: row.driver_team,
|
||||
car_model: row.car_model,
|
||||
car_skin: row.car_skin,
|
||||
laps_completed: row.laps_completed,
|
||||
user_rank: row.user_rank,
|
||||
server: {
|
||||
server_id: row.server_id,
|
||||
server_name: row.server_name,
|
||||
server_track: row.server_track,
|
||||
server_config: row.server_config,
|
||||
session_type: row.session_type,
|
||||
session_flag: row.session_flag,
|
||||
session_time: row.session_time,
|
||||
session_laps: row.session_laps,
|
||||
session_elapsed_time: row.session_elapsed_time,
|
||||
session_ambient_temp: row.session_ambient_temp,
|
||||
session_road_temp: row.session_road_temp,
|
||||
connected_players: row.connected_players,
|
||||
},
|
||||
}));
|
||||
|
||||
return rows.map((row: unknown) => ({
|
||||
driver_guid: row.driver_guid,
|
||||
driver_name: row.driver_name,
|
||||
driver_team: row.driver_team,
|
||||
car_model: row.car_model,
|
||||
car_skin: row.car_skin,
|
||||
laps_completed: row.laps_completed,
|
||||
user_rank: row.user_rank,
|
||||
server: {
|
||||
server_id: row.server_id,
|
||||
server_name: row.server_name,
|
||||
server_track: row.server_track,
|
||||
server_config: row.server_config,
|
||||
session_type: row.session_type,
|
||||
session_flag: row.session_flag,
|
||||
session_time: row.session_time,
|
||||
session_laps: row.session_laps,
|
||||
session_elapsed_time: row.session_elapsed_time,
|
||||
session_ambient_temp: row.session_ambient_temp,
|
||||
session_road_temp: row.session_road_temp,
|
||||
connected_players: row.connected_players,
|
||||
},
|
||||
}));
|
||||
return drivers;
|
||||
}
|
||||
|
||||
export default async function DashboardPage() {
|
||||
|
||||
Generated
+455
-390
File diff suppressed because it is too large
Load Diff
+3
-3
@@ -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
@@ -15,7 +15,7 @@
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"jsx": "react-jsx",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
|
||||
+30
-2
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user