Exemplo n.º 1
0
        public string Get(string id)
        {
            Sequence    sequence       = _db.Sequences.Find(id);
            Observation preObservation = _db.Observations.AsEnumerable().LastOrDefault(o => o.SequenceId == id);

            if (sequence is null)
            {
                return("not found");
            }
            TrafficLight trafficLight = new TrafficLight();

            if (preObservation is null)
            {
                if (sequence.StartColor == "red")
                {
                    DateTime now = DateTime.Now;
                    now.AddMilliseconds(-now.Millisecond);
                    int seconds = (int)(now - sequence.CatheringDate).TotalSeconds;
                    if (seconds > sequence.StartClock)
                    {
                        trafficLight.Color = "green";
                        trafficLight.Clock = _sequencesService.GetBrokenClock(_sequencesService.ConvertClocks(sequence.MaxClock), sequence.BrokenNumbers);
                    }
                    else
                    {
                        trafficLight.Color = "red";
                    }
                }
                else
                {
                    trafficLight.Color = "green";
                    trafficLight.Clock = _sequencesService.GetBrokenClock(_sequencesService.ConvertClocks(sequence.StartClock), sequence.BrokenNumbers);
                }
            }
            else
            {
                trafficLight = _sequencesService.ConvertToTrafficLight(sequence, preObservation);
            }
            GoodResponse goodResponse = new GoodResponse()
            {
                Response = trafficLight
            };

            return(JsonConvert.Json(goodResponse));
        }
Exemplo n.º 2
0
        public async Task <string> Create()
        {
            try
            {
                Sequence sequence = _sequencesService.GenerateSequence();
                sequence.CatheringDate = DateTime.Now;
                sequence.CatheringDate.AddMilliseconds(-sequence.CatheringDate.Millisecond);
                _db.Entry(sequence).State = Microsoft.EntityFrameworkCore.EntityState.Added;
                await _db.SaveChangesAsync();

                GoodResponse response = new GoodResponse()
                {
                    Response = new { sequence = sequence.Id }
                };
                return(JsonConvert.Json(response));
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public async Task <string> Create(ObservationRequest observation)
        {
            string msg = _observationsService.CheckObservationValid(observation);

            if (msg != "ok")
            {
                return(JsonConvert.BadRequestJson(msg));
            }
            Sequence sequence = _db.Sequences.Find(observation.Sequence);

            if (sequence is null)
            {
                return(JsonConvert.BadRequestJson("The sequence isn't found"));
            }
            if (sequence.IsOver)
            {
                return(JsonConvert.BadRequestJson("The red observation should be the last"));
            }
            Observation newObservation = new Observation();
            Observation preObservation = _db.Observations.AsEnumerable().Reverse().FirstOrDefault(o => o.SequenceId == observation.Sequence);

            if (observation.Observation.Color == "red")
            {
                if (preObservation is null)
                {
                    return(JsonConvert.BadRequestJson("There isn't enough data"));
                }
                if (_sequencesService.ToInt(preObservation.Numbers) == 1)
                {
                    newObservation.Color = observation.Observation.Color;
                }
                else
                {
                    return(JsonConvert.BadRequestJson("No solutions found"));
                }
                GoodResponse redResponse = new GoodResponse()
                {
                    Response = new { start = new int[1] {
                                         sequence.StartClock
                                     }, missing = sequence.NickedBrokenNumbers }
                };
                newObservation.SequenceId       = observation.Sequence;
                newObservation.Id               = $"{observation.Sequence}red";
                _db.Entry(sequence).State       = Microsoft.EntityFrameworkCore.EntityState.Modified;
                _db.Entry(newObservation).State = Microsoft.EntityFrameworkCore.EntityState.Added;
                await _db.SaveChangesAsync();

                return(JsonConvert.Json(redResponse));
            }
            try
            {
                newObservation.SequenceId = observation.Sequence;
                _sequencesService.SetObservationClocks(ref newObservation, ref sequence, _sequencesService.GetCurrentClockFromPre(preObservation.Numbers), observation.Observation.Numbers);
                sequence.StartClocks = _sequencesService.GetClosestValuesFromArray(sequence.StartClocks, observation.Observation.Numbers);
            }
            catch (NullReferenceException)
            {
                newObservation = new Observation();
                string[] curClock = new string[0];
                if (sequence.StartColor == "red")
                {
                    curClock = _sequencesService.ConvertClocks(sequence.MaxClock);
                }
                else
                {
                    curClock = _sequencesService.ConvertClocks(sequence.StartClock);
                }
                if (!_sequencesService.GetTrueClockValide(observation.Observation.Numbers, sequence.BrokenNumbers, curClock))
                {
                    return("bad request");
                }
                _sequencesService.SetObservationClocks(ref newObservation, ref sequence, curClock, observation.Observation.Numbers);
                sequence.StartClocks = _sequencesService.GetClosestValues(observation.Observation.Numbers);
            }
            GoodResponse response = new GoodResponse()
            {
                Response = new { start = sequence.StartClocks, missing = sequence.NickedBrokenNumbers }
            };

            newObservation.SequenceId       = observation.Sequence;
            newObservation.Id               = $"{newObservation.SequenceId}{newObservation.Numbers[0]}{newObservation.Numbers[1]}";
            _db.Entry(sequence).State       = Microsoft.EntityFrameworkCore.EntityState.Modified;
            _db.Entry(newObservation).State = Microsoft.EntityFrameworkCore.EntityState.Added;
            await _db.SaveChangesAsync();

            return(JsonConvert.Json(response));
        }