예제 #1
0
def create_new_question(committer_id, question, commit_message):
    """Creates a new question.

    Args:
        committer_id: str. ID of the committer.
        question: Question. Question domain object.
        commit_message: str. A description of changes made to the question.
    """
    question.validate()
    model = question_models.QuestionModel(
        id=question.id,
        question_state_data=question.question_state_data.to_dict(),
        language_code=question.language_code,
        version=question.version,
        linked_skill_ids=question.linked_skill_ids,
        question_state_data_schema_version=(
            question.question_state_data_schema_version),
        inapplicable_skill_misconception_ids=(
            question.inapplicable_skill_misconception_ids))
    model.commit(committer_id, commit_message,
                 [{
                     'cmd': question_domain.CMD_CREATE_NEW
                 }])
    question.version += 1
    create_question_summary(question.id)
    opportunity_services.increment_question_counts(question.linked_skill_ids,
                                                   1)
예제 #2
0
def delete_question(
        committer_id, question_id, force_deletion=False):
    """Deletes the question with the given question_id.

    Args:
        committer_id: str. ID of the committer.
        question_id: str. ID of the question.
        force_deletion: bool. If true, the question and its history are fully
            deleted and are unrecoverable. Otherwise, the question and all
            its history are marked as deleted, but the corresponding models are
            still retained in the datastore. This last option is the preferred
            one.
    """
    question_model = question_models.QuestionModel.get(question_id)
    question_model.delete(
        committer_id, feconf.COMMIT_MESSAGE_QUESTION_DELETED,
        force_deletion=force_deletion)
    question_rights_model = question_models.QuestionRightsModel.get(
        question_id)
    question_rights_model.delete(
        committer_id, feconf.COMMIT_MESSAGE_QUESTION_DELETED,
        force_deletion=force_deletion)

    question_models.QuestionSummaryModel.get(question_id).delete()
    opportunity_services.increment_question_counts(
        question_model.linked_skill_ids, -1)
예제 #3
0
 def delete_question_model(question_id, committer_id, force_deletion):
     """Inner function that is to be done in a transaction."""
     question_model = question_models.QuestionModel.get_by_id(question_id)
     if question_model is not None:
         opportunity_services.increment_question_counts(
             question_model.linked_skill_ids, -1)
     question_models.QuestionModel.delete_multi(
         [question_id], committer_id,
         feconf.COMMIT_MESSAGE_QUESTION_DELETED,
         force_deletion=force_deletion)