Olá, amigos!
Tenho a seguinte dúvida: Suponhamos que tenho as entidades: Empresa, Cargo e Usuario, como abaixo:
class Empresa{
String nome
}
class Usuario{
String nome
Cargo cargo
static belongsTo = [empresa: Empresa]
}
class Cargo{
String nome
static belongsTo = [empresa:Empresa]
}
Ao cadastrar um novo usuário, preciso selecionar a empresa que ele pertence e qual o seu cargo. A lista de cargos eu resolvo com javascript, a partir da empresa selecionada. Até aí, tudo bem. Mas supondo que o cliente esteja com o javascript desligado no browser ou ainda que eu deseje implementar uma funcionalidade de cadastro de usuários em lote (a partir de uma planilha excel, por exemplo). Existe uma forma de garantir que o cargo daquele usuário pertence àquela empresa?
No caso, eu criei uma rotina no meu controlador (poderia ser um service) que faz essa verificação, como abaixo:
String nomeEmpresa = empresa.nome
List cargos = retornaCargos(nomeEmpresa)
if(!cargos.contains(cargo.nome.toString())){
throw new RuntimeException("O cargo n\u00E3o percente a empresa $nomeEmpresa)
}
List retornaCargos(String nomeEmpresa) {
def cargos = Cargo.withCriteria {
empresa {
eq("nome", nomeEmpresa)
}
}
String[] listaDeCargos = cargos
return listaDeCargos
}
A minha dúvida era se teria como fazer essa verificação de uma forma melhor (como com o validator, por exemplo). Existem outras funcionalidades no projeto que dependem do cadastro de usuários e ter que repetir essa lógica em todas elas não me parece ser o melhor caminho.
Obrigado!