| import { createClient, SupabaseClient } from '@supabase/supabase-js'; |
| import { config } from '../utils/config.js'; |
| import { logger } from '../utils/logger.js'; |
| import type { TriageResult } from '../types/index.js'; |
|
|
| export class SupabaseService { |
| private client: SupabaseClient; |
|
|
| constructor() { |
| this.client = createClient( |
| config.supabase.url, |
| config.supabase.serviceKey |
| ); |
| } |
|
|
| getClient(): SupabaseClient { |
| return this.client; |
| } |
|
|
| async saveSession(sessionData: { |
| user_id: string; |
| input_text: string; |
| image_url?: string; |
| triage_result: TriageResult; |
| location?: { lat: number; lng: number }; |
| }): Promise<void> { |
| try { |
| const { error } = await this.client |
| .from('sessions') |
| .insert({ |
| user_id: sessionData.user_id, |
| input_text: sessionData.input_text, |
| image_url: sessionData.image_url, |
| triage_level: sessionData.triage_result.triage_level, |
| triage_result: sessionData.triage_result, |
| location: sessionData.location, |
| created_at: new Date().toISOString() |
| }); |
|
|
| if (error) { |
| logger.error({ error }, 'Error saving session'); |
| throw error; |
| } |
|
|
| logger.info('Session saved successfully'); |
| } catch (error) { |
| logger.error({ error }, 'Failed to save session'); |
| throw error; |
| } |
| } |
|
|
| async getSession(sessionId: string) { |
| try { |
| const { data, error } = await this.client |
| .from('sessions') |
| .select('*') |
| .eq('id', sessionId) |
| .single(); |
|
|
| if (error) { |
| logger.error({ error }, 'Error fetching session'); |
| throw error; |
| } |
|
|
| return data; |
| } catch (error) { |
| logger.error({ error }, 'Failed to fetch session'); |
| throw error; |
| } |
| } |
|
|
| async verifyToken(token: string): Promise<{ user_id: string } | null> { |
| try { |
| const { data, error } = await this.client.auth.getUser(token); |
|
|
| if (error || !data.user) { |
| logger.warn('Invalid token'); |
| return null; |
| } |
|
|
| return { user_id: data.user.id }; |
| } catch (error) { |
| logger.error({ error }, 'Token verification failed'); |
| return null; |
| } |
| } |
| } |
|
|
|
|