From 007494d21c6ea551b40e4cec76fa1af0c927ea03 Mon Sep 17 00:00:00 2001
From: "gpt-engineer-app[bot]"
<159125892+gpt-engineer-app[bot]@users.noreply.github.com>
Date: Mon, 3 Nov 2025 02:04:14 +0000
Subject: [PATCH] Fix: Resolve type errors in homepage components
---
src/components/designers/DesignerCard.tsx | 4 +-
src/components/homepage/FeaturedParks.tsx | 2 +-
.../manufacturers/ManufacturerCard.tsx | 6 +-
src/types/database.ts | 122 +++++++++---------
4 files changed, 67 insertions(+), 67 deletions(-)
diff --git a/src/components/designers/DesignerCard.tsx b/src/components/designers/DesignerCard.tsx
index 9d3c210c..64b1dd6f 100644
--- a/src/components/designers/DesignerCard.tsx
+++ b/src/components/designers/DesignerCard.tsx
@@ -112,11 +112,11 @@ export function DesignerCard({ company }: DesignerCardProps) {
)}
- {company.average_rating > 0 && (
+ {company.average_rating && company.average_rating > 0 && (
{company.average_rating.toFixed(1)}
- {company.review_count > 0 && (
+ {company.review_count && company.review_count > 0 && (
({company.review_count})
)}
diff --git a/src/components/homepage/FeaturedParks.tsx b/src/components/homepage/FeaturedParks.tsx
index 57d0e423..e207b561 100644
--- a/src/components/homepage/FeaturedParks.tsx
+++ b/src/components/homepage/FeaturedParks.tsx
@@ -71,7 +71,7 @@ export function FeaturedParks() {
{/* Rating Badge */}
- {park.average_rating.toFixed(1)}
+ {park.average_rating ? park.average_rating.toFixed(1) : 'N/A'}
diff --git a/src/components/manufacturers/ManufacturerCard.tsx b/src/components/manufacturers/ManufacturerCard.tsx
index e9b57ddf..d85a5721 100644
--- a/src/components/manufacturers/ManufacturerCard.tsx
+++ b/src/components/manufacturers/ManufacturerCard.tsx
@@ -43,7 +43,7 @@ export function ManufacturerCard({ company }: ManufacturerCardProps) {
{(company.card_image_url || company.card_image_id) ? (

- {company.average_rating > 0 && (
+ {company.average_rating && company.average_rating > 0 && (
{company.average_rating.toFixed(1)}
- {company.review_count > 0 && (
+ {company.review_count && company.review_count > 0 && (
({company.review_count})
)}
diff --git a/src/types/database.ts b/src/types/database.ts
index f00a5fbd..af8209a7 100644
--- a/src/types/database.ts
+++ b/src/types/database.ts
@@ -27,8 +27,8 @@ export interface Company {
banner_image_id?: string | null;
card_image_url?: string | null;
card_image_id?: string | null;
- average_rating: number;
- review_count: number;
+ average_rating: number | null;
+ review_count: number | null;
}
export interface Park {
@@ -52,10 +52,10 @@ export interface Park {
banner_image_id?: string | null;
card_image_url?: string | null;
card_image_id?: string | null;
- average_rating: number;
- review_count: number;
- ride_count: number;
- coaster_count: number;
+ average_rating: number | null;
+ review_count: number | null;
+ ride_count: number | null;
+ coaster_count: number | null;
created_at: string;
updated_at: string;
}
@@ -135,76 +135,76 @@ export interface Ride {
description?: string | null;
park?: Park | { name: string; slug: string; location?: Location }; // Allow partial park data
ride_model?: RideModel;
- manufacturer?: Company;
- designer?: Company;
+ manufacturer?: Company | null;
+ designer?: Company | null;
category: string; // Allow any string from database
- ride_sub_type?: string; // Sub-category like "Flying Coaster", "Inverted Coaster", etc.
+ ride_sub_type?: string | null; // Sub-category like "Flying Coaster", "Inverted Coaster", etc.
status: string; // Allow any string from database
opening_date?: string | null;
opening_date_precision?: string | null;
closing_date?: string | null;
closing_date_precision?: string | null;
- height_requirement?: number;
- age_requirement?: number;
- capacity_per_hour?: number;
- duration_seconds?: number;
- max_speed_kmh?: number;
- max_height_meters?: number;
- length_meters?: number;
- inversions?: number;
+ height_requirement?: number | null;
+ age_requirement?: number | null;
+ capacity_per_hour?: number | null;
+ duration_seconds?: number | null;
+ max_speed_kmh?: number | null;
+ max_height_meters?: number | null;
+ length_meters?: number | null;
+ inversions?: number | null;
technical_specifications?: RideTechnicalSpec[];
coaster_statistics?: RideCoasterStat[];
name_history?: RideNameHistory[];
- average_rating: number;
- review_count: number;
- image_url?: string;
- banner_image_url?: string;
- banner_image_id?: string;
- card_image_url?: string;
- card_image_id?: string;
+ average_rating: number | null;
+ review_count: number | null;
+ image_url?: string | null;
+ banner_image_url?: string | null;
+ banner_image_id?: string | null;
+ card_image_url?: string | null;
+ card_image_id?: string | null;
// Roller coaster specific fields
- coaster_type?: string;
- seating_type?: string;
- intensity_level?: string;
- track_material?: string[];
- support_material?: string[];
- propulsion_method?: string[];
- drop_height_meters?: number;
- max_g_force?: number;
+ coaster_type?: string | null;
+ seating_type?: string | null;
+ intensity_level?: string | null;
+ track_material?: string[] | null;
+ support_material?: string[] | null;
+ propulsion_method?: string[] | null;
+ drop_height_meters?: number | null;
+ max_g_force?: number | null;
// Water ride specific fields
- water_depth_cm?: number;
- splash_height_meters?: number;
- wetness_level?: string;
- flume_type?: string;
- boat_capacity?: number;
+ water_depth_cm?: number | null;
+ splash_height_meters?: number | null;
+ wetness_level?: string | null;
+ flume_type?: string | null;
+ boat_capacity?: number | null;
// Dark ride specific fields
- theme_name?: string;
- story_description?: string;
- show_duration_seconds?: number;
- animatronics_count?: number;
- projection_type?: string;
- ride_system?: string;
- scenes_count?: number;
+ theme_name?: string | null;
+ story_description?: string | null;
+ show_duration_seconds?: number | null;
+ animatronics_count?: number | null;
+ projection_type?: string | null;
+ ride_system?: string | null;
+ scenes_count?: number | null;
// Flat ride specific fields
- rotation_type?: string;
- motion_pattern?: string;
- platform_count?: number;
- swing_angle_degrees?: number;
- rotation_speed_rpm?: number;
- arm_length_meters?: number;
- max_height_reached_meters?: number;
+ rotation_type?: string | null;
+ motion_pattern?: string | null;
+ platform_count?: number | null;
+ swing_angle_degrees?: number | null;
+ rotation_speed_rpm?: number | null;
+ arm_length_meters?: number | null;
+ max_height_reached_meters?: number | null;
// Kiddie ride specific fields
- min_age?: number;
- max_age?: number;
- educational_theme?: string;
- character_theme?: string;
+ min_age?: number | null;
+ max_age?: number | null;
+ educational_theme?: string | null;
+ character_theme?: string | null;
// Transportation specific fields
- transport_type?: string;
- route_length_meters?: number;
- stations_count?: number;
- vehicle_capacity?: number;
- vehicles_count?: number;
- round_trip_duration_seconds?: number;
+ transport_type?: string | null;
+ route_length_meters?: number | null;
+ stations_count?: number | null;
+ vehicle_capacity?: number | null;
+ vehicles_count?: number | null;
+ round_trip_duration_seconds?: number | null;
}
export interface Profile {