commit 436543c851d3d1f57306e9d3ac7644951e5fea3a Author: Anonymous Date: Wed Jan 29 18:11:32 2025 -0500 Initial commit diff --git a/app/models.py b/app/models.py new file mode 100644 index 0000000..45b26dd --- /dev/null +++ b/app/models.py @@ -0,0 +1,26 @@ +from banjo.models import Model, StringField, IntegerField +from fuzzywuzzy import fuzz + +class Riddle(Model): + question = StringField() + answer = StringField() + guesses = IntegerField() + correct = IntegerField() + MIN_SIMILARITY = 80 + + def to_dict(self, with_answer=True): + return { + "id": self.id, + "question": self.question, + "guesses": self.guesses, + "correct": self.correct, + } + + def check_guess(self, guess): + similarity = fuzz.ratio(guess, self.answer) + is_correct = (similarity >= self.MIN_SIMILARITY) + self.guesses += 1 + if is_correct: + self.correct+= 1 + self.save() + return is_correct diff --git a/app/views.py b/app/views.py new file mode 100644 index 0000000..ecb728a --- /dev/null +++ b/app/views.py @@ -0,0 +1,26 @@ +from banjo.urls import route_get, route_post +from banjo.http import NotFound +from app.models import Riddle + +@route_get('all', args={}) +def list_riddles(params): + riddles = Riddle.objects.all() + return {'riddles': [riddle.to_dict() for riddle in riddles]} + +@route_post('new', args={'question': str, 'answer': str}) +def create_riddle(params): + riddle = Riddle.from_dict(params) + riddle.save() + return riddle.to_dict() + +@route_post('guess', args={'id': int, "answer": str}) +def guess_answer(params): + try: + riddle = Riddle.objects.get(id=params['id']) + except Riddle.DoesNotExist: + raise NotFound("Riddle not found") + correct = riddle.check_guess(params['answer']) + return { + "guess": params['answer'], + "correct": correct, + }