225 lines
5.4 KiB
TypeScript
225 lines
5.4 KiB
TypeScript
// @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
|
|
}
|