Exemplo n.º 1
0
        public IList <Vaga> PegarRespondidasPorCandidato(Guid usuarioId)
        {
            var candidato = CandidatoService.PegarUmPorCriterio(cand => cand.UsuarioId == usuarioId);
            var vagaslist = Repository.GetAllAnsweredByCandidate(candidato.Id);

            return(vagaslist);
        }
        public Resposta PublicarResposta(PublicarRespostaRequest request, Guid vagaId, Guid usuarioId)
        {
            var candidato = CandidatoService.PegarUmPorCriterio(cand => cand.UsuarioId == usuarioId);

            var vaga = VagaService.PegarVagaParaIncluirResposta(vagaId);

            if (vaga == null)
            {
                throw new Exception($"Vaga não encontrada com ID: {vagaId}");
            }

            var respondido = vaga.Respostas.Any(res => res.CandidatoId == candidato.Id);

            if (respondido)
            {
                throw new Exception($"Candidato já aplicou para a vaga: {vagaId}");
            }

            var qtddVaga = vaga.Criterios.Count;
            var qtddRest = request.Criterios.Count;

            if (qtddVaga != qtddRest)
            {
                throw new Exception($"Quantidade de criterios respondidos: {qtddRest} diferente dos criterios da vaga: {vagaId}");
            }

            var matchCriterios = request.Criterios
                                 .Where(pair => vaga.Criterios.Any(crit => crit.Id == pair.CriterioId))
                                 .Count();

            if (matchCriterios != qtddVaga)
            {
                throw new Exception($"Criterios respondidos não corespondem com criterios da vaga: {vagaId}");
            }

            var resposta = new Resposta();

            resposta.Vaga              = vaga;
            resposta.Candidato         = candidato;
            resposta.RespostaCriterios = request.Criterios
                                         .Select(critResp => new RespostaCriterio
            {
                Valor    = critResp.Valor,
                Criterio = vaga.Criterios.FirstOrDefault(x => x.Id == critResp.CriterioId) ?? new Criterio()
            })
                                         .ToList();

            return(Repository.Save(resposta));
        }