/// <inheritdoc />
        public virtual Task <string> ReservarAnestesista(AnestesistaModel reserva, string guid)
        {
            var arguments = new object[] { reserva, guid };
            var func      = requestBuilder.BuildRestResultFuncForMethod("ReservarAnestesista", new Type[] { typeof(AnestesistaModel), typeof(string) });

            return((Task <string>)func(Client, arguments));
        }
        public IActionResult ReservarAnestesista([FromBody] AnestesistaModel reserva, string guid)
        {
            lock (reserva) //Métodos	de	Controle	de	Concorrência:	 Travas	(locks)	e	bloqueios;
            {
                try
                {
                    //Cria uma nova transação
                    AnestesistaTransaction trans = new AnestesistaTransaction();

                    //SALVA STATUS DA TRANSAÇÃO E DATA\HORARIO DE INICIO
                    trans.Status = EStatus.Preparado;
                    trans.Inicio = DateTime.Now;

                    List <AnestesistaModel> items = new List <AnestesistaModel>();
                    //Leio todos os Anestesistas do JSON(Banco) PRINCIPAL
                    using (StreamReader r = new StreamReader(Util.FileAnestesia))
                    {
                        //Converto em JSON
                        string json = r.ReadToEnd();
                        items = JsonConvert.DeserializeObject <List <AnestesistaModel> >(json);
                    }

                    bool disponivel = false; //Verifica se o item a ser reservado esta disponivel
                    foreach (var item in items.Where(x => x.IsReservado == false))
                    {
                        if (reserva.Id == item.Id)
                        {
                            disponivel = true;
                        }
                    }


                    if (!disponivel)
                    {
                        return(BadRequest());
                    }
                    else
                    {
                        var registro = items.FirstOrDefault(x => x.Id == reserva.Id);
                        trans.RegistroAtual = (AnestesistaModel)registro.Clone();

                        registro.Reservar();

                        trans.RegistroAlterado = registro;
                    }

                    using (StreamWriter file = System.IO.File.CreateText(Util.FileAnestesiaP))
                    {
                        JsonSerializer serializer = new JsonSerializer();
                        //COMITA A TRANSAÇÃO NO ARQUIVO INTERMEDIARIO
                        serializer.Serialize(file, items);
                    }



                    trans.Id = Guid.Parse(guid);

                    List <AnestesistaTransaction> logs = new List <AnestesistaTransaction>();

                    using (StreamReader r = new StreamReader(string.Format("{0}.json", Util.DiretorioTransacoesAnestesista)))
                    {
                        //Converto em JSON
                        string json = r.ReadToEnd();
                        logs = JsonConvert.DeserializeObject <List <AnestesistaTransaction> >(json);

                        if (logs == null)
                        {
                            logs = new List <AnestesistaTransaction>();
                        }
                    }

                    logs.Add(trans);

                    // Salva Log Atualizado.
                    using (StreamWriter file = System.IO.File.CreateText(string.Format("{0}.json", Util.DiretorioTransacoesAnestesista)))
                    {
                        JsonSerializer serializer = new JsonSerializer();
                        //SALVO LOG DA TRANSAÇÃO
                        serializer.Serialize(file, logs);
                    }



                    return(Ok(trans.Id.ToString()));
                }
                catch (Exception ex)
                {
                    return(BadRequest(ex.Message));
                }
            }
        }
        public IActionResult RollBack(string id)
        {
            try
            {
                //Lista de transacoes
                List <AnestesistaTransaction> trans = new List <AnestesistaTransaction>();


                //Leio o log da transação / arquivo intermediário
                using (StreamReader r = new StreamReader(string.Format("{0}.json", Util.DiretorioTransacoesAnestesista)))
                {
                    //Converto em JSON
                    string json = r.ReadToEnd();
                    trans = JsonConvert.DeserializeObject <List <AnestesistaTransaction> >(json);
                }

                //GET Registro Limpo
                AnestesistaModel item = trans.FirstOrDefault(x => x.Id == Guid.Parse(id)).RegistroAtual;


                List <AnestesistaModel> items = new List <AnestesistaModel>();

                //Leio todos os cirurgioes do JSON "SUJO"
                using (StreamReader r = new StreamReader(Util.FileAnestesiaP))
                {
                    //Converto em JSON
                    string json = r.ReadToEnd();
                    items = JsonConvert.DeserializeObject <List <AnestesistaModel> >(json);
                }



                items.RemoveAll(x => x.Id == item.Id);
                items.Add(item);
                items.OrderBy(x => x.Id);

                using (StreamWriter file = System.IO.File.CreateText(Util.FileAnestesiaP)) // Salva no banco Intermediario
                {
                    JsonSerializer serializer = new JsonSerializer();
                    //COMITA A TRANSAÇÃO NO ARQUIVO PRINCIPAL
                    serializer.Serialize(file, items);
                }

                //Finaliza transação
                trans.FirstOrDefault(x => x.Id == Guid.Parse(id)).AlterarStatus(EStatus.Efetivado);
                trans.FirstOrDefault(x => x.Id == Guid.Parse(id)).FinalizarTransacao();


                using (StreamWriter file = System.IO.File.CreateText(string.Format("{0}.json", Util.DiretorioTransacoesAnestesista)))
                {
                    JsonSerializer serializer = new JsonSerializer();
                    //SALVO LOG DA TRANSAÇÃO
                    serializer.Serialize(file, trans);
                }

                return(Ok(true));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }