Files
Nova40/src/services/habitService.js
T
dios.one 23dc306f12 init
2026-04-21 18:00:30 +07:00

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;
}
}