11import { query } from '@/lib/db' ;
22import { SolarActivity , PropagationForecast , BandCondition , PropagationAlert } from '@/types/propagation' ;
33
4+ // Database row types for DECIMAL fields that come back as strings
5+ interface SolarActivityRow {
6+ id ?: number ;
7+ timestamp : Date ;
8+ solar_flux_index : string ; // DECIMAL comes back as string
9+ a_index : string ; // DECIMAL comes back as string
10+ k_index : string ; // DECIMAL comes back as string
11+ solar_wind_speed ?: string | null ; // DECIMAL comes back as string
12+ solar_wind_density ?: string | null ; // DECIMAL comes back as string
13+ xray_class ?: string ;
14+ created_at ?: Date ;
15+ updated_at ?: Date ;
16+ }
17+
418export class Propagation {
519 /**
620 * Save solar activity data
@@ -33,7 +47,16 @@ export class Propagation {
3347 data . xray_class || null
3448 ] ) ;
3549
36- return result . rows [ 0 ] ;
50+ const row = result . rows [ 0 ] as SolarActivityRow ;
51+ // Convert DECIMAL fields from strings to numbers
52+ return {
53+ ...row ,
54+ solar_flux_index : parseFloat ( row . solar_flux_index ) ,
55+ a_index : parseFloat ( row . a_index ) ,
56+ k_index : parseFloat ( row . k_index ) ,
57+ solar_wind_speed : row . solar_wind_speed ? parseFloat ( row . solar_wind_speed ) : undefined ,
58+ solar_wind_density : row . solar_wind_density ? parseFloat ( row . solar_wind_density ) : undefined
59+ } ;
3760 }
3861
3962 /**
@@ -49,7 +72,16 @@ export class Propagation {
4972
5073 const result = await query ( sql ) ;
5174 if ( result . rows [ 0 ] ) {
52- return result . rows [ 0 ] ;
75+ const row = result . rows [ 0 ] as SolarActivityRow ;
76+ // Convert DECIMAL fields from strings to numbers
77+ return {
78+ ...row ,
79+ solar_flux_index : parseFloat ( row . solar_flux_index ) ,
80+ a_index : parseFloat ( row . a_index ) ,
81+ k_index : parseFloat ( row . k_index ) ,
82+ solar_wind_speed : row . solar_wind_speed ? parseFloat ( row . solar_wind_speed ) : undefined ,
83+ solar_wind_density : row . solar_wind_density ? parseFloat ( row . solar_wind_density ) : undefined
84+ } ;
5385 }
5486 } catch ( error ) {
5587 console . warn ( 'Database unavailable for solar activity query, using fallback:' , error ) ;
@@ -109,7 +141,15 @@ export class Propagation {
109141 ` ;
110142
111143 const result = await query ( sql , [ startDate , endDate ] ) ;
112- return result . rows ;
144+ // Convert DECIMAL fields from strings to numbers for all rows
145+ return result . rows . map ( ( row : SolarActivityRow ) : SolarActivity => ( {
146+ ...row ,
147+ solar_flux_index : parseFloat ( row . solar_flux_index ) ,
148+ a_index : parseFloat ( row . a_index ) ,
149+ k_index : parseFloat ( row . k_index ) ,
150+ solar_wind_speed : row . solar_wind_speed ? parseFloat ( row . solar_wind_speed ) : undefined ,
151+ solar_wind_density : row . solar_wind_density ? parseFloat ( row . solar_wind_density ) : undefined
152+ } ) ) ;
113153 }
114154
115155 /**
0 commit comments