Add pinball scores table and API route
This commit is contained in:
parent
e40383c0fd
commit
832a29f0c5
|
@ -188,6 +188,18 @@ class Usage(models.Model):
|
||||||
|
|
||||||
history = HistoricalRecords(excluded_fields=['num_reports'])
|
history = HistoricalRecords(excluded_fields=['num_reports'])
|
||||||
|
|
||||||
|
class PinballScore(models.Model):
|
||||||
|
user = models.ForeignKey(User, related_name='scores', blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
|
|
||||||
|
started_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
finished_at = models.DateTimeField(null=True)
|
||||||
|
|
||||||
|
game_id = models.IntegerField()
|
||||||
|
player = models.IntegerField()
|
||||||
|
score = models.IntegerField()
|
||||||
|
|
||||||
|
# no history
|
||||||
|
|
||||||
class HistoryIndex(models.Model):
|
class HistoryIndex(models.Model):
|
||||||
content_type = models.ForeignKey(ContentType, null=True, on_delete=models.SET_NULL)
|
content_type = models.ForeignKey(ContentType, null=True, on_delete=models.SET_NULL)
|
||||||
object_id = models.PositiveIntegerField()
|
object_id = models.PositiveIntegerField()
|
||||||
|
|
|
@ -1250,6 +1250,54 @@ class ProtocoinViewSet(Base):
|
||||||
return Response(res)
|
return Response(res)
|
||||||
|
|
||||||
|
|
||||||
|
class PinballViewSet(Base):
|
||||||
|
@action(detail=False, methods=['post'])
|
||||||
|
def score(self, request):
|
||||||
|
auth_token = request.META.get('HTTP_AUTHORIZATION', '')
|
||||||
|
if secrets.PINBALL_API_TOKEN and auth_token != 'Bearer ' + secrets.PINBALL_API_TOKEN:
|
||||||
|
raise exceptions.PermissionDenied()
|
||||||
|
|
||||||
|
card_number = request.data.get('card_number', None)
|
||||||
|
|
||||||
|
if card_number:
|
||||||
|
card = get_object_or_404(models.Card, card_number=card_number)
|
||||||
|
user = card.user
|
||||||
|
else:
|
||||||
|
user = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
game_id = int(request.data['game_id'])
|
||||||
|
except KeyError:
|
||||||
|
raise exceptions.ValidationError(dict(game_id='This field is required.'))
|
||||||
|
except ValueError:
|
||||||
|
raise exceptions.ValidationError(dict(game_id='Invalid number.'))
|
||||||
|
|
||||||
|
try:
|
||||||
|
player = int(request.data['player'])
|
||||||
|
except KeyError:
|
||||||
|
raise exceptions.ValidationError(dict(player='This field is required.'))
|
||||||
|
except ValueError:
|
||||||
|
raise exceptions.ValidationError(dict(player='Invalid number.'))
|
||||||
|
|
||||||
|
try:
|
||||||
|
score = int(request.data['score'])
|
||||||
|
except KeyError:
|
||||||
|
raise exceptions.ValidationError(dict(score='This field is required.'))
|
||||||
|
except ValueError:
|
||||||
|
raise exceptions.ValidationError(dict(score='Invalid number.'))
|
||||||
|
|
||||||
|
_ = models.PinballScore.objects.update_or_create(
|
||||||
|
game_id=game_id,
|
||||||
|
player=player,
|
||||||
|
defaults=dict(
|
||||||
|
user=user,
|
||||||
|
score=score,
|
||||||
|
finished_at=now(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
return Response(200)
|
||||||
|
|
||||||
class RegistrationView(RegisterView):
|
class RegistrationView(RegisterView):
|
||||||
serializer_class = serializers.MyRegisterSerializer
|
serializer_class = serializers.MyRegisterSerializer
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,12 @@ DOOR_API_TOKEN = ''
|
||||||
# head /dev/urandom | base32 | head -c 40
|
# head /dev/urandom | base32 | head -c 40
|
||||||
VEND_API_TOKEN = ''
|
VEND_API_TOKEN = ''
|
||||||
|
|
||||||
|
# Pinball machine score API token
|
||||||
|
# Set this to random characters
|
||||||
|
# For example, use the output of this:
|
||||||
|
# head /dev/urandom | base32 | head -c 40
|
||||||
|
PINBALL_API_TOKEN = ''
|
||||||
|
|
||||||
# Protospace general info
|
# Protospace general info
|
||||||
DOOR_CODE = ''
|
DOOR_CODE = ''
|
||||||
WIFI_PASS = ''
|
WIFI_PASS = ''
|
||||||
|
|
|
@ -19,6 +19,7 @@ router.register(r'members', views.MemberViewSet, basename='members')
|
||||||
router.register(r'courses', views.CourseViewSet, basename='course')
|
router.register(r'courses', views.CourseViewSet, basename='course')
|
||||||
router.register(r'history', views.HistoryViewSet, basename='history')
|
router.register(r'history', views.HistoryViewSet, basename='history')
|
||||||
router.register(r'vetting', views.VettingViewSet, basename='vetting')
|
router.register(r'vetting', views.VettingViewSet, basename='vetting')
|
||||||
|
router.register(r'pinball', views.PinballViewSet, basename='pinball')
|
||||||
router.register(r'sessions', views.SessionViewSet, basename='session')
|
router.register(r'sessions', views.SessionViewSet, basename='session')
|
||||||
router.register(r'training', views.TrainingViewSet, basename='training')
|
router.register(r'training', views.TrainingViewSet, basename='training')
|
||||||
router.register(r'interest', views.InterestViewSet, basename='interest')
|
router.register(r'interest', views.InterestViewSet, basename='interest')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user