Skip to content

Instantly share code, notes, and snippets.

@tiarebalbi
Created February 19, 2024 23:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tiarebalbi/cdd8d90c2b64f01b24df27463e61196f to your computer and use it in GitHub Desktop.
Save tiarebalbi/cdd8d90c2b64f01b24df27463e61196f to your computer and use it in GitHub Desktop.
package net.spaceinfinity.sp.app.aplicacoes.workflow
import net.spaceinfinity.sp.app.aplicacoes.dto.AdicionarComentarioDTO
import net.spaceinfinity.sp.app.aplicacoes.dto.AplicacaoID
import net.spaceinfinity.sp.app.aplicacoes.dto.AtualizarEstagioDTO
import net.spaceinfinity.sp.app.aplicacoes.models.Estagio
import net.spaceinfinity.sp.common.workflow.Workflow
import net.spaceinfinity.sp.common.workflow.workflow
object AplicacaoWorkflow {
fun criarAplicacao(aplicacaoId: Long): Workflow =
workflow {
name("novaAplicacaoRegistrada")
lockId("aplicacao:$aplicacaoId")
launchParameter("aplicacaoId", "ID da aplicação a ser processada")
onFailure { context, exception ->
context.set("error", "${exception.message}")
}
failureSteps {
step {
name("notificarErro")
description("Notificar o aplicante sobre a falha no processamento da aplicação")
call("aplicacaoService", "atualizarEstagio", AtualizarEstagioDTO(aplicacaoId, Estagio.FALHOU))
}
}
steps {
step {
name("consultarRelatorioCredito")
description("Consultar relatório de crédito do aplicante")
call("aplicacaoService", "atualizarEstagio", AtualizarEstagioDTO(aplicacaoId, Estagio.EM_ANDAMENTO))
call("aplicacaoWorkflowService", "consultarRelatorioCredito", AplicacaoID.of(aplicacaoId))
}
step {
name("aplicacaoPreAprovada")
description("Verificar se a aplicação é elegível para pré-aprovação")
dependsOn("consultarRelatorioCredito")
condition { context -> context.get("hasRelatorioCredito") == true }
call("aplicacaoWorkflowService", "verificarElegivelPreAprovacao", AplicacaoID.of(aplicacaoId))
}
step {
name("notificarAplicacaoRejeitada")
dependsOn("consultarRelatorioCredito")
condition { context -> context.get("hasRelatorioCredito") == false }
call(
"comentarioService",
"adicionarComentario",
AdicionarComentarioDTO(
aplicacaoId,
"Não foi possível consultar o relatório de crédito. Verifique detalhes sobre o workflowProcess",
),
)
call("aplicacaoService", "atualizarEstagio", AtualizarEstagioDTO(aplicacaoId, Estagio.REPROVADO))
call("aplicacaoWorkflowService", "notificarAplicacaoRejeitada", AplicacaoID.of(aplicacaoId))
}
//
step {
name("liberarParaDepartamentoInterno")
dependsOn("aplicacaoPreAprovada")
condition { context -> context.get("preAprovado") == true }
call("aplicacaoService", "atualizarEstagio", AtualizarEstagioDTO(aplicacaoId, Estagio.PRE_APROVADO))
call(
"comentarioService",
"adicionarComentario",
AdicionarComentarioDTO(
aplicacaoId,
"Aplicação pré-aprovada. Aguardando revisão do departamento interno",
),
)
call("aplicacaoService", "notificarDepartmentoSobreAplicacao", AplicacaoID.of(aplicacaoId))
}
step {
name("revisadoPeloDepartamentoInterno")
dependsOn("liberarParaDepartamentoInterno")
requiresApproval("domain:departamentoInterno")
call("aplicacaoService", "atualizarEstagio", AtualizarEstagioDTO(aplicacaoId, Estagio.APROVADO))
call("aplicacaoService", "notificarAplicanteAprovacao", AplicacaoID.of(aplicacaoId))
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment