ÿØÿà JFIF ` ` ÿþ
|
Server : Apache System : Linux cloud.heroica.com.br 4.18.0-553.36.1.el8_10.x86_64 #1 SMP Wed Jan 22 03:07:54 EST 2025 x86_64 User : farolpborg ( 1053) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /var/www/node_services/sebraevisitas/src/services/ |
Upload File : |
import prisma from "../prisma";
import inflateFromBase64 from "../utils/compressors/inflateFromBase64";
import convertDdMmYyyyToDate from "../utils/conversors/convertdate";
interface CadastroPfProps{
nome:string,
cpf:string,
sexo:string,
possuinomesocial:number,
nomesocial?:string | null,
datanasc:string ,
escolaridade:string ,
possuideficiencia:number ,
deficiencia?:string | null,
possuifuncionariocomdeficiencia:number,
cep:string,
tipologradoro:string,
endereco:string,
numero:string,
complemento:string,
bairro:string,
cidade:string,
estado:string,
aceitacontatopor:string,
telefone:string,
celular:string,
email:string,
checkinId:number,
userId:string,
}
interface CadastroPjProps{
userid:string;
cnpj:string;
razaosocial:string;
nomefantasia:string;
faixadefaturamento:string;
datadeabertura:string;
setor:string;
cnae:string;
cep:string;
tipologradoro:string;
endereco:string;
numero:string;
complemento:string;
bairro:string;
cidade:string;
estado:string;
email:string;
naotememail:number;
telefone:string;
celular:string;
whatsapp:string;
}
interface PlanoAcao {
userId:string;
planoAcao:string;
}
interface EntrevistaDiagnosticoProps {
userId:string;
areaEscolhida:string;
formacao_preco_venda:number | null;
credito_capital_giro:number | null;
credito_expansao:number | null;
controle_financeiro:number | null;
outro_financas:number | null;
divulgacao_ecommerce:number | null;
visual_ponto_loja:number | null;
atendimento_clientes:number | null;
concorrencia:number | null;
outro_marketing:number | null;
selecao_pessoas:number | null;
retencao_motivacao:number | null;
outro_rh:number | null;
caixa_edicao:string | null;
}
interface AssinaturaDigitalProps {
userId:string;
assinaturaDigital:string;
}
interface CheckoutProps {
userId:string;
interessePrograma:number;
horarioContato:string;
aceitaEmail:number;
deixouComentarios:number;
comentarios:string;
}
interface RecordingsProps {
title:string;
filename:string;
mimeType:string;
base64:string;
}
interface VisitaProcessProps {
isAdmin:number,
envolvimentoGestao:string,
formalizadaPorteMeEpp:number,
disponibilidademomento:number,
userId:string,
latitude:string,
longitude:string,
createdAt:string,
updatedAt:string,
}
interface DataProcesssProps extends VisitaProcessProps{
cadastroPf:CadastroPfProps[]
cadastroPj:CadastroPjProps[]
planoAcao:PlanoAcao[]
entrevistaDiagnostico:EntrevistaDiagnosticoProps[]
assinaturaDigital:AssinaturaDigitalProps[]
checkout:CheckoutProps[]
recordings: RecordingsProps[]
}
interface Checkin{
checkinCompressed:string | any,
}
const isString = (x: unknown): x is string => typeof x === "string";
const isPlainObject = (x: unknown): x is Record<string, unknown> =>
typeof x === "object" && x !== null && !Array.isArray(x);
const UploadServices = class UploadServices {
static async receiveData(checkin:Checkin){
try{
const DecompressCheckin = JSON.parse(inflateFromBase64(checkin.checkinCompressed))
//const DecompressCheckin = checkin.checkinCompressed as any | string
let data
if(isString(DecompressCheckin)){
data = DecompressCheckin
}else if(isPlainObject(DecompressCheckin)){
data = JSON.stringify(DecompressCheckin)
}else{
console.error('Checkin Error , not string even object -> ' , DecompressCheckin)
throw new Error('Visita inválido')
}
console.log('Checkin -> ' , DecompressCheckin)
const visita = await prisma.visitasreceived.create({
data:{
visita: data
}
})
return {receivedCheckin:visita , }
}catch (err){
console.error(err)
throw err;
}
}
static async processData(data:DataProcesssProps){
try {
const visita = {} as VisitaProcessProps
visita.isAdmin = data.isAdmin
visita.envolvimentoGestao = data.envolvimentoGestao
visita.formalizadaPorteMeEpp = data.formalizadaPorteMeEpp
visita.disponibilidademomento = data.disponibilidademomento
visita.userId = data.userId
visita.latitude = data.latitude
visita.longitude = data.longitude
visita.createdAt = data.createdAt
visita.updatedAt = data.updatedAt
const visitadb = await prisma.checkinvisita.create({
data:{
isAdmin:(visita.isAdmin === 1),
envolvimentoGestao:visita.envolvimentoGestao,
disponibilidademomento:(visita.disponibilidademomento ===1),
formalizadaPorteMeEpp:(visita.formalizadaPorteMeEpp === 1),
userId:visita.userId,
latitude:visita.latitude,
longitude:visita.longitude,
insertedAt:visita.createdAt,
}
})
const cadastroPf : CadastroPfProps = data.cadastroPf[0]
const cadastroPfdb = await prisma.cadastropf.create({
data:{
userId:cadastroPf.userId,
nome:cadastroPf.nome,
cpf:cadastroPf.cpf,
sexo:cadastroPf.sexo,
possuinomesocial:(cadastroPf.possuinomesocial=== 1),
nomesocial:cadastroPf.nomesocial,
datanasc: convertDdMmYyyyToDate(cadastroPf.datanasc) ,
escolaridade:cadastroPf.escolaridade,
possuideficiencia:(cadastroPf.possuideficiencia === 1),
deficiencia:cadastroPf.deficiencia,
possuifuncionariocomdeficiencia:(cadastroPf.possuifuncionariocomdeficiencia === 1),
cep:cadastroPf.cep,
tipologradoro:cadastroPf.tipologradoro,
endereco:cadastroPf.endereco,
numero:cadastroPf.numero,
complemento:cadastroPf.complemento,
bairro:cadastroPf.bairro,
cidade:cadastroPf.cidade,
estado:cadastroPf.estado,
aceitacontatopor:cadastroPf.aceitacontatopor,
telefone:cadastroPf.telefone,
celular:cadastroPf.celular,
checkinvisitaId:visitadb.id
}
})
const cadastropj : CadastroPjProps = data.cadastroPj[0]
const cadastopjdb = await prisma.cadastropj.create({
data:{
userId:cadastropj.userid,
cnpj:cadastropj.cnpj,
razaosocial:cadastropj.razaosocial,
nomefantasia:cadastropj.nomefantasia,
faixadefaturamento:cadastropj.faixadefaturamento,
datadeabertura: convertDdMmYyyyToDate(cadastropj.datadeabertura),
setor:cadastropj.setor,
cnae:cadastropj.cnae,
cep:cadastropj.cep,
tipologradoro:cadastropj.tipologradoro,
endereco:cadastropj.endereco,
numero:cadastropj.numero,
complemento:cadastropj.complemento,
bairro:cadastropj.bairro,
cidade:cadastropj.cidade,
estado:cadastropj.estado,
email:cadastropj.email,
naotememail:(cadastropj.naotememail ===1),
telefone:cadastropj.telefone,
celular:cadastropj.celular,
whatsapp:cadastropj.whatsapp,
checkinvisitaId:visitadb.id
}
})
const planoacao : PlanoAcao = data.planoAcao[0]
const planoacaodb = await prisma.planoacao.create({
data:{
userId:planoacao.userId,
planoAcao:planoacao.planoAcao,
checkinvisitaId:visitadb.id
}
})
const entrevistadiagnostico : EntrevistaDiagnosticoProps = data.entrevistaDiagnostico[0]
const entrevistadiagnosticodb = await prisma.entrevistaDiagnostico.create({data:{
userId:entrevistadiagnostico.userId,
checkinvisitaId:visitadb.id,
areaEscolhida:entrevistadiagnostico.areaEscolhida,
formacao_preco_venda:entrevistadiagnostico.formacao_preco_venda,
credito_capital_giro:entrevistadiagnostico.credito_capital_giro,
credito_expansao:entrevistadiagnostico.credito_expansao,
controle_financeiro:entrevistadiagnostico.controle_financeiro,
outro_financas:entrevistadiagnostico.outro_financas,
divulgacao_ecommerce:entrevistadiagnostico.divulgacao_ecommerce,
visual_ponto_loja:entrevistadiagnostico.visual_ponto_loja,
atendimento_clientes:entrevistadiagnostico.atendimento_clientes,
concorrencia:entrevistadiagnostico.concorrencia,
outro_marketing:entrevistadiagnostico.outro_marketing,
selecao_pessoas:entrevistadiagnostico.selecao_pessoas,
retencao_motivacao:entrevistadiagnostico.retencao_motivacao,
outro_rh:entrevistadiagnostico.outro_rh,
caixa_edicao:entrevistadiagnostico.caixa_edicao
}
})
const assinaturadigital : AssinaturaDigitalProps = data.assinaturaDigital[0]
const assinaturadigitaldb = await prisma.assinaturadigital.create({
data:{
assinaturaDigital:assinaturadigital.assinaturaDigital,
userId: assinaturadigital.userId,
checkinvisitaId:visitadb.id
}
})
const checkout :CheckoutProps = data.checkout[0]
const checkoutdb = await prisma.checkout.create({
data:{
userId:checkout.userId,
checkinvisitaId:visitadb.id,
interessePrograma:checkout.interessePrograma===1,
horarioContato:checkout.horarioContato,
aceitaEmail:checkout.aceitaEmail===1,
deixouComentarios:checkout.deixouComentarios===1,
comentarios:checkout.comentarios,
}
})
const recordings : RecordingsProps[] = data.recordings
await Promise.all(recordings.map(async (recording) => {
const recordingdb = await prisma.recordings.create({
data:{
title:recording.title || '',
mimeType:recording.mimeType || '',
filename:recording.filename || '',
base64:recording.base64 || '',
checkinvisitaId:visitadb.id
}
})
})
)
await prisma.checkinvisita.update({
data:{
processedAt:new Date()
},
where:{
id:visitadb.id
}
})
return {visita:visitadb , cadastroPf:cadastroPfdb , cadastroPj:cadastopjdb , planoAcao:planoacaodb , entrevistaDiagnostico:entrevistadiagnosticodb , assinaturaDigital:assinaturadigitaldb , checkout:checkoutdb , recordings:recordings}
}catch (err){
console.error(err)
throw err;
}
}
static async getById(id: string){
try{
const visita = await prisma.visitasreceived.findUnique({
where: {id}
});
if(visita){
//visita.visita = JSON.parse(visita.visita)
}
return visita
}catch(err){
console.error(err);
throw err;
}
}
static async delete_received_checkin(id:string){
try{
return await prisma.visitasreceived.delete({
where: {
id
}
})
}catch(err){
throw err
}
}
static async get_checkins_visitasreceived(){
return prisma.visitasreceived.findMany({})
}
}
export default UploadServices;