first commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
// src/services/agendaConfigService.js
|
||||
import { supabase } from '@/lib/supabase/client'
|
||||
|
||||
export async function getOwnerId() {
|
||||
const { data, error } = await supabase.auth.getUser()
|
||||
if (error) throw error
|
||||
const uid = data?.user?.id
|
||||
if (!uid) throw new Error('Sessão inválida.')
|
||||
return uid
|
||||
}
|
||||
|
||||
export async function fetchSlotsRegras(ownerId) {
|
||||
const { data, error } = await supabase
|
||||
.from('agenda_slots_regras')
|
||||
.select('*')
|
||||
.eq('owner_id', ownerId)
|
||||
.order('dia_semana', { ascending: true })
|
||||
if (error) throw error
|
||||
return data || []
|
||||
}
|
||||
|
||||
export async function upsertSlotRegra(ownerId, payload) {
|
||||
const row = {
|
||||
owner_id: ownerId,
|
||||
dia_semana: Number(payload.dia_semana),
|
||||
passo_minutos: Number(payload.passo_minutos),
|
||||
offset_minutos: Number(payload.offset_minutos),
|
||||
buffer_antes_min: Number(payload.buffer_antes_min || 0),
|
||||
buffer_depois_min: Number(payload.buffer_depois_min || 0),
|
||||
min_antecedencia_horas: Number(payload.min_antecedencia_horas || 0),
|
||||
ativo: !!payload.ativo
|
||||
}
|
||||
|
||||
const { data, error } = await supabase
|
||||
.from('agenda_slots_regras')
|
||||
.upsert(row, { onConflict: 'owner_id,dia_semana' })
|
||||
.select('*')
|
||||
.single()
|
||||
|
||||
if (error) throw error
|
||||
return data
|
||||
}
|
||||
|
||||
export function normalizeHHMM(v) {
|
||||
if (v == null) return null
|
||||
const s = String(v).trim()
|
||||
if (/^\d{2}:\d{2}$/.test(s)) return s
|
||||
if (/^\d{2}:\d{2}:\d{2}$/.test(s)) return s.slice(0, 5)
|
||||
return s
|
||||
}
|
||||
|
||||
export function ruleKey(r) {
|
||||
return [
|
||||
r.dia_semana,
|
||||
normalizeHHMM(r.hora_inicio),
|
||||
normalizeHHMM(r.hora_fim),
|
||||
(r.modalidade || 'ambos'),
|
||||
!!r.ativo
|
||||
].join('|')
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove duplicados exatos antes de mandar pro banco.
|
||||
* (DB já tem UNIQUE, mas isso evita erro e deixa UX melhor)
|
||||
*/
|
||||
export function dedupeRegrasSemanais(regras) {
|
||||
const seen = new Set()
|
||||
const out = []
|
||||
for (const r of regras || []) {
|
||||
const k = ruleKey(r)
|
||||
if (seen.has(k)) continue
|
||||
seen.add(k)
|
||||
out.push(r)
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user