public ObjetivoMiniGameModel findObjMiniGameInUser(string document, string miniGame)
        {
            startModelo();
            bool resp = false;
            var  _obj = _db.GetCollection <ObjetivoMiniGameModel>("ObjetivoIniciado");

            ObjetivoMiniGameModel dadosBusca = (from e in _obj.AsQueryable <ObjetivoMiniGameModel>()
                                                where DateTime.Now.ToLocalTime() >= e.ObjParametros.dataIniciar &&
                                                DateTime.Now.ToLocalTime() <= e.ObjParametros.dataExpiracao &&
                                                e.ObjUsr.documento.Contains(document)
                                                orderby e.ObjParametros.dataExpiracao ascending
                                                select e).FirstOrDefault();


            if (dadosBusca != null)
            {
                List <MiniGameModel> listaMG = dadosBusca.listarMiniGames();


                if (listaMG.Count > 0)
                {
                    resp = true;
                }
                //foreach (MiniGameModel mgm in listaMG) {

                //    if (mgm.nome.Contains(miniGame)) {
                //        resp = true;
                //    }

                //}
            }

            return(resp ? dadosBusca : null);
        }
        private bool persistirBancoDeDados(string infoDoc, string infoObj)
        {
            string codMiniGame = string.Empty;
            bool   resp        = false;

            try
            {
                startModelo();
                var _obj = _db.GetCollection <ObjetivoMiniGameModel>("ObjetivoIniciado");

                ObjetivoModel dadosObjModel = this.findObjetivoPrincipal(infoObj);

                if (dadosObjModel != null)
                {
                    string nomeObj = infoDoc + "-" + infoObj;
                    ObjetivoMiniGameModel objFound = this.findObjMiniGameInUser(infoDoc, infoObj);

                    if (objFound == null)
                    {
                        objModel.nome = nomeObj;
                        objModel.setUsuarioGame(new UsuarioModel {
                            nome = infoDoc, documento = infoDoc
                        });
                        objModel.setObjetivoGame(dadosObjModel);

                        dynamic dynList = dadosObjModel.retornaListaMiniGame();

                        foreach (dynamic objList in dynList)
                        {
                            dynamic obj = objList;
                            objModel.addMiniGames(objList);
                        }

                        codMiniGame = objModel._id.ToString();
                        _obj.InsertOne(objModel);

                        resp = true;
                    }


                    var posicaoLista = (objFound != null ? objFound.ListaMiniGames.FindIndex(f => f.nome.Contains(infoObj)) : 0);
                    if (objFound != null && objFound.ativo && resp == false && posicaoLista >= 0)
                    {
                        int posicao = posicaoLista; // objFound.ListaMiniGames.FindIndex(p => p.nome.Contains(infoObj));

                        codMiniGame = objFound._id.ToString();

                        var listaAtualMiniGames = objFound.listarMiniGames();


                        MiniGameModel objTrataValores = listaAtualMiniGames.ElementAt(posicao);

                        if (objTrataValores.ativo && objTrataValores.CashInSent.Equals(false))
                        {
                            string objId         = (string)objTrataValores._id;
                            double secondsTarget = objTrataValores.targetForPayment;
                            double diffInSeconds = this.validaTempoJogando(objTrataValores);


                            var update = Builders <ObjetivoMiniGameModel>
                                         .Update
                                         .Set(u => u.dataCadastro, objFound.dataCadastro)
                                         .Set(u => u.dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                         .Set(u => u.ObjUsr.dataCadastro, objFound.ObjUsr.dataCadastro)
                                         .Set(u => u.ObjUsr.dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                         .Set(u => u.ObjParametros.dataCadastro, objFound.ObjParametros.dataCadastro)
                                         .Set(u => u.ObjParametros.dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                         .Set(u => u.ListaMiniGames.ElementAt(posicao).dataCadastro, objFound.ListaMiniGames.ElementAt(posicao).dataCadastro)
                                         .Set(u => u.ListaMiniGames.ElementAt(posicao).dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                         .Set(u => u.ListaMiniGames.ElementAt(posicao).objDataIniciado, objFound.ListaMiniGames.ElementAt(posicao).objDataIniciado)
                                         .Set(u => u.ListaMiniGames.ElementAt(posicao).objDataFinalizado, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                         .Set(u => u.ListaMiniGames.ElementAt(posicao).objTempoJogando, diffInSeconds);

                            var result = _obj.UpdateOne <ObjetivoMiniGameModel>(u => u._id == objFound._id, update);



                            resp = true;
                        }
                    }
                    else if (resp == false && objFound != null && objFound.ativo)
                    {
                        int posicao = posicaoLista; // objFound.ListaMiniGames.FindIndex(p => p.nome.Contains(infoObj));

                        if (posicao >= 0)
                        {
                            codMiniGame = objFound._id.ToString();

                            MiniGameModel objTrataValores = objFound.listarMiniGames().ElementAt(posicao);

                            if (objTrataValores != null && objTrataValores.ativo && objTrataValores.CashInSent.Equals(false))
                            {
                                string objId         = (string)objTrataValores._id;
                                double secondsTarget = objTrataValores.targetForPayment;
                                double diffInSeconds = this.validaTempoJogando(objTrataValores);


                                var update = Builders <ObjetivoMiniGameModel>
                                             .Update
                                             .Set(u => u.dataCadastro, objFound.dataCadastro)
                                             .Set(u => u.dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                             .Set(u => u.ObjUsr.dataCadastro, objFound.ObjUsr.dataCadastro)
                                             .Set(u => u.ObjUsr.dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                             .Set(u => u.ObjParametros.dataCadastro, objFound.ObjParametros.dataCadastro)
                                             .Set(u => u.ObjParametros.dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                             .Set(u => u.ListaMiniGames.ElementAt(posicao).dataCadastro, objFound.ListaMiniGames.ElementAt(posicao).dataCadastro)
                                             .Set(u => u.ListaMiniGames.ElementAt(posicao).dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                             .Set(u => u.ListaMiniGames.ElementAt(posicao).objDataIniciado, objFound.ListaMiniGames.ElementAt(posicao).objDataIniciado)
                                             .Set(u => u.ListaMiniGames.ElementAt(posicao).objDataFinalizado, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                             .Set(u => u.ListaMiniGames.ElementAt(posicao).objTempoJogando, diffInSeconds);

                                var result = _obj.UpdateOne <ObjetivoMiniGameModel>(u => u._id == objFound._id, update);

                                resp = true;
                            }
                        }
                        else
                        {
                            var listaAtualMiniGames = dadosObjModel.retornaListaMiniGame(); // objFound.listarMiniGames();

                            MiniGameModel novoMiniGame = new MiniGameModel();

                            foreach (dynamic objList in listaAtualMiniGames)
                            {
                                novoMiniGame = new MiniGameModel {
                                    nome = objList.nome, ativo = true, targetForPayment = objList.targetForPayment, CashPayment = objList.CashPayment
                                };
                                objModel.addMiniGames(novoMiniGame);
                            }

                            List <MiniGameModel> novaListaMiniGames = objModel.listarMiniGames();

                            var update = Builders <ObjetivoMiniGameModel>
                                         .Update
                                         .Set(u => u.dataCadastro, objFound.dataCadastro)
                                         .Set(u => u.dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                         .Set(u => u.ObjUsr.dataCadastro, objFound.ObjUsr.dataCadastro)
                                         .Set(u => u.ObjUsr.dataAlteracao, objFound.ObjUsr.dataCadastro)
                                         .Set(u => u.ObjParametros.dataCadastro, objFound.ObjParametros.dataCadastro)
                                         .Set(u => u.ObjParametros.dataAlteracao, new Utils().convertDatePtBr(DateTime.Now.ToLocalTime()))
                                         .Push(p => p.ListaMiniGames, novoMiniGame);

                            var result = _obj.UpdateOne <ObjetivoMiniGameModel>(u => u._id == objFound._id, update);

                            resp = true;
                        }
                    }

                    if (resp == true)
                    {
                        this.validaDefineObjetivoConcluido(infoDoc, codMiniGame);
                    }
                }


                return(resp);
            }
            catch (Exception xp)
            {
                return(false);
            }
        }