84 lines
1.9 KiB
JavaScript
84 lines
1.9 KiB
JavaScript
import { supabase } from './supabase';
|
|
import * as offline from './offlineStorage';
|
|
import { todayISO } from '../utils/date';
|
|
|
|
// Must match authService.js
|
|
const USE_OFFLINE = true;
|
|
|
|
export async function getHabits(identityId) {
|
|
if (USE_OFFLINE) {
|
|
return offline.getAll('habits', { identity_id: identityId });
|
|
}
|
|
|
|
const { data, error } = await supabase
|
|
.from('habits')
|
|
.select('*')
|
|
.eq('identity_id', identityId);
|
|
|
|
if (error) throw error;
|
|
return data || [];
|
|
}
|
|
|
|
export async function getTodayHabitLogs(habitIds) {
|
|
if (!habitIds.length) return {};
|
|
const today = todayISO();
|
|
|
|
if (USE_OFFLINE) {
|
|
const allLogs = await offline.getAll('habit_logs');
|
|
const logs = {};
|
|
allLogs.forEach((log) => {
|
|
if (habitIds.includes(log.habit_id) && log.date === today) {
|
|
logs[log.habit_id] = log.completed;
|
|
}
|
|
});
|
|
return logs;
|
|
}
|
|
|
|
const { data, error } = await supabase
|
|
.from('habit_logs')
|
|
.select('*')
|
|
.in('habit_id', habitIds)
|
|
.eq('date', today);
|
|
|
|
if (error) throw error;
|
|
|
|
const logs = {};
|
|
(data || []).forEach((log) => {
|
|
logs[log.habit_id] = log.completed;
|
|
});
|
|
return logs;
|
|
}
|
|
|
|
export async function saveHabitLog(habitId, completed) {
|
|
const today = todayISO();
|
|
|
|
if (USE_OFFLINE) {
|
|
await offline.upsert(
|
|
'habit_logs',
|
|
{ habit_id: habitId, date: today },
|
|
{ completed }
|
|
);
|
|
return;
|
|
}
|
|
|
|
const { data: existing } = await supabase
|
|
.from('habit_logs')
|
|
.select('id')
|
|
.eq('habit_id', habitId)
|
|
.eq('date', today)
|
|
.maybeSingle();
|
|
|
|
if (existing) {
|
|
const { error } = await supabase
|
|
.from('habit_logs')
|
|
.update({ completed })
|
|
.eq('id', existing.id);
|
|
if (error) throw error;
|
|
} else {
|
|
const { error } = await supabase
|
|
.from('habit_logs')
|
|
.insert({ habit_id: habitId, date: today, completed });
|
|
if (error) throw error;
|
|
}
|
|
}
|