/// <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)); } }