Ejemplo n.º 1
0
        /// <summary>
        /// Pomocnicza metoda wywoływana w 'SubmitResponse' usuwająca wpis dla podanej ankiety i podanego użytkownika z tabeli 'Pending'.
        /// </summary>
        private static OperationResult CompleteQuestionnaire(int questId, string userName)
        {
            var userId       = AccountService.GetUser(userName).Id;
            var queryBuilder = new StringBuilder();
            var userCompare  = new SQL.LogicComparison()
            {
                LeftOperand = Constants.USERS_USERID_FIELD, RightOperand = userId, Operator = SQL.LogicOperator.Equal
            };
            var questCompare = new SQL.LogicComparison()
            {
                LeftOperand = Constants.QUEST_QUESTID_FIELD, RightOperand = questId, Operator = SQL.LogicOperator.Equal
            };

            queryBuilder.Append(
                $"{SQL.Delete}{Constants.PENDING_TABLE_NAME} {SQL.Where}" +
                SQL.MultipleCriteria(new Dictionary <SQL.LogicComparison, SQL.CriteriaConnector>()
            {
                { userCompare, SQL.CriteriaConnector.AND },
                { questCompare, SQL.CriteriaConnector.NULL }
            })
                );

            try
            {
                var dataAccessor = DataAccess.Instance;
                dataAccessor.ExecuteSqlQuery(queryBuilder.ToString());

                return(new OperationResult()
                {
                    Status = OperationStatus.Success,
                    Message = Constants.ResponseSubmittedMsg
                });
            }
            catch (Exception ex)
            {
                return(new OperationResult()
                {
                    Status = OperationStatus.Failed,
                    Message = ex.Message
                });
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Zwraca listę odpowiedzi na podaną ankietę przesłane przez podanego użytkownika, po uprzedniej weryfikacji hasłem.
        /// </summary>
        internal static OperationResult GetAnswers(int questId, string userName, string passCode)
        {
            var user = AccountService.GetUser(userName);

            if (!CryptoService.VerifyPassword(passCode, user.Password))
            {
                return(new OperationResult()
                {
                    Status = OperationStatus.Failed,
                    Message = Constants.IncorrectPasswordMsg
                });
            }

            var signature    = CryptoService.GenerateSignature(userName, passCode);
            var questCompare = new SQL.LogicComparison()
            {
                LeftOperand = $"A.{Constants.QUEST_QUESTID_FIELD}", RightOperand = questId, Operator = SQL.LogicOperator.Equal
            };
            var keyCompare = new SQL.LogicComparison()
            {
                LeftOperand = $"A.{Constants.ANSWERS_SIGNATURE_FIELD}", RightOperand = signature, Operator = SQL.LogicOperator.Equal
            };

            var queryBuilder = new StringBuilder();

            queryBuilder.Append(
                $"{SQL.Select} " +
                $"A.{Constants.QUESTIONS_QUESTIONID_FIELD}, " +
                $"A.{Constants.QUEST_QUESTID_FIELD}, " +
                $"B.{Constants.QUESTIONS_CONTENT_FIELD}, " +
                $"A.{Constants.ANSWERS_SIGNATURE_FIELD}, " +
                $"A.{Constants.ANSWERS_ANSWER_FIELD} " +
                $"{SQL.From} {Constants.ANSWERS_TABLE_NAME} A {SQL.Join} {Constants.QUESTIONS_TABLE_NAME} B {SQL.On} " +
                $"A.{Constants.QUESTIONS_QUESTIONID_FIELD} = B.{Constants.QUESTIONS_QUESTIONID_FIELD} {SQL.Where} " +
                SQL.MultipleCriteria(new Dictionary <SQL.LogicComparison, SQL.CriteriaConnector>()
            {
                { questCompare, SQL.CriteriaConnector.AND },
                { keyCompare, SQL.CriteriaConnector.NULL }
            })
                );

            try
            {
                var dataAccessor = DataAccess.Instance;
                var answersTable = dataAccessor.GetDataTableFromQuery(queryBuilder.ToString());
                var dataRows     = answersTable?.Rows.Count > 0 ? answersTable.Rows : null;

                if (dataRows == null)
                {
                    return(new OperationResult()
                    {
                        Status = OperationStatus.Failed,
                        Message = Constants.GetAnswersFailedMsg
                    });
                }
                else
                {
                    var answers = new List <Answer>();
                    foreach (DataRow row in dataRows)
                    {
                        answers.Add(new Answer()
                        {
                            QuestionId = int.Parse(row[Constants.QUESTIONS_QUESTIONID_FIELD].ToString()),
                            Content    = row[Constants.QUESTIONS_CONTENT_FIELD].ToString(),
                            Response   = int.Parse(row[Constants.ANSWERS_ANSWER_FIELD].ToString()) == 0 ? false : true
                        });
                    }

                    return(new OperationResult()
                    {
                        Status = OperationStatus.Success,
                        Message = string.Empty,
                        Payload = answers
                    });
                }
            }
            catch (Exception ex)
            {
                return(new OperationResult()
                {
                    Status = OperationStatus.Failed,
                    Message = ex.Message
                });
            }
        }