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)
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)
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)