from django.contrib import admin from .models import ( CheatFlag, Contest, ContestAnswer, ContestAttempt, ContestQuestion, LeaderboardSnapshot, MathGameAttempt, Question, QuestionVersion, RatingHistory, RealtimeMatch, ) class ContestQuestionInline(admin.TabularInline): model = ContestQuestion extra = 1 @admin.register(Contest) class ContestAdmin(admin.ModelAdmin): list_display = ("title", "kind", "track", "status", "starts_at", "ends_at") list_filter = ("kind", "track", "status") search_fields = ("title", "slug") list_editable = ("status",) ordering = ("-starts_at", "title") inlines = [ContestQuestionInline] @admin.register(ContestAttempt) class ContestAttemptAdmin(admin.ModelAdmin): list_display = ("id", "user", "contest", "status", "score", "duration_ms", "started_at") list_filter = ("status", "contest__kind", "contest__track") readonly_fields = ("started_at", "submitted_at") @admin.register(CheatFlag) class CheatFlagAdmin(admin.ModelAdmin): list_display = ("attempt", "reason", "status", "created_at") list_filter = ("status", "reason") search_fields = ("attempt__user__username", "attempt__user__nickname", "reason") list_editable = ("status",) ordering = ("-created_at",) @admin.register(Question) class QuestionAdmin(admin.ModelAdmin): list_display = ("slug", "track", "is_active", "tags") list_filter = ("track", "is_active") search_fields = ("slug", "versions__prompt") list_editable = ("is_active",) @admin.register(QuestionVersion) class QuestionVersionAdmin(admin.ModelAdmin): list_display = ("question", "version", "prompt", "created_at") search_fields = ("question__slug", "prompt", "answer") ordering = ("question", "-version") admin.site.register(ContestAnswer) admin.site.register(RatingHistory) admin.site.register(LeaderboardSnapshot) @admin.register(RealtimeMatch) class RealtimeMatchAdmin(admin.ModelAdmin): list_display = ( "id", "contest", "match_type", "challenge_code", "player_one", "player_two", "status", "created_at", ) list_filter = ("match_type", "status", "contest__track") search_fields = ( "challenge_code", "player_one__username", "player_two__username", ) readonly_fields = ("created_at", "started_at", "completed_at") ordering = ("-created_at",) @admin.register(MathGameAttempt) class MathGameAttemptAdmin(admin.ModelAdmin): list_display = ( "id", "user", "kind", "difficulty", "status", "score", "hints_used", "started_at", ) list_filter = ("kind", "difficulty", "status") search_fields = ("user__username", "user__nickname") readonly_fields = ("puzzle", "solution", "submission", "started_at", "submitted_at") ordering = ("-started_at",)