@@ -90,6 +90,32 @@ export class AnalyticsService {
9090 }
9191 }
9292
93+ /**
94+ * Track a registration for an event
95+ */
96+ static async trackEventRegistration ( eventId : number ) : Promise < void > {
97+ const supabase = await createClient ( )
98+
99+ const { data : event , error : eventError } = await supabase
100+ . from ( 'events' )
101+ . select ( 'id, company_id' )
102+ . eq ( 'id' , eventId )
103+ . single ( )
104+
105+ if ( eventError || ! event ) {
106+ throw new Error ( 'Event not found' )
107+ }
108+
109+ // Update company analytics if event has a company
110+ if ( event . company_id ) {
111+ await this . incrementCompanyAnalytics (
112+ event . company_id ,
113+ 'total_registrations' ,
114+ 1
115+ )
116+ }
117+ }
118+
93119 /**
94120 * Track a view for a hackathon
95121 */
@@ -165,12 +191,64 @@ export class AnalyticsService {
165191 const supabase = await createClient ( )
166192 const today = new Date ( ) . toISOString ( ) . split ( 'T' ) [ 0 ]
167193
168- await supabase . rpc ( 'increment_company_analytics' , {
194+ // Try RPC first, fallback to manual upsert if it fails
195+ const { error : rpcError } = await supabase . rpc ( 'increment_company_analytics' , {
169196 p_company_id : companyId ,
170197 p_date : today ,
171198 p_field : field ,
172199 p_increment : increment ,
173200 } )
201+
202+ if ( rpcError ) {
203+ // Fallback: Get existing record or create new one
204+ const { data : existing , error : fetchError } = await supabase
205+ . from ( 'company_analytics' )
206+ . select ( '*' )
207+ . eq ( 'company_id' , companyId )
208+ . eq ( 'date' , today )
209+ . single ( )
210+
211+ if ( fetchError && fetchError . code !== 'PGRST116' ) {
212+ console . error ( 'Error fetching company analytics:' , fetchError )
213+ return
214+ }
215+
216+ if ( existing ) {
217+ // Update existing record
218+ const currentValue = ( existing [ field ] as number ) || 0
219+ const { error : updateError } = await supabase
220+ . from ( 'company_analytics' )
221+ . update ( { [ field ] : currentValue + increment } )
222+ . eq ( 'company_id' , companyId )
223+ . eq ( 'date' , today )
224+
225+ if ( updateError ) {
226+ console . error ( 'Error updating company analytics:' , updateError )
227+ }
228+ } else {
229+ // Create new record
230+ const { error : insertError } = await supabase
231+ . from ( 'company_analytics' )
232+ . insert ( {
233+ company_id : companyId ,
234+ date : today ,
235+ events_created : 0 ,
236+ events_published : 0 ,
237+ hackathons_created : 0 ,
238+ hackathons_published : 0 ,
239+ total_views : 0 ,
240+ total_clicks : 0 ,
241+ total_registrations : 0 ,
242+ total_participants : 0 ,
243+ revenue_generated : 0 ,
244+ [ field ] : increment ,
245+ } )
246+
247+ if ( insertError ) {
248+ console . error ( 'Error inserting company analytics:' , insertError )
249+ }
250+ }
251+ }
174252 }
175253
176254 /**
0 commit comments