Beispiel #1
0
        public Models.UserResponse CreateUser(Models.UserRequest value, long organization)
        {
            Models.UserResponse response = new Models.UserResponse();

            try
            {
                //SQL Statement
                var sqlString = "INSERT INTO users (id, first_name, description, organization, email_address, password, security_token, role, user_group, agreed_to_terms_and_policies, enabled, last_name) " +
                                "VALUES (@id, @first_name, @description, @organization, @email_address, @password, @security_token, @role, @user_group, @agreed_to_terms_and_policies, @enabled, @last_name)";

                //Create UNIX Timestamp
                var utcDateTime  = DateTime.UtcNow;
                var dto          = new DateTimeOffset(utcDateTime);
                var unixDateTime = dto.ToUnixTimeMilliseconds();

                var  random        = new Random();
                int  rnd           = random.Next(1000000000, 2000000000);
                long securityToken = unixDateTime - rnd;

                using (var connection = new NpgsqlConnection(connectionString))
                {
                    connection.Open();

                    using (var command = new NpgsqlCommand(sqlString, connection))
                    {
                        command.Parameters.AddWithValue("@id", NpgsqlTypes.NpgsqlDbType.Bigint, unixDateTime);
                        command.Parameters.AddWithValue("@first_name", NpgsqlTypes.NpgsqlDbType.Varchar, value.FirstName);
                        command.Parameters.AddWithValue("@last_name", NpgsqlTypes.NpgsqlDbType.Varchar, value.LastName);
                        command.Parameters.AddWithValue("@description", NpgsqlTypes.NpgsqlDbType.Varchar, value.UserDescription);
                        command.Parameters.AddWithValue("@organization", NpgsqlTypes.NpgsqlDbType.Bigint, organization);
                        command.Parameters.AddWithValue("@email_address", NpgsqlTypes.NpgsqlDbType.Varchar, value.UserEmailAddress);
                        command.Parameters.AddWithValue("@password", NpgsqlTypes.NpgsqlDbType.Varchar, value.UserPassword);
                        command.Parameters.AddWithValue("@security_token", NpgsqlTypes.NpgsqlDbType.Bigint, securityToken);
                        command.Parameters.AddWithValue("@role", NpgsqlTypes.NpgsqlDbType.Bigint, value.Role);
                        command.Parameters.AddWithValue("@user_group", NpgsqlTypes.NpgsqlDbType.Bigint, value.UserGroup);
                        command.Parameters.AddWithValue("@agreed_to_terms_and_policies", NpgsqlTypes.NpgsqlDbType.Bigint, value.AgreeToTermsAndPolicies);
                        command.Parameters.AddWithValue("@enabled", NpgsqlTypes.NpgsqlDbType.Bigint, value.Enabled);
                        command.Prepare();
                        command.ExecuteNonQuery();

                        //Log Success
                        response.Status        = "success";
                        response.Message       = "user created";
                        response.Id            = unixDateTime;
                        response.SecurityToken = securityToken;
                        return(response);
                    }
                }
            }
            catch (Exception ex)
            {
                //Log Exception
                //_logger.LogError(ex, "user creation failed");
                response.Status        = "error";
                response.Message       = "user creation failed";
                response.Id            = 0;
                response.SecurityToken = 0;
                return(response);
            }
        }
Beispiel #2
0
        public Models.UserResponse CreateUser(Models.UserRequest value, Guid organization)
        {
            Models.UserResponse response = new Models.UserResponse();

            try
            {
                //SQL Statement
                var sqlString = "INSERT INTO users (id, first_name, last_name, description, email_address, password, security_token, organization, primary_user, role, created, created_by) " +
                                "VALUES (@id, @first_name, @last_name, @description, @email_address, @password, @security_token, @organization, @primary_user, @role, @created, @created_by)";

                //Create a new User Id UUID
                Guid userIdGuid = Guid.NewGuid();
                //Create a new Security Token UUID
                Guid securityTokenGuid = Guid.NewGuid();

                using (var connection = new NpgsqlConnection(connectionString))
                {
                    connection.Open();

                    using (var command = new NpgsqlCommand(sqlString, connection))
                    {
                        command.Parameters.AddWithValue("@id", NpgsqlTypes.NpgsqlDbType.Uuid, userIdGuid);
                        command.Parameters.AddWithValue("@first_name", NpgsqlTypes.NpgsqlDbType.Text, value.FirstName);
                        command.Parameters.AddWithValue("@last_name", NpgsqlTypes.NpgsqlDbType.Text, value.LastName);
                        command.Parameters.AddWithValue("@description", NpgsqlTypes.NpgsqlDbType.Text, value.Description);
                        command.Parameters.AddWithValue("@email_address", NpgsqlTypes.NpgsqlDbType.Text, value.EmailAddress);
                        command.Parameters.AddWithValue("@password", NpgsqlTypes.NpgsqlDbType.Text, value.Password);
                        command.Parameters.AddWithValue("@security_token", NpgsqlTypes.NpgsqlDbType.Uuid, securityTokenGuid);
                        command.Parameters.AddWithValue("@organization", NpgsqlTypes.NpgsqlDbType.Uuid, organization);
                        command.Parameters.AddWithValue("@primary_user", NpgsqlTypes.NpgsqlDbType.Bigint, 0);
                        command.Parameters.AddWithValue("@role", NpgsqlTypes.NpgsqlDbType.Bigint, value.Role);
                        command.Parameters.AddWithValue("@created", NpgsqlTypes.NpgsqlDbType.TimestampTz, DateTime.UtcNow);
                        command.Parameters.AddWithValue("@created_by", NpgsqlTypes.NpgsqlDbType.Uuid, value.CreatedBy);
                        command.Prepare();
                        command.ExecuteNonQuery();

                        //Log Success
                        response.Status        = "success";
                        response.Message       = "user created";
                        response.Id            = userIdGuid;
                        response.SecurityToken = securityTokenGuid;
                        return(response);
                    }
                }
            }
            catch (Exception ex)
            {
                //Log Exception
                _logger.LogError(ex, "user creation failed");
                response.Status        = "error";
                response.Message       = "user creation failed";
                response.Id            = errorGuid;
                response.SecurityToken = errorGuid;
                return(response);
            }
        }
Beispiel #3
0
 public ActionResult Login(Models.UserResponse userResponse)
 {
     if (!ModelState.IsValid)
     {
         return(View());
     }
     else
     {
         return(View("Index"));
     }
 }
Beispiel #4
0
 public ActionResult Register(Models.UserResponse userResponse)
 {
     if (ModelState.IsValid)
     {
         return(View("Thanks", userResponse));
     }
     else
     {
         var school = new Entities();
         school.AddUser4(userResponse.UserEmail, userResponse.UserPassword, false);
         return(View());
     }
 }
Beispiel #5
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));
            }
        }