예제 #1
0
        public async Task <IActionResult> SendSurveyResponses([FromBody] SurveyAnswerRequest request)
        {
            Response <SurveyStat> response = new Response <SurveyStat>();

            try
            {
                var isFaulted = IsAuthenticationFaulted(UserIdentity);
                if (isFaulted)
                {
                    response = new Response <SurveyStat>
                    {
                        ResponseBody = new SuccessResponse <SurveyStat>
                        {
                            Data            = null,
                            ResponseCode    = "E009",
                            ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again."
                        }
                    };

                    return(Unauthorized(response.ResponseBody));
                }

                if (request.Responses.Count == 0)
                {
                    ModelState.AddModelError("questionId", "questionId is required!");
                    ModelState.AddModelError("optionId", "optionId is required!");
                }

                if (!ModelState.IsValid)
                {
                    var requestResponse = ApiResponseFormatter.RequestResponse(ModelState);
                    return(BadRequest(requestResponse));
                }

                User   userCredentials;
                Survey survey;
                using (var _context = new MiniSurveyContext())
                {
                    userCredentials = await _context.Users.Where(x => x.Id == UserIdentity)
                                      .Include(x => x.UserResponses)
                                      .FirstOrDefaultAsync();

                    survey = await _context.Surveys.Where(a => a.Id == request.SurveyId).FirstOrDefaultAsync();
                }

                if (userCredentials == null)
                {
                    response = new Response <SurveyStat>
                    {
                        ResponseBody = new SuccessResponse <SurveyStat>
                        {
                            Data            = null,
                            ResponseCode    = "E003",
                            ResponseMessage = "You do not have the permission to submit your response. Kindly login or register to share your opinion."
                        }
                    };


                    return(Unauthorized(response.ResponseBody));
                }

                if (survey == null)
                {
                    response = new Response <SurveyStat>
                    {
                        ResponseBody = new SuccessResponse <SurveyStat>
                        {
                            Data            = null,
                            ResponseCode    = "E012",
                            ResponseMessage = "The survey you selected does not exist. Kindly try again later."
                        }
                    };


                    return(NotFound(response.ResponseBody));
                }

                if (userCredentials.UserResponses.Count == 0)
                {
                    List <Models.UserResponse> selectedResponses = new List <Models.UserResponse>();
                    foreach (var userResponse in request.Responses)
                    {
                        Models.UserResponse selectedResponse = new Models.UserResponse
                        {
                            QuestionId    = userResponse.QuestionId,
                            OptionId      = userResponse.OptionId,
                            UserId        = userCredentials.Id,
                            DateResponded = DateTime.UtcNow,
                            SurveyId      = request.SurveyId,
                            TextResponse  = userResponse.TextAnswer
                        };
                        selectedResponses.Add(selectedResponse);
                    }

                    using (var _context = new MiniSurveyContext())
                    {
                        _context.UserResponses.AddRange(selectedResponses);
                        await _context.SaveChangesAsync();
                    }
                }

                List <Models.UserResponse>   userResponses   = new List <Models.UserResponse>();
                List <Models.QuestionOption> questionOptions = new List <QuestionOption>();
                using (var _context = new MiniSurveyContext())
                {
                    userResponses = await _context.UserResponses.ToListAsync();

                    questionOptions = await _context.QuestionOptions.Include(a => a.Question).Include(a => a.Option).ToListAsync();
                }

                var totalUserIds     = userResponses.Select(a => a.UserId).Distinct().ToList();
                var totalQuestionIds = userResponses.Select(a => a.QuestionId).Distinct().ToList();

                var totalUsersCount     = totalUserIds.Count;
                var totalQuestionsCount = totalQuestionIds.Count;

                List <Poll> polls = new List <Poll>();
                foreach (var questionId in totalQuestionIds)
                {
                    var selectedQuestionOptions = questionOptions.Where(a => a.QuestionId == questionId);
                    var questionResponses       = userResponses.Where(a => a.QuestionId == questionId);

                    var question = selectedQuestionOptions.FirstOrDefault().Question;

                    List <OpinionPoll> questionOpinions = new List <OpinionPoll>();
                    if (selectedQuestionOptions != null)
                    {
                        foreach (var selectedQuestionOption in selectedQuestionOptions)
                        {
                            var option              = selectedQuestionOption.Option;
                            var responseCount       = questionResponses.Count(a => a.OptionId == option.Id);
                            var numberDivision      = (double)responseCount / (double)totalUsersCount;
                            var responsePercentage  = numberDivision * 100;
                            var roundedUpPercentage = Math.Round(responsePercentage, 1);

                            OpinionPoll opinionPoll = new OpinionPoll
                            {
                                OptionId   = option.Id,
                                Option     = option.Text,
                                Percentage = roundedUpPercentage
                            };
                            questionOpinions.Add(opinionPoll);
                        }
                    }

                    Poll poll = new Poll
                    {
                        QuestionId   = questionId,
                        Question     = question.Text,
                        OpinionPolls = questionOpinions
                    };
                    polls.Add(poll);
                }


                SurveyStat stat = new SurveyStat
                {
                    Polls             = polls,
                    TotalParticipants = totalUsersCount,
                    TotalQuestions    = totalQuestionsCount
                };

                response = new Response <SurveyStat>
                {
                    ResponseBody = new SuccessResponse <SurveyStat>
                    {
                        Data            = stat,
                        ResponseCode    = "00",
                        ResponseMessage = "You have successfully shared your opinion in the survey. Kindly view our stats to compare your responses with those of others."
                    }
                };


                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <SurveyStat>
                {
                    ResponseBody = new SuccessResponse <SurveyStat>
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
예제 #2
0
        public async Task <IActionResult> GetSurveyQuestions(int id)
        {
            Response <SurveyResponse> response = new Response <SurveyResponse>();

            try
            {
                var isFaulted = IsAuthenticationFaulted(UserIdentity);
                if (isFaulted)
                {
                    response = new Response <SurveyResponse>
                    {
                        ResponseBody = new SuccessResponse <SurveyResponse>
                        {
                            Data            = null,
                            ResponseCode    = "E009",
                            ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again."
                        }
                    };

                    return(Unauthorized(response.ResponseBody));
                }

                Survey survey;
                List <QuestionType>     questionTypes     = new List <QuestionType>();
                List <QuestionResponse> questionResponses = new List <QuestionResponse>();
                using (var _context = new MiniSurveyContext())
                {
                    survey = await _context.Surveys.Where(a => a.Id == id).Include(a => a.UserResponses).Include(a => a.SurveyQuestions).ThenInclude(a => a.Question).ThenInclude(a => a.QuestionOptions).ThenInclude(a => a.Option).FirstOrDefaultAsync();

                    questionTypes = await _context.QuestionTypes.ToListAsync();
                }

                if (survey == null)
                {
                    response = new Response <SurveyResponse>
                    {
                        ResponseBody = new SuccessResponse <SurveyResponse>
                        {
                            Data            = null,
                            ResponseCode    = "00",
                            ResponseMessage = "There are no surveys yet, kindly try again later as we are currently working on it."
                        }
                    };

                    return(Ok(response.ResponseBody));
                }

                if (survey.SurveyQuestions.Count == 0)
                {
                    SurveyResponse surveyResponse = new SurveyResponse
                    {
                        Id          = survey.Id,
                        Title       = survey.Title,
                        Description = survey.Description,
                        Status      = survey.Status,
                        DateCreated = survey.DateCreated
                    };

                    response = new Response <SurveyResponse>
                    {
                        ResponseBody = new SuccessResponse <SurveyResponse>
                        {
                            Data            = surveyResponse,
                            ResponseCode    = "00",
                            ResponseMessage = "There are no survey questions configured for this survey yet, kindly try again later."
                        }
                    };

                    return(Ok(response.ResponseBody));
                }

                List <long> questionIds = survey.SurveyQuestions.Select(a => a.QuestionId.Value).Distinct().ToList();
                foreach (var questionId in questionIds)
                {
                    var question     = survey.SurveyQuestions.FirstOrDefault(a => a.QuestionId == questionId).Question;
                    var options      = question.QuestionOptions.Select(a => a.Option).ToList();
                    var questionType = questionTypes.FirstOrDefault(a => a.Id == question.QuestionTypeId);

                    QuestionResponse questionResponse = new QuestionResponse {
                        Id = question.Id, Value = question.Text
                    };
                    QuestionTypeResponse questionTypeResponse = new QuestionTypeResponse {
                        Id = questionType.Id, Name = questionType.Name, MinimumRequired = questionType.MinimumRequired, MaximumRequired = questionType.MaximumRequired, IsOptionRequired = questionType.IsOptionRequired ?? false
                    };

                    List <DefaultResponse> selectedOptions = new List <DefaultResponse>();

                    foreach (var option in options)
                    {
                        DefaultResponse selectedOption = new DefaultResponse
                        {
                            Id    = option.Id,
                            Value = option.Text
                        };
                        selectedOptions.Add(selectedOption);
                    }

                    questionResponse.Options      = selectedOptions;
                    questionResponse.QuestionType = questionTypeResponse;
                    questionResponses.Add(questionResponse);
                }

                SurveyResponse surveyQuestionResponse = new SurveyResponse
                {
                    Id              = survey.Id,
                    Title           = survey.Title,
                    Description     = survey.Description,
                    Status          = survey.Status,
                    DateCreated     = survey.DateCreated,
                    SurveyQuestions = questionResponses
                };

                response = new Response <SurveyResponse>
                {
                    ResponseBody = new SuccessResponse <SurveyResponse>
                    {
                        Data            = surveyQuestionResponse,
                        ResponseCode    = "00",
                        ResponseMessage = "You have been successfully fetched all survey questions. Get ready to answer them in your own opinion."
                    }
                };

                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <SurveyResponse>
                {
                    ResponseBody = new SuccessResponse <SurveyResponse>
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to fetch survey questions at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
예제 #3
0
        public async Task <IActionResult> SurveyResponses(int surveyId)
        {
            Response <SurveyStat> response = new Response <SurveyStat>();

            try
            {
                var isFaulted = IsAuthenticationFaulted(UserIdentity);
                if (isFaulted)
                {
                    response = new Response <SurveyStat>
                    {
                        ResponseBody = new SuccessResponse <SurveyStat>
                        {
                            Data            = null,
                            ResponseCode    = "E009",
                            ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again."
                        }
                    };

                    return(Unauthorized(response.ResponseBody));
                }

                User userCredentials;
                using (var _context = new MiniSurveyContext())
                {
                    userCredentials = await _context.Users.Where(x => x.Id == UserIdentity)
                                      .Include(x => x.UserResponses)
                                      .FirstOrDefaultAsync();
                }

                if (userCredentials == null)
                {
                    response = new Response <SurveyStat>
                    {
                        ResponseBody = new SuccessResponse <SurveyStat>
                        {
                            Data            = null,
                            ResponseCode    = "E003",
                            ResponseMessage = "You have not registered so you cannot view the survey review or statistics. Kindly register to participate."
                        }
                    };

                    return(Unauthorized(response.ResponseBody));
                }

                if (userCredentials.UserResponses.Count == 0)
                {
                    response = new Response <SurveyStat>
                    {
                        ResponseBody = new SuccessResponse <SurveyStat>
                        {
                            Data            = null,
                            ResponseCode    = "E005",
                            ResponseMessage = "You have not taken part in the survey and therefore cannot view the survey statistics. Kindly answer questions to participate."
                        }
                    };
                    return(Ok(response.ResponseBody));
                }

                List <Models.UserResponse>   userResponses   = new List <Models.UserResponse>();
                List <Models.QuestionOption> questionOptions = new List <QuestionOption>();
                using (var _context = new MiniSurveyContext())
                {
                    userResponses = await _context.UserResponses.Where(a => a.SurveyId == surveyId).ToListAsync();

                    questionOptions = await _context.QuestionOptions.Include(a => a.Question).Include(a => a.Option).ToListAsync();
                }

                var totalUserIds     = userResponses.Select(a => a.UserId).Distinct().ToList();
                var totalQuestionIds = userResponses.Select(a => a.QuestionId).Distinct().ToList();

                var totalUsersCount     = totalUserIds.Count;
                var totalQuestionsCount = totalQuestionIds.Count;

                List <Poll> polls = new List <Poll>();
                foreach (var questionId in totalQuestionIds)
                {
                    var selectedQuestionOptions = questionOptions.Where(a => a.QuestionId == questionId);
                    var questionResponses       = userResponses.Where(a => a.QuestionId == questionId);

                    var question = selectedQuestionOptions.FirstOrDefault().Question;

                    List <OpinionPoll> questionOpinions = new List <OpinionPoll>();
                    if (selectedQuestionOptions != null)
                    {
                        foreach (var selectedQuestionOption in selectedQuestionOptions)
                        {
                            var option              = selectedQuestionOption.Option;
                            var responseCount       = questionResponses.Count(a => a.OptionId == option.Id);
                            var numberDivision      = (double)responseCount / (double)totalUsersCount;
                            var responsePercentage  = numberDivision * 100;
                            var roundedUpPercentage = Math.Round(responsePercentage, 1);

                            OpinionPoll opinionPoll = new OpinionPoll
                            {
                                OptionId   = option.Id,
                                Option     = option.Text,
                                Percentage = roundedUpPercentage
                            };
                            questionOpinions.Add(opinionPoll);
                        }
                    }

                    Poll poll = new Poll
                    {
                        QuestionId   = questionId,
                        Question     = question.Text,
                        OpinionPolls = questionOpinions
                    };
                    polls.Add(poll);
                }


                SurveyStat stat = new SurveyStat
                {
                    Polls             = polls,
                    TotalParticipants = totalUsersCount,
                    TotalQuestions    = totalQuestionsCount
                };

                response = new Response <SurveyStat>
                {
                    ResponseBody = new SuccessResponse <SurveyStat>
                    {
                        Data            = stat,
                        ResponseCode    = "00",
                        ResponseMessage = "You have successfully shared your opinion in the survey. Kindly view our stats to compare your responses with those of others."
                    }
                };


                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <SurveyStat>
                {
                    ResponseBody = new SuccessResponse <SurveyStat>
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
예제 #4
0
        public async Task <IActionResult> Register([FromBody] UserRequest request)
        {
            Response <RegisteredUserResponse> response = new Response <RegisteredUserResponse>();

            try
            {
                if (!ModelState.IsValid)
                {
                    var requestResponse = ApiResponseFormatter.RequestResponse(ModelState);
                    return(BadRequest(requestResponse));
                }

                User     userCredentials;
                DateTime dateRegistered;
                using (var _context = new MiniSurveyContext())
                {
                    userCredentials = await _context.Users.Where(x => x.EmailAddress == request.Email.Trim())
                                      .Include(x => x.UserResponses)
                                      .FirstOrDefaultAsync();
                }

                if (userCredentials == null)
                {
                    var userRoleId = (int)Enums.Roles.User;
                    using (var _context = new MiniSurveyContext())
                    {
                        dateRegistered = DateTime.UtcNow;
                        _context.Users.Add(new Models.User {
                            Name = request.Name, EmailAddress = request.Email.Trim(), PasswordHash = request.Password, DateRegistered = dateRegistered, RoleId = userRoleId
                        });
                        await _context.SaveChangesAsync();
                    }

                    userCredentials = new User {
                        Name = request.Name, DateRegistered = dateRegistered, EmailAddress = request.Email, RoleId = userRoleId
                    };
                }

                response = new Response <RegisteredUserResponse>
                {
                    ResponseBody = new SuccessResponse <RegisteredUserResponse>
                    {
                        Data = new RegisteredUserResponse {
                            User = new Dto.UserResponse {
                                Email = userCredentials.EmailAddress, Name = userCredentials.Name, DateRegistered = userCredentials.DateRegistered
                            }, Role = new DefaultResponse {
                                Id = userCredentials.RoleId, Value = Enums.Roles.User.ToString()
                            }
                        },
                        ResponseCode    = "00",
                        ResponseMessage = "You have been successfully enrolled to participate in the survey."
                    }
                };


                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <RegisteredUserResponse>
                {
                    ResponseBody = new SuccessResponse <RegisteredUserResponse>
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
예제 #5
0
        public async Task <IActionResult> GetSurveys()
        {
            Response <List <SurveyDetail> > response = new Response <List <SurveyDetail> >();

            try
            {
                var isFaulted = IsAuthenticationFaulted(UserIdentity);
                if (isFaulted)
                {
                    response = new Response <List <SurveyDetail> >
                    {
                        ResponseBody = new SuccessResponse <List <SurveyDetail> >
                        {
                            Data            = null,
                            ResponseCode    = "E009",
                            ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again."
                        }
                    };

                    return(Unauthorized(response.ResponseBody));
                }

                List <Survey>       surveys;
                List <SurveyDetail> surveyDetails = new List <SurveyDetail>();
                using (var _context = new MiniSurveyContext())
                {
                    surveys = await _context.Surveys.ToListAsync();
                }

                if (surveys == null)
                {
                    response = new Response <List <SurveyDetail> >
                    {
                        ResponseBody = new SuccessResponse <List <SurveyDetail> >
                        {
                            Data            = null,
                            ResponseCode    = "00",
                            ResponseMessage = "There are no surveys yet, kindly try again later as we are currently working on it."
                        }
                    };

                    return(Ok(response.ResponseBody));
                }

                foreach (var survey in surveys)
                {
                    SurveyDetail surveyDetail = new SurveyDetail
                    {
                        Id          = survey.Id,
                        Title       = survey.Title,
                        Description = survey.Description,
                        Status      = survey.Status,
                        DateCreated = survey.DateCreated
                    };

                    surveyDetails.Add(surveyDetail);
                }

                response = new Response <List <SurveyDetail> >
                {
                    ResponseBody = new SuccessResponse <List <SurveyDetail> >
                    {
                        Data            = surveyDetails,
                        ResponseCode    = "00",
                        ResponseMessage = "You have been successfully fetched all surveys."
                    }
                };

                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <List <SurveyDetail> >
                {
                    ResponseBody = new SuccessResponse <List <SurveyDetail> >
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to fetch surveys at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
예제 #6
0
        public async Task <IActionResult> EditSurvey([FromBody] SurveyUpdateRequest request)
        {
            Response <SurveyResponse> response = new Response <SurveyResponse>();

            try
            {
                var isFaulted = IsAuthenticationFaulted(UserIdentity);
                if (isFaulted)
                {
                    response = new Response <SurveyResponse>
                    {
                        ResponseBody = new SuccessResponse <SurveyResponse>
                        {
                            Data            = null,
                            ResponseCode    = "E009",
                            ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again."
                        }
                    };

                    return(Unauthorized(response.ResponseBody));
                }

                if (!ModelState.IsValid)
                {
                    var requestResponse = ApiResponseFormatter.RequestResponse(ModelState);
                    return(BadRequest(requestResponse));
                }

                Survey survey;
                using (var _context = new MiniSurveyContext())
                {
                    survey = await _context.Surveys.Where(a => a.Id == request.Id).FirstOrDefaultAsync();

                    survey.Title       = request.Title;
                    survey.Description = request.Description;
                    await _context.SaveChangesAsync();
                }

                SurveyResponse surveyResponse = new SurveyResponse
                {
                    Id          = survey.Id,
                    Title       = survey.Title,
                    DateCreated = survey.DateCreated,
                    Description = survey.Description,
                    Status      = survey.Status
                };

                response = new Response <SurveyResponse>
                {
                    ResponseBody = new SuccessResponse <SurveyResponse>
                    {
                        Data            = surveyResponse,
                        ResponseCode    = "00",
                        ResponseMessage = "You have successfully updated the survey details."
                    }
                };


                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <SurveyResponse>
                {
                    ResponseBody = new SuccessResponse <SurveyResponse>
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
예제 #7
0
        public async Task <IActionResult> CreateSurvey([FromBody] SurveyRequest request)
        {
            Response <SurveyResponse> response = new Response <SurveyResponse>();

            try
            {
                var isFaulted = IsAuthenticationFaulted(UserIdentity);
                if (isFaulted)
                {
                    response = new Response <SurveyResponse>
                    {
                        ResponseBody = new SuccessResponse <SurveyResponse>
                        {
                            Data            = null,
                            ResponseCode    = "E009",
                            ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again."
                        }
                    };

                    return(Unauthorized(response.ResponseBody));
                }

                if (!ModelState.IsValid)
                {
                    var requestResponse = ApiResponseFormatter.RequestResponse(ModelState);
                    return(BadRequest(requestResponse));
                }

                Survey survey = new Survey
                {
                    DateCreated = DateTime.UtcNow,
                    Description = request.Description,
                    Status      = SurveyStatus.Open.ToString(),
                    Title       = request.Title
                };

                using (var _context = new MiniSurveyContext())
                {
                    _context.Surveys.Add(survey);
                    await _context.SaveChangesAsync();
                }

                SurveyResponse surveyResponse = new SurveyResponse
                {
                    Id          = survey.Id,
                    Title       = survey.Title,
                    DateCreated = survey.DateCreated,
                    Description = survey.Description,
                    Status      = survey.Status
                };

                response = new Response <SurveyResponse>
                {
                    ResponseBody = new SuccessResponse <SurveyResponse>
                    {
                        Data            = surveyResponse,
                        ResponseCode    = "00",
                        ResponseMessage = "You have successfully created a survey. Kindly proceed to add questions to the survey."
                    }
                };


                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <SurveyResponse>
                {
                    ResponseBody = new SuccessResponse <SurveyResponse>
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
예제 #8
0
        public async Task <IActionResult> Login([FromBody] LoginRequest request)
        {
            Response <RegisteredUserResponse> response = new Response <RegisteredUserResponse>();

            try
            {
                if (!ModelState.IsValid)
                {
                    var requestResponse = ApiResponseFormatter.RequestResponse(ModelState);
                    return(BadRequest(requestResponse));
                }

                User     userCredentials;
                DateTime dateRegistered;
                using (var _context = new MiniSurveyContext())
                {
                    userCredentials = await _context.Users.Where(x => x.EmailAddress == request.Email.Trim())
                                      .FirstOrDefaultAsync();
                }

                if (userCredentials == null)
                {
                    response = new Response <RegisteredUserResponse>
                    {
                        ResponseBody = new SuccessResponse <RegisteredUserResponse>
                        {
                            Data            = null,
                            ResponseCode    = "E001",
                            ResponseMessage = "Your email and password combination was incorrect, kindly try again later."
                        }
                    };
                    return(Unauthorized(response.ResponseBody));
                }

                bool isPassword = userCredentials != null && _cryptographyService.ValidateHash(request.Password, userCredentials.PasswordSalt, userCredentials.PasswordHash);
                if (!isPassword)
                {
                    response = new Response <RegisteredUserResponse>
                    {
                        ResponseBody = new SuccessResponse <RegisteredUserResponse>
                        {
                            Data            = null,
                            ResponseCode    = "E001",
                            ResponseMessage = "Your email and password combination was incorrect, kindly try again later."
                        }
                    };
                    return(Unauthorized(response.ResponseBody));
                }

                var identity = _jwtFactory.GenerateClaimsIdentity(userCredentials.EmailAddress, userCredentials.Id.ToString());
                var jwtToken = await ValueGenerator.GenerateJwt(identity, _jwtFactory, userCredentials.EmailAddress, _jwtOptions.Value, new JsonSerializerSettings { Formatting = Formatting.None });

                // deserialize generated auth token to be passed to client application.
                var authToken = JsonConvert.DeserializeObject <Token>(jwtToken);

                response = new Response <RegisteredUserResponse>
                {
                    ResponseBody = new SuccessResponse <RegisteredUserResponse>
                    {
                        Data = new RegisteredUserResponse {
                            User = new Dto.UserResponse {
                                Email = userCredentials.EmailAddress, Name = userCredentials.Name, DateRegistered = userCredentials.DateRegistered
                            }, Role = new DefaultResponse {
                                Id = userCredentials.RoleId, Value = HelperFunctions.GetRole(userCredentials.RoleId)
                            }
                        },
                        ResponseCode    = "00",
                        ResponseMessage = "You have been successfully enrolled to participate in the survey."
                    }
                };


                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <RegisteredUserResponse>
                {
                    ResponseBody = new SuccessResponse <RegisteredUserResponse>
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
 public HomeController(MiniSurveyContext db)
 {
     _db = db;
 }