feat(sprint-4/etapa-2): migración persistencia proceso/grupos/settings a Supabase
- Scripts SQL 002-004: process_groups, processes, app_settings con RLS - supabaseProcessRepo: save/getById/getAll/delete con mapeo camelCase↔snake_case y limpieza Dexie en delete (actividades/gateways/resources/simulations) - supabaseGroupRepo: save/getAll/getById/delete; FK ON DELETE SET NULL en processes - supabaseSettingsRepo: get/update sobre fila singleton - Stores actualizados: library-store y process-store usan repos Supabase para procesos (actividades/gateways/recursos siguen en Dexie hasta Etapa 3-4) - ImportPage y useReportData actualizados a supabaseProcessRepo - userId inyectado internamente en repos via supabase.auth.getSession() — no se threadea por la call stack; stores mantienen interfaces sin cambios - 561/561 tests verdes, build limpio Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { create } from 'zustand'
|
||||
import { processRepo, activityRepo, gatewayRepo, resourceRepo } from '@/persistence/repositories'
|
||||
import { supabaseProcessRepo } from '@/persistence/supabase/process-repo'
|
||||
import { activityRepo, gatewayRepo, resourceRepo } from '@/persistence/repositories'
|
||||
import type { Process, Activity, GatewayConfig, Resource } from '@/domain/types'
|
||||
|
||||
interface ProcessState {
|
||||
@@ -10,7 +11,6 @@ interface ProcessState {
|
||||
isLoading: boolean
|
||||
error: string | null
|
||||
|
||||
// Acciones
|
||||
loadProcess: (processId: string) => Promise<void>
|
||||
setCurrentProcess: (process: Process) => Promise<void>
|
||||
updateProcess: (updates: Partial<Process>) => Promise<void>
|
||||
@@ -34,7 +34,7 @@ export const useProcessStore = create<ProcessState>((set, get) => ({
|
||||
set({ isLoading: true, error: null })
|
||||
try {
|
||||
const [process, activities, gateways, resources] = await Promise.all([
|
||||
processRepo.getById(processId),
|
||||
supabaseProcessRepo.getById(processId),
|
||||
activityRepo.getByProcess(processId),
|
||||
gatewayRepo.getByProcess(processId),
|
||||
resourceRepo.getByProcess(processId),
|
||||
@@ -47,7 +47,7 @@ export const useProcessStore = create<ProcessState>((set, get) => ({
|
||||
},
|
||||
|
||||
setCurrentProcess: async (process) => {
|
||||
await processRepo.save(process)
|
||||
await supabaseProcessRepo.save(process)
|
||||
const [activities, gateways, resources] = await Promise.all([
|
||||
activityRepo.getByProcess(process.id),
|
||||
gatewayRepo.getByProcess(process.id),
|
||||
@@ -60,7 +60,7 @@ export const useProcessStore = create<ProcessState>((set, get) => ({
|
||||
const current = get().currentProcess
|
||||
if (!current) return
|
||||
const updated: Process = { ...current, ...updates, updatedAt: Date.now() }
|
||||
await processRepo.save(updated)
|
||||
await supabaseProcessRepo.save(updated)
|
||||
set({ currentProcess: updated })
|
||||
},
|
||||
|
||||
@@ -69,7 +69,7 @@ export const useProcessStore = create<ProcessState>((set, get) => ({
|
||||
const current = get().currentProcess
|
||||
if (current) {
|
||||
const updatedProcess = { ...current, updatedAt: Date.now() }
|
||||
await processRepo.save(updatedProcess)
|
||||
await supabaseProcessRepo.save(updatedProcess)
|
||||
set((state) => ({
|
||||
activities: state.activities.map((a) => (a.id === activity.id ? activity : a)),
|
||||
currentProcess: updatedProcess,
|
||||
@@ -86,7 +86,7 @@ export const useProcessStore = create<ProcessState>((set, get) => ({
|
||||
const current = get().currentProcess
|
||||
if (current) {
|
||||
const updatedProcess = { ...current, updatedAt: Date.now() }
|
||||
await processRepo.save(updatedProcess)
|
||||
await supabaseProcessRepo.save(updatedProcess)
|
||||
set((state) => ({
|
||||
gateways: state.gateways.map((g) => (g.id === gateway.id ? gateway : g)),
|
||||
currentProcess: updatedProcess,
|
||||
@@ -103,7 +103,7 @@ export const useProcessStore = create<ProcessState>((set, get) => ({
|
||||
const current = get().currentProcess
|
||||
if (current) {
|
||||
const updatedProcess = { ...current, updatedAt: Date.now() }
|
||||
await processRepo.save(updatedProcess)
|
||||
await supabaseProcessRepo.save(updatedProcess)
|
||||
set((state) => ({ resources: [...state.resources, resource], currentProcess: updatedProcess }))
|
||||
} else {
|
||||
set((state) => ({ resources: [...state.resources, resource] }))
|
||||
@@ -115,7 +115,7 @@ export const useProcessStore = create<ProcessState>((set, get) => ({
|
||||
const current = get().currentProcess
|
||||
if (current) {
|
||||
const updatedProcess = { ...current, updatedAt: Date.now() }
|
||||
await processRepo.save(updatedProcess)
|
||||
await supabaseProcessRepo.save(updatedProcess)
|
||||
set((state) => ({
|
||||
resources: state.resources.map((r) => (r.id === resource.id ? resource : r)),
|
||||
currentProcess: updatedProcess,
|
||||
@@ -132,7 +132,7 @@ export const useProcessStore = create<ProcessState>((set, get) => ({
|
||||
const current = get().currentProcess
|
||||
if (current) {
|
||||
const updatedProcess = { ...current, updatedAt: Date.now() }
|
||||
await processRepo.save(updatedProcess)
|
||||
await supabaseProcessRepo.save(updatedProcess)
|
||||
set((state) => ({
|
||||
resources: state.resources.filter((r) => r.id !== resourceId),
|
||||
currentProcess: updatedProcess,
|
||||
|
||||
Reference in New Issue
Block a user