public async Task <ActionResult <Applicant> > Create([FromBody] object jsonObj)
        {
            try
            {
                Applicant           applicant        = Newtonsoft.Json.JsonConvert.DeserializeObject <Applicant>(jsonObj.ToString());
                ApplicantValidation validationRules  = new ApplicantValidation();
                ValidationResult    validationResult = validationRules.Validate(applicant);
                if (!validationResult.IsValid)
                {
                    Dictionary <string, string> errResult = new Dictionary <string, string>();
                    foreach (ValidationFailure failure in validationResult.Errors)
                    {
                        errResult.Add(failure.PropertyName, failure.ErrorMessage);
                    }

                    var result = new JsonResult(errResult);
                    result.StatusCode = 400;
                    return(result);
                }
                else
                {
                    context.Applicants.Add(applicant);
                    await context.SaveChangesAsync();

                    return(CreatedAtAction(nameof(Get), new { id = applicant.ID }, applicant));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex
                                 , "Could not create new applicant. {msg}", ex.Message);
                return(BadRequest());
            }
        }
        public async Task <ActionResult <Applicant> > Update(int applicantId, [FromBody] Applicant newData)
        {
            try
            {
                var     applicant = context.Applicants.FirstOrDefault(x => x.ID == applicantId);
                JObject errObj    = new JObject();

                if (applicant == null)
                {
                    errObj.Add("Error", "Applicant does not exists");
                    var result = new JsonResult(errObj);
                    result.StatusCode = 400;
                    return(result);
                }

                ApplicantValidation validationRules  = new ApplicantValidation();
                ValidationResult    validationResult = validationRules.Validate(newData);
                if (!validationResult.IsValid)
                {
                    foreach (ValidationFailure failure in validationResult.Errors)
                    {
                        errObj.Add(failure.PropertyName, failure.ErrorMessage);
                    }

                    var result = new JsonResult(errObj);
                    result.StatusCode = 400;
                    return(result);
                }

                applicant.Name            = newData.Name;
                applicant.FamilyName      = newData.FamilyName;
                applicant.Address         = newData.Address;
                applicant.CountryOfOrigin = newData.CountryOfOrigin;
                applicant.EmailAddress    = newData.EmailAddress;
                applicant.Age             = newData.Age;
                applicant.Hired           = newData.Hired;

                context.Entry(applicant).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
                await context.SaveChangesAsync();

                return(NoContent());
            }
            catch (Exception ex)
            {
                _logger.LogError(ex
                                 , "Error when updating applicant with id: {id}. {msg}", applicantId, ex.Message);
                return(BadRequest());
            }
        }