Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #models.py
- class Question(db.Model):
- text = db.Column('text', db.String)
- class Choice(db.Model):
- text = db.Column('text', db.String)
- q_id = db.Column('q_id', db.Integer, db.ForeignKey(Question.id))
- question = db.relationship('Question', foreign_keys=q_id)
- #services.py
- class QuestionService(object):
- def __init__(self, question_repository, choice_repository):
- self.question_repository = question_repository
- self.choice_repository = choice_repository
- def create_question(self, payload):
- try:
- question = models.Question(text = payload['question'])
- question = self.question_repository.create(question)
- self.create_choices(payload['choices'], question.id)
- db.session.commit()
- except SQLALchemyError:
- db.session.rollback()
- def create_choices(self, choices, question_id):
- choices = [ models.Choice(text=choice_text, q_id=question_id)
- for choice_text in choices ]
- self.choice_repository.create_all(choices)
- def fetch_by_text(self, text):
- #called from views.py
- return self.question_repository.fetch_by_text(text)
- def fetch_by_id(self, id):
- #called from views.py
- question = self.question_repository.fetch(id)
- if not question:
- raise ResourceNotFound()
- return question
- #repositories.py
- from models import db
- class BaseRepository(object):
- def __init__(self, db=None):
- self.db = db
- def create(self, item):
- self.db.session.add(item)
- self.db.session.flush()
- return item
- def create_all(self, item):
- self.db.session.add_all(item)
- self.db.session.flush()
- return item
- class QuestionRepository(BaseRepository):
- def fetch(self, id):
- return self.session.query(Question).filter(Question.id == id).first()
- def fetch_by_text(self, text):
- return self.session.query(Question).filter(Question.text == text).all()
- class ChoiceRepository(BaseRepository):
- pass
Add Comment
Please, Sign In to add comment