Backend / src /services /supabase.service.ts
Cuong2004's picture
fix bug
3e12ae4
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;
}
}
}