diff --git a/apiserver/apiserver/api/views.py b/apiserver/apiserver/api/views.py index bbcbfec..aae21de 100644 --- a/apiserver/apiserver/api/views.py +++ b/apiserver/apiserver/api/views.py @@ -1345,6 +1345,23 @@ class PinballViewSet(Base): ) return Response(res) + @action(detail=False, methods=['get']) + def high_scores(self, request): + members = models.Member.objects.all() + members = members.annotate( + pinball_score=Max('user__scores__score'), + ).exclude(pinball_score__isnull=True).order_by('-pinball_score')[:5] + + scores = [] + + for member in members: + scores.append(dict( + name=member.preferred_name + ' ' + member.last_name[0], + score=member.pinball_score, + )) + + return Response(scores) + class RegistrationView(RegisterView): serializer_class = serializers.MyRegisterSerializer diff --git a/webclient/src/Debug.js b/webclient/src/Debug.js index ce62fc4..de288af 100644 --- a/webclient/src/Debug.js +++ b/webclient/src/Debug.js @@ -26,6 +26,8 @@ export function Debug(props) {
Trotec Usage
+LCARS1 Display
+ ); diff --git a/webclient/src/Display.js b/webclient/src/Display.js index 471cbc4..bb1bf62 100644 --- a/webclient/src/Display.js +++ b/webclient/src/Display.js @@ -34,7 +34,9 @@ export function LCARS1Display(props) { } - +- Waiting for job -
- > ++ Waiting for job +
} > ); }; + +export function DisplayScores(props) { + const { token, name } = props; + const [scores, setScores] = useState(false); + + const getScores = () => { + requester('/pinball/high_scores/', 'GET') + .then(res => { + setScores(res); + }) + .catch(err => { + console.log(err); + setScores(false); + }); + }; + + useEffect(() => { + getScores(); + const interval = setInterval(getScores, 60000); + return () => clearInterval(interval); + }, []); + + return ( + <> +{x.score.toLocaleString()}
+