/// <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 }); } }
/// <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 }); } }