Ejemplo n.º 1
0
        public async Task <IActionResult> Mutant([FromBody] SequenceDTO sequence)
        {
            if (sequence.DNA.Any(x => x.Length != sequence.DNA[0].Length))
            {
                return(BadRequest("Invalid dna chain. All elements must contain the same length."));
            }

            var isMutant = _mutantService.AnalyzeSequence(sequence.DNA);

            var dna = string.Join(",", sequence.DNA);

            if (!await _mutantService.Exist(dna))
            {
                _mutantService.AddRecord(new DnaRecord()
                {
                    DNA      = dna,
                    IsMutant = isMutant
                });

                await _context.SaveChangesAsync();
            }

            if (isMutant)
            {
                return(Ok());
            }
            else
            {
                return(StatusCode(403));
            }
        }
        private ISequence CreateSequence()
        {
            SequenceDTO sequenceDTO = _sequenceView.GetSequence();

            Log.Information("Getted sequence: {sequenceType}, {minRange}, {maxRange}",
                            sequenceDTO.SequenceType, sequenceDTO.MinRange, sequenceDTO.MaxRange);

            ValidateSequenceDTO(sequenceDTO);

            ISequence sequence;

            switch (sequenceDTO.SequenceType)
            {
            case SequenceType.Fibonacci:
            {
                sequence = new FibonacciSequence(sequenceDTO);
                break;
            }

            case SequenceType.SquareLess:
            {
                sequence = new SquareLessSequence(sequenceDTO);
                break;
            }

            default:
            {
                throw new ArgumentOutOfRangeException(sequenceDTO.SequenceType.ToString(),
                                                      "No such mode of sequence");
            }
            }

            return(sequence);
        }
        private void ValidateSequenceDTO(SequenceDTO sequence)
        {
            if (sequence.MinRange < 0)
            {
                throw new ArgumentOutOfRangeException("minRange", "Must be positive");
            }
            if (sequence.MaxRange < 0)
            {
                throw new ArgumentOutOfRangeException("maxRange", "Must be positive");
            }

            if (sequence.MinRange > sequence.MaxRange)
            {
                throw new ArgumentOutOfRangeException("range", "The Minimum range must be greater than or equal to the maximum");
            }
        }