/// <summary>
        /// Implementation of substraction method.
        /// </summary>
        /// <param name="substraction"></param>
        /// <param name="trackingId"></param>
        /// <returns></returns>
        public SubstractionResponseModel Substraction(SubstractionModel substraction, string trackingId)
        {
            //calculates the difference between the inputs.
            int difference = substraction.Minuend - substraction.Subtrahend;

            LogModel logModel = new LogModel()
            {
                Operation   = "Sub",
                Calculation = $"{ substraction.Minuend} - {substraction.Subtrahend} = {difference}",
                Date        = DateTime.Now
            };

            //if there is a tracking id, save operation in journal.
            if (!string.IsNullOrEmpty(trackingId))
            {
                Journal.Add(new KeyValuePair <string, LogModel>(trackingId, logModel));
            }
            // saves data in the log
            Log.Information($"Calculator::Sub:: {logModel}");

            return(new SubstractionResponseModel()
            {
                Difference = difference
            });
        }
 public ActionResult Sub([FromBody] SubstractionModel substraction)
 {
     try
     {
         // Verifies if the model is valid, if not, returns a bad request response.
         // the verification is based on the attributes defined in the DTO.
         if (!ModelState.IsValid)
         {
             MicroserviceException badRequestResponse = new MicroserviceException()
             {
                 ErrorCode    = "InternalError",
                 ErrorMessage = "Unable to process request:" + ModelState.Values,
                 ErrorStatus  = 400
             };
             return(BadRequest(badRequestResponse));
         }
         else
         {
             // Finds the value of the header with the tracking id
             StringValues trackingId;
             Request.Headers.TryGetValue("X-Evi-Tracking-Id", out trackingId);
             var response = _calculatorService.Substraction(substraction, trackingId);
             return(Ok(response));
         }
     }
     // Catches and manages all of the server's errors and responds the client with a controlled object.
     catch (Exception err)
     {
         MicroserviceException internalServerErrorResponse = new MicroserviceException()
         {
             ErrorCode    = "InternalError",
             ErrorMessage = "An unexpected error condition was triggered which made impossible to fulfill the request. Please try again or contact support" + err.InnerException,
             ErrorStatus  = 500
         };
         Log.Error($"Calculator::Exception:: {internalServerErrorResponse}");
         return(StatusCode(500, internalServerErrorResponse));
     }
 }