/// <inheritdoc /> public virtual Task <string> ReservarCirurgiao(CirurgiaoModel reserva, string guid) { var arguments = new object[] { reserva, guid }; var func = requestBuilder.BuildRestResultFuncForMethod("ReservarCirurgiao", new Type[] { typeof(CirurgiaoModel), typeof(string) }); return((Task <string>)func(Client, arguments)); }
public IActionResult RollBack(string id) { try { //Cria uma nova transação List <CirurgiaoTransaction> trans = new List <CirurgiaoTransaction>(); //Leio o log da transação / arquivo intermediário using (StreamReader r = new StreamReader(string.Format("{0}.json", Util.DiretorioTransacoesCirurgiao))) { //Converto em JSON string json = r.ReadToEnd(); trans = JsonConvert.DeserializeObject <List <CirurgiaoTransaction> >(json); } //GET Registro Limpo CirurgiaoModel item = trans.FirstOrDefault(x => x.Id == Guid.Parse(id)).RegistroAtual; List <CirurgiaoModel> items = new List <CirurgiaoModel>(); //Leio todos os cirurgioes do JSON PRINCIPAL using (StreamReader r = new StreamReader(Util.FileAnestesiaP)) { //Converto em JSON string json = r.ReadToEnd(); items = JsonConvert.DeserializeObject <List <CirurgiaoModel> >(json); } items.RemoveAll(x => x.Id == item.Id); items.Add(item); items.OrderBy(x => x.Id); using (StreamWriter file = System.IO.File.CreateText(Util.FileCirurgiaoP)) // Salva no banco Intermediario { JsonSerializer serializer = new JsonSerializer(); //COMITA A TRANSAÇÃO NO ARQUIVO PRINCIPAL serializer.Serialize(file, items); } 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.DiretorioTransacoesCirurgiao))) { JsonSerializer serializer = new JsonSerializer(); //SALVO LOG DA TRANSAÇÃO serializer.Serialize(file, trans); } return(Ok(true)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public IActionResult ReservarCirurgiao([FromBody] CirurgiaoModel reserva, string guid) { lock (reserva) //Métodos de Controle de Concorrência: Travas (locks) e bloqueios; { try { //Cria uma nova transação CirurgiaoTransaction trans = new CirurgiaoTransaction(); //SALVA STATUS DA TRANSAÇÃO E DATA\HORARIO DE INICIO trans.Status = EStatus.Preparado; trans.Inicio = DateTime.Now; List <CirurgiaoModel> items = new List <CirurgiaoModel>(); //Leio todos os cirurgioes do JSON PRINCIPAL using (StreamReader r = new StreamReader(Util.FileCirurgiao)) { //Converto em JSON string json = r.ReadToEnd(); items = JsonConvert.DeserializeObject <List <CirurgiaoModel> >(json); } bool disponivel = false; //Itero pela coleção, comparando com os ids da reserva foreach (var item in items.Where(x => x.IsReservado == false)) { //SE NA LISTA PRINCIPAL EXISTIR ALGUM ID DE IGUAL AO DA RESERVA, if (reserva.Id == item.Id) { disponivel = true; } } if (!disponivel) { return(BadRequest()); } else { var registro = items.FirstOrDefault(x => x.Id == reserva.Id); trans.RegistroAtual = (CirurgiaoModel)registro.Clone(); registro.Reservar(); trans.RegistroAlterado = registro; } using (StreamWriter file = System.IO.File.CreateText(Util.FileCirurgiaoP)) { JsonSerializer serializer = new JsonSerializer(); //COMITA A TRANSAÇÃO NO ARQUIVO "SUJO" serializer.Serialize(file, items); } //Abrir Arquivo de processos List <CirurgiaoTransaction> logs = new List <CirurgiaoTransaction>(); using (StreamReader r = new StreamReader(Util.DiretorioTransacoesCirurgiao)) { //Converto em JSON string json = r.ReadToEnd(); logs = JsonConvert.DeserializeObject <List <CirurgiaoTransaction> >(json); if (logs == null) { logs = new List <CirurgiaoTransaction>(); } } logs.Add(trans); // Salva o log using (StreamWriter file = System.IO.File.CreateText(string.Format("{0}", Util.DiretorioTransacoesCirurgiao))) { 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)); } } }