public async Task <IHttpActionResult> JumpToWizardStep(UserOnboardingStatusDTO inputStep) { string userName = User.Identity.Name; User user = db.Users.Where(_user => _user.UserName == userName).SingleOrDefault(); if (user == null) { throw new HttpResponseException(HttpStatusCode.Unauthorized); } if (!inputStep.OnboardingStep.HasValue) { throw new HttpResponseException(HttpStatusCode.BadRequest); } if (inputStep.OnboardingStep.HasValue && (inputStep.OnboardingStep.Value < 0 || inputStep.OnboardingStep.Value > 4)) { throw new HttpResponseException(HttpStatusCode.BadRequest); } user.OnboardingStep = inputStep.OnboardingStep.Value; db.Entry(user).State = EntityState.Modified; await db.SaveChangesAsync(); return(Ok(Mapper.Map <User, UserOnboardingStatusDTO>(user))); }
public async Task <IHttpActionResult> SetMyCurrentOnboardingStep(UserOnboardingStatusDTO inputStep) { string userName = User.Identity.Name; User user = db.Users.Where(_user => _user.UserName == userName).SingleOrDefault(); if (user == null) { throw new HttpResponseException(HttpStatusCode.Unauthorized); } if (!inputStep.OnboardingStep.HasValue) { throw new HttpResponseException(HttpStatusCode.BadRequest); } if (inputStep.OnboardingStep.HasValue && (inputStep.OnboardingStep.Value < 0 || inputStep.OnboardingStep.Value > 4)) { throw new HttpResponseException(HttpStatusCode.BadRequest); } if (user.OnboardingSkipped == true) { throw new HttpResponseException(HttpStatusCode.BadRequest); } bool isPrev = false; bool showFirstStep = false; if (user.OnboardingStep.HasValue) { int diff = user.OnboardingStep.Value - inputStep.OnboardingStep.Value; if (!(diff == 1 || diff == -1 || (diff == -3 && inputStep.IsIndividual.HasValue && inputStep.IsIndividual.Value))) { throw new HttpResponseException(HttpStatusCode.BadRequest); } if (diff > 0) { isPrev = true; } if (diff == 1 && inputStep.OnboardingStep.Value == 3 && user.OnboardingStep.Value == 4 && user.IsIndividual.HasValue && user.IsIndividual.Value) { showFirstStep = true; } if (showFirstStep) { inputStep.OnboardingStep = 1; } } user.OnboardingStep = inputStep.OnboardingStep.Value; if ((inputStep.OnboardingStep.Value == 2 || inputStep.OnboardingStep.Value == 4) && !isPrev) { user.IsIndividual = false; if (inputStep.IsIndividual.HasValue && inputStep.IsIndividual.Value) { user.IsIndividual = true; } } db.Entry(user).State = EntityState.Modified; await db.SaveChangesAsync(); return(Ok(Mapper.Map <User, UserOnboardingStatusDTO>(user))); }