Initial commit DBMaker - Oficiais e Funcionando
This commit is contained in:
224
src/lib/mutations.ts
Normal file
224
src/lib/mutations.ts
Normal file
@@ -0,0 +1,224 @@
|
||||
// @ts-nocheck
|
||||
import { supabase } from './supabase'
|
||||
|
||||
// ============================================
|
||||
// TEMPLATES MUTATIONS
|
||||
// ============================================
|
||||
|
||||
export const createTemplate = async (data: {
|
||||
nome: string
|
||||
tipo: 'novo' | 'derivado'
|
||||
template_pai_id?: string | null
|
||||
topicos_selecionados: string[]
|
||||
descricao?: string
|
||||
}) => {
|
||||
const { data: result, error } = await supabase
|
||||
.from('templates_customizados')
|
||||
.insert([
|
||||
{
|
||||
nome: data.nome,
|
||||
tipo: data.tipo,
|
||||
template_pai_id: data.template_pai_id || null,
|
||||
topicos_selecionados: data.topicos_selecionados,
|
||||
total_topicos: data.topicos_selecionados.length,
|
||||
total_obrigatorios: data.topicos_selecionados.length, // TODO: calcular corretamente
|
||||
descricao: data.descricao || null,
|
||||
ativo: true,
|
||||
} as any,
|
||||
])
|
||||
.select()
|
||||
|
||||
if (error) throw error
|
||||
return result?.[0]
|
||||
}
|
||||
|
||||
export const updateTemplate = async (
|
||||
id: string,
|
||||
data: {
|
||||
nome?: string
|
||||
topicos_selecionados?: string[]
|
||||
descricao?: string
|
||||
}
|
||||
) => {
|
||||
const { data: result, error } = await supabase
|
||||
.from('templates_customizados')
|
||||
.update({
|
||||
...data,
|
||||
total_topicos: data.topicos_selecionados?.length,
|
||||
} as any)
|
||||
.eq('id', id)
|
||||
.select()
|
||||
|
||||
if (error) throw error
|
||||
return result?.[0]
|
||||
}
|
||||
|
||||
export const deleteTemplate = async (id: string) => {
|
||||
const { error } = await supabase
|
||||
.from('templates_customizados')
|
||||
.update({ ativo: false } as any)
|
||||
.eq('id', id)
|
||||
|
||||
if (error) throw error
|
||||
}
|
||||
|
||||
// ============================================
|
||||
// DATABOOKS MUTATIONS
|
||||
// ============================================
|
||||
|
||||
export const createDatabook = async (data: {
|
||||
numero_projeto: string
|
||||
nome_projeto: string
|
||||
cliente_id?: string | null
|
||||
template_id?: string | null
|
||||
cliente_nome: string
|
||||
cliente_contato: string
|
||||
cliente_email: string
|
||||
cliente_telefone: string
|
||||
produto_nome: string
|
||||
produto_tipo: string
|
||||
produto_descricao: string
|
||||
produto_normas: string[]
|
||||
ordem_compra: string
|
||||
data_inicio: string
|
||||
data_entrega_prevista: string
|
||||
titulo_principal: string
|
||||
subtitulo: string
|
||||
cor_primaria: string
|
||||
cor_secundaria: string
|
||||
tamanho_pagina: 'A4' | 'Letter'
|
||||
orientacao: 'retrato' | 'paisagem'
|
||||
}) => {
|
||||
// Criar projeto
|
||||
const { data: projeto, error: projetoError } = await supabase
|
||||
.from('projetos')
|
||||
.insert([
|
||||
{
|
||||
numero_projeto: data.numero_projeto,
|
||||
nome_projeto: data.nome_projeto,
|
||||
cliente_id: data.cliente_id || null,
|
||||
template_id: data.template_id || null,
|
||||
status: 'rascunho',
|
||||
progresso_percentual: 0,
|
||||
} as any,
|
||||
])
|
||||
.select()
|
||||
|
||||
if (projetoError) throw projetoError
|
||||
|
||||
const projetoId = projeto?.[0]?.id
|
||||
|
||||
// Criar databook_mestre
|
||||
const { data: databook, error: databookError } = await supabase
|
||||
.from('databooks_mestres')
|
||||
.insert([
|
||||
{
|
||||
projeto_id: projetoId,
|
||||
cliente_nome: data.cliente_nome,
|
||||
cliente_contato: data.cliente_contato,
|
||||
cliente_email: data.cliente_email,
|
||||
cliente_telefone: data.cliente_telefone,
|
||||
produto_nome: data.produto_nome,
|
||||
produto_tipo: data.produto_tipo,
|
||||
produto_descricao: data.produto_descricao,
|
||||
produto_normas: data.produto_normas,
|
||||
numero_projeto: data.numero_projeto,
|
||||
ordem_compra: data.ordem_compra,
|
||||
data_inicio: data.data_inicio,
|
||||
data_entrega_prevista: data.data_entrega_prevista,
|
||||
titulo_principal: data.titulo_principal,
|
||||
subtitulo: data.subtitulo,
|
||||
cor_primaria: data.cor_primaria,
|
||||
cor_secundaria: data.cor_secundaria,
|
||||
tamanho_pagina: data.tamanho_pagina,
|
||||
orientacao: data.orientacao,
|
||||
} as any,
|
||||
])
|
||||
.select()
|
||||
|
||||
if (databookError) throw databookError
|
||||
|
||||
return { projeto: projeto?.[0], databook: databook?.[0] }
|
||||
}
|
||||
|
||||
export const updateDatabook = async (
|
||||
projetoId: string,
|
||||
data: {
|
||||
nome_projeto?: string
|
||||
status?: string
|
||||
progresso_percentual?: number
|
||||
}
|
||||
) => {
|
||||
const { data: result, error } = await supabase
|
||||
.from('projetos')
|
||||
.update(data as any)
|
||||
.eq('id', projetoId)
|
||||
.select()
|
||||
|
||||
if (error) throw error
|
||||
return result?.[0]
|
||||
}
|
||||
|
||||
export const deleteDatabook = async (projetoId: string) => {
|
||||
const { error } = await supabase
|
||||
.from('projetos')
|
||||
.delete()
|
||||
.eq('id', projetoId)
|
||||
|
||||
if (error) throw error
|
||||
}
|
||||
|
||||
// ============================================
|
||||
// CLIENTES MUTATIONS
|
||||
// ============================================
|
||||
|
||||
export const createCliente = async (data: {
|
||||
nome: string
|
||||
contato?: string
|
||||
email?: string
|
||||
telefone?: string
|
||||
}) => {
|
||||
const { data: result, error } = await supabase
|
||||
.from('clientes')
|
||||
.insert([
|
||||
{
|
||||
nome: data.nome,
|
||||
contato: data.contato || null,
|
||||
email: data.email || null,
|
||||
telefone: data.telefone || null,
|
||||
ativo: true,
|
||||
} as any,
|
||||
])
|
||||
.select()
|
||||
|
||||
if (error) throw error
|
||||
return result?.[0]
|
||||
}
|
||||
|
||||
export const updateCliente = async (
|
||||
id: string,
|
||||
data: {
|
||||
nome?: string
|
||||
contato?: string
|
||||
email?: string
|
||||
telefone?: string
|
||||
}
|
||||
) => {
|
||||
const { data: result, error } = await supabase
|
||||
.from('clientes')
|
||||
.update(data as any)
|
||||
.eq('id', id)
|
||||
.select()
|
||||
|
||||
if (error) throw error
|
||||
return result?.[0]
|
||||
}
|
||||
|
||||
export const deleteCliente = async (id: string) => {
|
||||
const { error } = await supabase
|
||||
.from('clientes')
|
||||
.update({ ativo: false } as any)
|
||||
.eq('id', id)
|
||||
|
||||
if (error) throw error
|
||||
}
|
||||
Reference in New Issue
Block a user