File size: 2,217 Bytes
d4abe4b 3e12ae4 d4abe4b 3e12ae4 d4abe4b 3e12ae4 d4abe4b 3e12ae4 d4abe4b 3e12ae4 d4abe4b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 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;
}
}
}
|