Compare commits

...
2 Commits
10 changed files with 292 additions and 66 deletions
+5 -5
View File
@@ -54,8 +54,8 @@ def current_state(request: HttpRequest, event_path: str):
def my_stats(request: HttpRequest, event_path: str):
ranked = list(
ranked_players(request.event)
.values("id", "points", "rank")
.order_by("-points", "id")
.values("id", "clock_points", "rank")
.order_by("-clock_points", "id")
)
total_players = len(ranked)
my_index = next(
@@ -71,9 +71,9 @@ def my_stats(request: HttpRequest, event_path: str):
)
return {
"points": mine["points"] if mine else 0.0,
"points": mine["clock_points"] if mine else 0.0,
"rank": mine["rank"] if mine else total_players,
"total_players": total_players,
"points_above": above["points"] if above else None,
"points_below": below["points"] if below else None,
"points_above": above["clock_points"] if above else None,
"points_below": below["clock_points"] if below else None,
}
+4 -3
View File
@@ -22,7 +22,8 @@ def _press_points_expression():
def ranked_players(event: Event):
"""All users annotated with their live total points for this event and
"""All users annotated with their live total `clock_points` (not `points`,
that one is the market balance field on CustomUser) for this event and
DB-computed RANK(). Points only ever come from presses made in `event` -
a player's history in another event never leaks into this leaderboard."""
from accounts.models import CustomUser
@@ -32,6 +33,6 @@ def ranked_players(event: Event):
Value(0.0),
output_field=FloatField(),
)
return CustomUser.objects.annotate(points=points).annotate(
rank=Window(expression=Rank(), order_by=F("points").desc())
return CustomUser.objects.annotate(clock_points=points).annotate(
rank=Window(expression=Rank(), order_by=F("clock_points").desc())
)
+3 -1
View File
@@ -239,7 +239,9 @@ def get_leaderboard(request: HttpRequest, event_path: str):
return data
@router.post(f"{PREFIX}/submit", response={200: NoitaSubmissionOut, 400: dict})
@router.post(
f"{PREFIX}/submit", response={200: NoitaSubmissionOut, 400: dict, 500: dict}
)
@decorate_view(require_game_enabled(NOITA_APP_ID))
def submit_log_file(
request: HttpRequest, event_path: str, file: UploadedFile = File(...)
+20 -6
View File
@@ -73,7 +73,9 @@ def get_submission(request, event_path: str, submission_id: str):
)
@router.post(f"{PREFIX}/submissions", response=SubmissionOut)
@router.post(
f"{PREFIX}/submissions", response={200: SubmissionOut, 400: dict, 500: dict}
)
@decorate_view(require_game_enabled(OPUS_MAGNUM_APP_ID))
def create_submission(
request, event_path: str, data: SubmissionIn, files: List[UploadedFile] = File(...)
@@ -211,7 +213,10 @@ def create_submission(
return 500, {"detail": f"Error creating submission: {str(e)}"}
@router.put(f"{PREFIX}/responses/{{response_id}}/validate", response=PuzzleResponseOut)
@router.put(
f"{PREFIX}/responses/{{response_id}}/validate",
response={200: PuzzleResponseOut, 403: dict},
)
@decorate_view(require_game_enabled(OPUS_MAGNUM_APP_ID))
def validate_response(request, event_path: str, response_id: int, data: ValidationIn):
"""Manually validate a puzzle response"""
@@ -252,7 +257,8 @@ def validate_response(request, event_path: str, response_id: int, data: Validati
@router.put(
f"{PREFIX}/responses/{{response_id}}/validate/auto", response=PuzzleResponseOut
f"{PREFIX}/responses/{{response_id}}/validate/auto",
response={200: PuzzleResponseOut, 403: dict},
)
@decorate_view(require_game_enabled(OPUS_MAGNUM_APP_ID))
def validate_auto(request, event_path: str, response_id: int):
@@ -271,7 +277,10 @@ def validate_auto(request, event_path: str, response_id: int):
return response
@router.get(f"{PREFIX}/responses/needs-validation", response=List[PuzzleResponseOut])
@router.get(
f"{PREFIX}/responses/needs-validation",
response={200: List[PuzzleResponseOut], 403: dict},
)
@decorate_view(require_game_enabled(OPUS_MAGNUM_APP_ID))
def list_responses_needing_validation(request, event_path: str):
"""Get all responses that need manual validation"""
@@ -289,7 +298,10 @@ def list_responses_needing_validation(request, event_path: str):
)
@router.post(f"{PREFIX}/submissions/{{submission_id}}/validate", response=SubmissionOut)
@router.post(
f"{PREFIX}/submissions/{{submission_id}}/validate",
response={200: SubmissionOut, 403: dict},
)
@decorate_view(require_game_enabled(OPUS_MAGNUM_APP_ID))
def validate_submission(request, event_path: str, submission_id: str):
"""Mark entire submission as validated"""
@@ -318,7 +330,9 @@ def validate_submission(request, event_path: str, submission_id: str):
return submission
@router.delete(f"{PREFIX}/submissions/{{submission_id}}")
@router.delete(
f"{PREFIX}/submissions/{{submission_id}}", response={200: dict, 403: dict}
)
@decorate_view(require_game_enabled(OPUS_MAGNUM_APP_ID))
def delete_submission(request, event_path: str, submission_id: str):
"""Delete a submission (admin only)"""
+2 -2
View File
@@ -57,14 +57,14 @@ api.add_router("", market_router, tags=["market"])
# Health check endpoint
@api.get("/health")
@api.get("/health", response=dict)
def health_check(request):
"""Health check endpoint"""
return {"status": "healthy", "service": "polylan-submitter-api"}
# Cache management endpoint
@api.post("/cache/clear")
@api.post("/cache/clear", response={200: dict, 403: dict})
def clear_cache(request: HttpRequest, event_path: str | None = None):
"""Clear API caches (admin only). Pass event_path to clear just that event's keys."""
if not request.user.is_authenticated or not request.user.is_staff:
@@ -4,7 +4,7 @@ import { type DefaultError, type InfiniteData, infiniteQueryOptions, queryOption
import { client } from '../client.gen';
import { animationsApiPuzzleResults, animationsApiResults, animationsApiTopSubmissions, clockApiCurrentState, clockApiMyStats, gamesApiListEventGames, gamesApiListEventSteamGames, gamesApiListGames, marketApiBetHistory, marketApiCloseMarket, marketApiCreateBet, marketApiGetUserPoints, marketApiListMarkets, marketApiListUserBets, marketApiResolveMarket, noitaApiGetLeaderboard, noitaApiGetResults, noitaApiSubmitLogFile, type Options, opusMagnumApiCreateSubmission, opusMagnumApiDeleteSubmission, opusMagnumApiGetCollection, opusMagnumApiGetStats, opusMagnumApiGetSubmission, opusMagnumApiListPuzzles, opusMagnumApiListResponsesNeedingValidation, opusMagnumApiListSubmissions, opusMagnumApiValidateAuto, opusMagnumApiValidateResponse, opusMagnumApiValidateSubmission, placeApiCanvas, placeApiEvolutionGif, polylanSubmitterApiClearCache, polylanSubmitterApiGetUserInfo, polylanSubmitterApiHealthCheck, submissionsApiCreateImageCrop, submissionsApiCreateSubmission, submissionsApiDeleteImageCrop, submissionsApiGetSubmission, submissionsApiListAvailableScopes, submissionsApiListMyScopes, submissionsApiListSubmissionsByGame, submissionsApiListUserSubmissions, submissionsApiProcessCropOcr, submissionsApiProcessFileOcr, submissionsApiStopSyncScopes, submissionsApiSyncScopes, submissionsApiSyncScopesStatus } from '../sdk.gen';
import type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponse, AnimationsApiResultsData, AnimationsApiResultsResponse, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponse, ClockApiCurrentStateData, ClockApiCurrentStateResponse, ClockApiMyStatsData, ClockApiMyStatsResponse, GamesApiListEventGamesData, GamesApiListEventGamesResponse, GamesApiListEventSteamGamesData, GamesApiListEventSteamGamesResponse, GamesApiListGamesData, GamesApiListGamesResponse, MarketApiBetHistoryData, MarketApiBetHistoryResponse, MarketApiCloseMarketData, MarketApiCreateBetData, MarketApiCreateBetResponse, MarketApiGetUserPointsData, MarketApiGetUserPointsResponse, MarketApiListMarketsData, MarketApiListMarketsResponse, MarketApiListUserBetsData, MarketApiListUserBetsResponse, MarketApiResolveMarketData, MarketApiResolveMarketResponse, NoitaApiGetLeaderboardData, NoitaApiGetLeaderboardResponse, NoitaApiGetResultsData, NoitaApiGetResultsResponse, NoitaApiSubmitLogFileData, NoitaApiSubmitLogFileError, NoitaApiSubmitLogFileResponse, OpusMagnumApiCreateSubmissionData, OpusMagnumApiCreateSubmissionResponse, OpusMagnumApiDeleteSubmissionData, OpusMagnumApiGetCollectionData, OpusMagnumApiGetCollectionResponse, OpusMagnumApiGetStatsData, OpusMagnumApiGetSubmissionData, OpusMagnumApiGetSubmissionResponse, OpusMagnumApiListPuzzlesData, OpusMagnumApiListPuzzlesResponse, OpusMagnumApiListResponsesNeedingValidationData, OpusMagnumApiListResponsesNeedingValidationResponse, OpusMagnumApiListSubmissionsData, OpusMagnumApiListSubmissionsResponse, OpusMagnumApiValidateAutoData, OpusMagnumApiValidateAutoResponse, OpusMagnumApiValidateResponseData, OpusMagnumApiValidateResponseResponse, OpusMagnumApiValidateSubmissionData, OpusMagnumApiValidateSubmissionResponse, PlaceApiCanvasData, PlaceApiEvolutionGifData, PolylanSubmitterApiClearCacheData, PolylanSubmitterApiGetUserInfoData, PolylanSubmitterApiGetUserInfoResponse, PolylanSubmitterApiHealthCheckData, SubmissionsApiCreateImageCropData, SubmissionsApiCreateImageCropResponse, SubmissionsApiCreateSubmissionData, SubmissionsApiCreateSubmissionError, SubmissionsApiCreateSubmissionResponse, SubmissionsApiDeleteImageCropData, SubmissionsApiDeleteImageCropResponse, SubmissionsApiGetSubmissionData, SubmissionsApiGetSubmissionResponse, SubmissionsApiListAvailableScopesData, SubmissionsApiListAvailableScopesError, SubmissionsApiListAvailableScopesResponse, SubmissionsApiListMyScopesData, SubmissionsApiListMyScopesError, SubmissionsApiListMyScopesResponse, SubmissionsApiListSubmissionsByGameData, SubmissionsApiListSubmissionsByGameResponse, SubmissionsApiListUserSubmissionsData, SubmissionsApiListUserSubmissionsError, SubmissionsApiListUserSubmissionsResponse, SubmissionsApiProcessCropOcrData, SubmissionsApiProcessCropOcrResponse, SubmissionsApiProcessFileOcrData, SubmissionsApiProcessFileOcrResponse, SubmissionsApiStopSyncScopesData, SubmissionsApiStopSyncScopesError, SubmissionsApiStopSyncScopesResponse, SubmissionsApiSyncScopesData, SubmissionsApiSyncScopesError, SubmissionsApiSyncScopesResponse, SubmissionsApiSyncScopesStatusData, SubmissionsApiSyncScopesStatusError, SubmissionsApiSyncScopesStatusResponse } from '../types.gen';
import type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponse, AnimationsApiResultsData, AnimationsApiResultsResponse, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponse, ClockApiCurrentStateData, ClockApiCurrentStateResponse, ClockApiMyStatsData, ClockApiMyStatsResponse, GamesApiListEventGamesData, GamesApiListEventGamesResponse, GamesApiListEventSteamGamesData, GamesApiListEventSteamGamesResponse, GamesApiListGamesData, GamesApiListGamesResponse, MarketApiBetHistoryData, MarketApiBetHistoryResponse, MarketApiCloseMarketData, MarketApiCreateBetData, MarketApiCreateBetResponse, MarketApiGetUserPointsData, MarketApiGetUserPointsResponse, MarketApiListMarketsData, MarketApiListMarketsResponse, MarketApiListUserBetsData, MarketApiListUserBetsResponse, MarketApiResolveMarketData, MarketApiResolveMarketResponse, NoitaApiGetLeaderboardData, NoitaApiGetLeaderboardResponse, NoitaApiGetResultsData, NoitaApiGetResultsResponse, NoitaApiSubmitLogFileData, NoitaApiSubmitLogFileError, NoitaApiSubmitLogFileResponse, OpusMagnumApiCreateSubmissionData, OpusMagnumApiCreateSubmissionError, OpusMagnumApiCreateSubmissionResponse, OpusMagnumApiDeleteSubmissionData, OpusMagnumApiDeleteSubmissionError, OpusMagnumApiDeleteSubmissionResponse, OpusMagnumApiGetCollectionData, OpusMagnumApiGetCollectionResponse, OpusMagnumApiGetStatsData, OpusMagnumApiGetSubmissionData, OpusMagnumApiGetSubmissionResponse, OpusMagnumApiListPuzzlesData, OpusMagnumApiListPuzzlesResponse, OpusMagnumApiListResponsesNeedingValidationData, OpusMagnumApiListResponsesNeedingValidationError, OpusMagnumApiListResponsesNeedingValidationResponse, OpusMagnumApiListSubmissionsData, OpusMagnumApiListSubmissionsResponse, OpusMagnumApiValidateAutoData, OpusMagnumApiValidateAutoError, OpusMagnumApiValidateAutoResponse, OpusMagnumApiValidateResponseData, OpusMagnumApiValidateResponseError, OpusMagnumApiValidateResponseResponse, OpusMagnumApiValidateSubmissionData, OpusMagnumApiValidateSubmissionError, OpusMagnumApiValidateSubmissionResponse, PlaceApiCanvasData, PlaceApiEvolutionGifData, PolylanSubmitterApiClearCacheData, PolylanSubmitterApiClearCacheError, PolylanSubmitterApiClearCacheResponse, PolylanSubmitterApiGetUserInfoData, PolylanSubmitterApiGetUserInfoResponse, PolylanSubmitterApiHealthCheckData, PolylanSubmitterApiHealthCheckResponse, SubmissionsApiCreateImageCropData, SubmissionsApiCreateImageCropError, SubmissionsApiCreateImageCropResponse, SubmissionsApiCreateSubmissionData, SubmissionsApiCreateSubmissionError, SubmissionsApiCreateSubmissionResponse, SubmissionsApiDeleteImageCropData, SubmissionsApiDeleteImageCropError, SubmissionsApiDeleteImageCropResponse, SubmissionsApiGetSubmissionData, SubmissionsApiGetSubmissionError, SubmissionsApiGetSubmissionResponse, SubmissionsApiListAvailableScopesData, SubmissionsApiListAvailableScopesError, SubmissionsApiListAvailableScopesResponse, SubmissionsApiListMyScopesData, SubmissionsApiListMyScopesError, SubmissionsApiListMyScopesResponse, SubmissionsApiListSubmissionsByGameData, SubmissionsApiListSubmissionsByGameError, SubmissionsApiListSubmissionsByGameResponse, SubmissionsApiListUserSubmissionsData, SubmissionsApiListUserSubmissionsError, SubmissionsApiListUserSubmissionsResponse, SubmissionsApiProcessCropOcrData, SubmissionsApiProcessCropOcrError, SubmissionsApiProcessCropOcrResponse, SubmissionsApiProcessFileOcrData, SubmissionsApiProcessFileOcrError, SubmissionsApiProcessFileOcrResponse, SubmissionsApiStopSyncScopesData, SubmissionsApiStopSyncScopesError, SubmissionsApiStopSyncScopesResponse, SubmissionsApiSyncScopesData, SubmissionsApiSyncScopesError, SubmissionsApiSyncScopesResponse, SubmissionsApiSyncScopesStatusData, SubmissionsApiSyncScopesStatusError, SubmissionsApiSyncScopesStatusResponse } from '../types.gen';
export type QueryKey<TOptions extends Options> = [
Pick<TOptions, 'baseUrl' | 'body' | 'headers' | 'path' | 'query'> & {
@@ -46,7 +46,7 @@ export const polylanSubmitterApiHealthCheckQueryKey = (options?: Options<Polylan
*
* Health check endpoint
*/
export const polylanSubmitterApiHealthCheckOptions = (options?: Options<PolylanSubmitterApiHealthCheckData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof polylanSubmitterApiHealthCheckQueryKey>>({
export const polylanSubmitterApiHealthCheckOptions = (options?: Options<PolylanSubmitterApiHealthCheckData>) => queryOptions<PolylanSubmitterApiHealthCheckResponse, DefaultError, PolylanSubmitterApiHealthCheckResponse, ReturnType<typeof polylanSubmitterApiHealthCheckQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
const { data } = await polylanSubmitterApiHealthCheck({
...options,
@@ -64,8 +64,8 @@ export const polylanSubmitterApiHealthCheckOptions = (options?: Options<PolylanS
*
* Clear API caches (admin only). Pass event_path to clear just that event's keys.
*/
export const polylanSubmitterApiClearCacheMutation = (options?: Partial<Options<PolylanSubmitterApiClearCacheData>>): UseMutationOptions<unknown, DefaultError, Options<PolylanSubmitterApiClearCacheData>> => {
const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<PolylanSubmitterApiClearCacheData>> = {
export const polylanSubmitterApiClearCacheMutation = (options?: Partial<Options<PolylanSubmitterApiClearCacheData>>): UseMutationOptions<PolylanSubmitterApiClearCacheResponse, PolylanSubmitterApiClearCacheError, Options<PolylanSubmitterApiClearCacheData>> => {
const mutationOptions: UseMutationOptions<PolylanSubmitterApiClearCacheResponse, PolylanSubmitterApiClearCacheError, Options<PolylanSubmitterApiClearCacheData>> = {
mutationFn: async (fnOptions) => {
const { data } = await polylanSubmitterApiClearCache({
...options,
@@ -239,8 +239,8 @@ export const opusMagnumApiListSubmissionsInfiniteOptions = (options: Options<Opu
*
* Create a new submission with multiple puzzle responses
*/
export const opusMagnumApiCreateSubmissionMutation = (options?: Partial<Options<OpusMagnumApiCreateSubmissionData>>): UseMutationOptions<OpusMagnumApiCreateSubmissionResponse, DefaultError, Options<OpusMagnumApiCreateSubmissionData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiCreateSubmissionResponse, DefaultError, Options<OpusMagnumApiCreateSubmissionData>> = {
export const opusMagnumApiCreateSubmissionMutation = (options?: Partial<Options<OpusMagnumApiCreateSubmissionData>>): UseMutationOptions<OpusMagnumApiCreateSubmissionResponse, OpusMagnumApiCreateSubmissionError, Options<OpusMagnumApiCreateSubmissionData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiCreateSubmissionResponse, OpusMagnumApiCreateSubmissionError, Options<OpusMagnumApiCreateSubmissionData>> = {
mutationFn: async (fnOptions) => {
const { data } = await opusMagnumApiCreateSubmission({
...options,
@@ -258,8 +258,8 @@ export const opusMagnumApiCreateSubmissionMutation = (options?: Partial<Options<
*
* Delete a submission (admin only)
*/
export const opusMagnumApiDeleteSubmissionMutation = (options?: Partial<Options<OpusMagnumApiDeleteSubmissionData>>): UseMutationOptions<unknown, DefaultError, Options<OpusMagnumApiDeleteSubmissionData>> => {
const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<OpusMagnumApiDeleteSubmissionData>> = {
export const opusMagnumApiDeleteSubmissionMutation = (options?: Partial<Options<OpusMagnumApiDeleteSubmissionData>>): UseMutationOptions<OpusMagnumApiDeleteSubmissionResponse, OpusMagnumApiDeleteSubmissionError, Options<OpusMagnumApiDeleteSubmissionData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiDeleteSubmissionResponse, OpusMagnumApiDeleteSubmissionError, Options<OpusMagnumApiDeleteSubmissionData>> = {
mutationFn: async (fnOptions) => {
const { data } = await opusMagnumApiDeleteSubmission({
...options,
@@ -297,8 +297,8 @@ export const opusMagnumApiGetSubmissionOptions = (options: Options<OpusMagnumApi
*
* Manually validate a puzzle response
*/
export const opusMagnumApiValidateResponseMutation = (options?: Partial<Options<OpusMagnumApiValidateResponseData>>): UseMutationOptions<OpusMagnumApiValidateResponseResponse, DefaultError, Options<OpusMagnumApiValidateResponseData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiValidateResponseResponse, DefaultError, Options<OpusMagnumApiValidateResponseData>> = {
export const opusMagnumApiValidateResponseMutation = (options?: Partial<Options<OpusMagnumApiValidateResponseData>>): UseMutationOptions<OpusMagnumApiValidateResponseResponse, OpusMagnumApiValidateResponseError, Options<OpusMagnumApiValidateResponseData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiValidateResponseResponse, OpusMagnumApiValidateResponseError, Options<OpusMagnumApiValidateResponseData>> = {
mutationFn: async (fnOptions) => {
const { data } = await opusMagnumApiValidateResponse({
...options,
@@ -316,8 +316,8 @@ export const opusMagnumApiValidateResponseMutation = (options?: Partial<Options<
*
* Try to auto validate a puzzle response
*/
export const opusMagnumApiValidateAutoMutation = (options?: Partial<Options<OpusMagnumApiValidateAutoData>>): UseMutationOptions<OpusMagnumApiValidateAutoResponse, DefaultError, Options<OpusMagnumApiValidateAutoData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiValidateAutoResponse, DefaultError, Options<OpusMagnumApiValidateAutoData>> = {
export const opusMagnumApiValidateAutoMutation = (options?: Partial<Options<OpusMagnumApiValidateAutoData>>): UseMutationOptions<OpusMagnumApiValidateAutoResponse, OpusMagnumApiValidateAutoError, Options<OpusMagnumApiValidateAutoData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiValidateAutoResponse, OpusMagnumApiValidateAutoError, Options<OpusMagnumApiValidateAutoData>> = {
mutationFn: async (fnOptions) => {
const { data } = await opusMagnumApiValidateAuto({
...options,
@@ -337,7 +337,7 @@ export const opusMagnumApiListResponsesNeedingValidationQueryKey = (options: Opt
*
* Get all responses that need manual validation
*/
export const opusMagnumApiListResponsesNeedingValidationOptions = (options: Options<OpusMagnumApiListResponsesNeedingValidationData>) => queryOptions<OpusMagnumApiListResponsesNeedingValidationResponse, DefaultError, OpusMagnumApiListResponsesNeedingValidationResponse, ReturnType<typeof opusMagnumApiListResponsesNeedingValidationQueryKey>>({
export const opusMagnumApiListResponsesNeedingValidationOptions = (options: Options<OpusMagnumApiListResponsesNeedingValidationData>) => queryOptions<OpusMagnumApiListResponsesNeedingValidationResponse, OpusMagnumApiListResponsesNeedingValidationError, OpusMagnumApiListResponsesNeedingValidationResponse, ReturnType<typeof opusMagnumApiListResponsesNeedingValidationQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
const { data } = await opusMagnumApiListResponsesNeedingValidation({
...options,
@@ -355,8 +355,8 @@ export const opusMagnumApiListResponsesNeedingValidationOptions = (options: Opti
*
* Mark entire submission as validated
*/
export const opusMagnumApiValidateSubmissionMutation = (options?: Partial<Options<OpusMagnumApiValidateSubmissionData>>): UseMutationOptions<OpusMagnumApiValidateSubmissionResponse, DefaultError, Options<OpusMagnumApiValidateSubmissionData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiValidateSubmissionResponse, DefaultError, Options<OpusMagnumApiValidateSubmissionData>> = {
export const opusMagnumApiValidateSubmissionMutation = (options?: Partial<Options<OpusMagnumApiValidateSubmissionData>>): UseMutationOptions<OpusMagnumApiValidateSubmissionResponse, OpusMagnumApiValidateSubmissionError, Options<OpusMagnumApiValidateSubmissionData>> => {
const mutationOptions: UseMutationOptions<OpusMagnumApiValidateSubmissionResponse, OpusMagnumApiValidateSubmissionError, Options<OpusMagnumApiValidateSubmissionData>> = {
mutationFn: async (fnOptions) => {
const { data } = await opusMagnumApiValidateSubmission({
...options,
@@ -695,7 +695,7 @@ export const submissionsApiListSubmissionsByGameQueryKey = (options: Options<Sub
/**
* List Submissions By Game
*/
export const submissionsApiListSubmissionsByGameOptions = (options: Options<SubmissionsApiListSubmissionsByGameData>) => queryOptions<SubmissionsApiListSubmissionsByGameResponse, DefaultError, SubmissionsApiListSubmissionsByGameResponse, ReturnType<typeof submissionsApiListSubmissionsByGameQueryKey>>({
export const submissionsApiListSubmissionsByGameOptions = (options: Options<SubmissionsApiListSubmissionsByGameData>) => queryOptions<SubmissionsApiListSubmissionsByGameResponse, SubmissionsApiListSubmissionsByGameError, SubmissionsApiListSubmissionsByGameResponse, ReturnType<typeof submissionsApiListSubmissionsByGameQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
const { data } = await submissionsApiListSubmissionsByGame({
...options,
@@ -713,7 +713,7 @@ export const submissionsApiGetSubmissionQueryKey = (options: Options<Submissions
/**
* Get Submission
*/
export const submissionsApiGetSubmissionOptions = (options: Options<SubmissionsApiGetSubmissionData>) => queryOptions<SubmissionsApiGetSubmissionResponse, DefaultError, SubmissionsApiGetSubmissionResponse, ReturnType<typeof submissionsApiGetSubmissionQueryKey>>({
export const submissionsApiGetSubmissionOptions = (options: Options<SubmissionsApiGetSubmissionData>) => queryOptions<SubmissionsApiGetSubmissionResponse, SubmissionsApiGetSubmissionError, SubmissionsApiGetSubmissionResponse, ReturnType<typeof submissionsApiGetSubmissionQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
const { data } = await submissionsApiGetSubmission({
...options,
@@ -729,8 +729,8 @@ export const submissionsApiGetSubmissionOptions = (options: Options<SubmissionsA
/**
* Create Image Crop
*/
export const submissionsApiCreateImageCropMutation = (options?: Partial<Options<SubmissionsApiCreateImageCropData>>): UseMutationOptions<SubmissionsApiCreateImageCropResponse, DefaultError, Options<SubmissionsApiCreateImageCropData>> => {
const mutationOptions: UseMutationOptions<SubmissionsApiCreateImageCropResponse, DefaultError, Options<SubmissionsApiCreateImageCropData>> = {
export const submissionsApiCreateImageCropMutation = (options?: Partial<Options<SubmissionsApiCreateImageCropData>>): UseMutationOptions<SubmissionsApiCreateImageCropResponse, SubmissionsApiCreateImageCropError, Options<SubmissionsApiCreateImageCropData>> => {
const mutationOptions: UseMutationOptions<SubmissionsApiCreateImageCropResponse, SubmissionsApiCreateImageCropError, Options<SubmissionsApiCreateImageCropData>> = {
mutationFn: async (fnOptions) => {
const { data } = await submissionsApiCreateImageCrop({
...options,
@@ -746,8 +746,8 @@ export const submissionsApiCreateImageCropMutation = (options?: Partial<Options<
/**
* Delete Image Crop
*/
export const submissionsApiDeleteImageCropMutation = (options?: Partial<Options<SubmissionsApiDeleteImageCropData>>): UseMutationOptions<SubmissionsApiDeleteImageCropResponse, DefaultError, Options<SubmissionsApiDeleteImageCropData>> => {
const mutationOptions: UseMutationOptions<SubmissionsApiDeleteImageCropResponse, DefaultError, Options<SubmissionsApiDeleteImageCropData>> = {
export const submissionsApiDeleteImageCropMutation = (options?: Partial<Options<SubmissionsApiDeleteImageCropData>>): UseMutationOptions<SubmissionsApiDeleteImageCropResponse, SubmissionsApiDeleteImageCropError, Options<SubmissionsApiDeleteImageCropData>> => {
const mutationOptions: UseMutationOptions<SubmissionsApiDeleteImageCropResponse, SubmissionsApiDeleteImageCropError, Options<SubmissionsApiDeleteImageCropData>> = {
mutationFn: async (fnOptions) => {
const { data } = await submissionsApiDeleteImageCrop({
...options,
@@ -763,8 +763,8 @@ export const submissionsApiDeleteImageCropMutation = (options?: Partial<Options<
/**
* Process File Ocr
*/
export const submissionsApiProcessFileOcrMutation = (options?: Partial<Options<SubmissionsApiProcessFileOcrData>>): UseMutationOptions<SubmissionsApiProcessFileOcrResponse, DefaultError, Options<SubmissionsApiProcessFileOcrData>> => {
const mutationOptions: UseMutationOptions<SubmissionsApiProcessFileOcrResponse, DefaultError, Options<SubmissionsApiProcessFileOcrData>> = {
export const submissionsApiProcessFileOcrMutation = (options?: Partial<Options<SubmissionsApiProcessFileOcrData>>): UseMutationOptions<SubmissionsApiProcessFileOcrResponse, SubmissionsApiProcessFileOcrError, Options<SubmissionsApiProcessFileOcrData>> => {
const mutationOptions: UseMutationOptions<SubmissionsApiProcessFileOcrResponse, SubmissionsApiProcessFileOcrError, Options<SubmissionsApiProcessFileOcrData>> = {
mutationFn: async (fnOptions) => {
const { data } = await submissionsApiProcessFileOcr({
...options,
@@ -780,8 +780,8 @@ export const submissionsApiProcessFileOcrMutation = (options?: Partial<Options<S
/**
* Process Crop Ocr
*/
export const submissionsApiProcessCropOcrMutation = (options?: Partial<Options<SubmissionsApiProcessCropOcrData>>): UseMutationOptions<SubmissionsApiProcessCropOcrResponse, DefaultError, Options<SubmissionsApiProcessCropOcrData>> => {
const mutationOptions: UseMutationOptions<SubmissionsApiProcessCropOcrResponse, DefaultError, Options<SubmissionsApiProcessCropOcrData>> = {
export const submissionsApiProcessCropOcrMutation = (options?: Partial<Options<SubmissionsApiProcessCropOcrData>>): UseMutationOptions<SubmissionsApiProcessCropOcrResponse, SubmissionsApiProcessCropOcrError, Options<SubmissionsApiProcessCropOcrData>> => {
const mutationOptions: UseMutationOptions<SubmissionsApiProcessCropOcrResponse, SubmissionsApiProcessCropOcrError, Options<SubmissionsApiProcessCropOcrData>> = {
mutationFn: async (fnOptions) => {
const { data } = await submissionsApiProcessCropOcr({
...options,
File diff suppressed because one or more lines are too long
+14 -14
View File
@@ -2,7 +2,7 @@
import { type Client, formDataBodySerializer, type Options as Options2, type TDataShape } from './client';
import { client } from './client.gen';
import type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponses, AnimationsApiResultsData, AnimationsApiResultsResponses, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponses, ClockApiCurrentStateData, ClockApiCurrentStateResponses, ClockApiMyStatsData, ClockApiMyStatsResponses, GamesApiListEventGamesData, GamesApiListEventGamesResponses, GamesApiListEventSteamGamesData, GamesApiListEventSteamGamesResponses, GamesApiListGamesData, GamesApiListGamesResponses, MarketApiBetHistoryData, MarketApiBetHistoryResponses, MarketApiCloseMarketData, MarketApiCloseMarketResponses, MarketApiCreateBetData, MarketApiCreateBetResponses, MarketApiGetUserPointsData, MarketApiGetUserPointsResponses, MarketApiListMarketsData, MarketApiListMarketsResponses, MarketApiListUserBetsData, MarketApiListUserBetsResponses, MarketApiResolveMarketData, MarketApiResolveMarketResponses, NoitaApiGetLeaderboardData, NoitaApiGetLeaderboardResponses, NoitaApiGetResultsData, NoitaApiGetResultsResponses, NoitaApiSubmitLogFileData, NoitaApiSubmitLogFileErrors, NoitaApiSubmitLogFileResponses, OpusMagnumApiCreateSubmissionData, OpusMagnumApiCreateSubmissionResponses, OpusMagnumApiDeleteSubmissionData, OpusMagnumApiDeleteSubmissionResponses, OpusMagnumApiGetCollectionData, OpusMagnumApiGetCollectionResponses, OpusMagnumApiGetStatsData, OpusMagnumApiGetStatsResponses, OpusMagnumApiGetSubmissionData, OpusMagnumApiGetSubmissionResponses, OpusMagnumApiListPuzzlesData, OpusMagnumApiListPuzzlesResponses, OpusMagnumApiListResponsesNeedingValidationData, OpusMagnumApiListResponsesNeedingValidationResponses, OpusMagnumApiListSubmissionsData, OpusMagnumApiListSubmissionsResponses, OpusMagnumApiValidateAutoData, OpusMagnumApiValidateAutoResponses, OpusMagnumApiValidateResponseData, OpusMagnumApiValidateResponseResponses, OpusMagnumApiValidateSubmissionData, OpusMagnumApiValidateSubmissionResponses, PlaceApiCanvasData, PlaceApiCanvasResponses, PlaceApiEvolutionGifData, PlaceApiEvolutionGifResponses, PolylanSubmitterApiClearCacheData, PolylanSubmitterApiClearCacheResponses, PolylanSubmitterApiGetUserInfoData, PolylanSubmitterApiGetUserInfoResponses, PolylanSubmitterApiHealthCheckData, PolylanSubmitterApiHealthCheckResponses, SubmissionsApiCreateImageCropData, SubmissionsApiCreateImageCropResponses, SubmissionsApiCreateSubmissionData, SubmissionsApiCreateSubmissionErrors, SubmissionsApiCreateSubmissionResponses, SubmissionsApiDeleteImageCropData, SubmissionsApiDeleteImageCropResponses, SubmissionsApiGetSubmissionData, SubmissionsApiGetSubmissionResponses, SubmissionsApiListAvailableScopesData, SubmissionsApiListAvailableScopesErrors, SubmissionsApiListAvailableScopesResponses, SubmissionsApiListMyScopesData, SubmissionsApiListMyScopesErrors, SubmissionsApiListMyScopesResponses, SubmissionsApiListSubmissionsByGameData, SubmissionsApiListSubmissionsByGameResponses, SubmissionsApiListUserSubmissionsData, SubmissionsApiListUserSubmissionsErrors, SubmissionsApiListUserSubmissionsResponses, SubmissionsApiProcessCropOcrData, SubmissionsApiProcessCropOcrResponses, SubmissionsApiProcessFileOcrData, SubmissionsApiProcessFileOcrResponses, SubmissionsApiStopSyncScopesData, SubmissionsApiStopSyncScopesErrors, SubmissionsApiStopSyncScopesResponses, SubmissionsApiSyncScopesData, SubmissionsApiSyncScopesErrors, SubmissionsApiSyncScopesResponses, SubmissionsApiSyncScopesStatusData, SubmissionsApiSyncScopesStatusErrors, SubmissionsApiSyncScopesStatusResponses } from './types.gen';
import type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponses, AnimationsApiResultsData, AnimationsApiResultsResponses, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponses, ClockApiCurrentStateData, ClockApiCurrentStateResponses, ClockApiMyStatsData, ClockApiMyStatsResponses, GamesApiListEventGamesData, GamesApiListEventGamesResponses, GamesApiListEventSteamGamesData, GamesApiListEventSteamGamesResponses, GamesApiListGamesData, GamesApiListGamesResponses, MarketApiBetHistoryData, MarketApiBetHistoryResponses, MarketApiCloseMarketData, MarketApiCloseMarketResponses, MarketApiCreateBetData, MarketApiCreateBetResponses, MarketApiGetUserPointsData, MarketApiGetUserPointsResponses, MarketApiListMarketsData, MarketApiListMarketsResponses, MarketApiListUserBetsData, MarketApiListUserBetsResponses, MarketApiResolveMarketData, MarketApiResolveMarketResponses, NoitaApiGetLeaderboardData, NoitaApiGetLeaderboardResponses, NoitaApiGetResultsData, NoitaApiGetResultsResponses, NoitaApiSubmitLogFileData, NoitaApiSubmitLogFileErrors, NoitaApiSubmitLogFileResponses, OpusMagnumApiCreateSubmissionData, OpusMagnumApiCreateSubmissionErrors, OpusMagnumApiCreateSubmissionResponses, OpusMagnumApiDeleteSubmissionData, OpusMagnumApiDeleteSubmissionErrors, OpusMagnumApiDeleteSubmissionResponses, OpusMagnumApiGetCollectionData, OpusMagnumApiGetCollectionResponses, OpusMagnumApiGetStatsData, OpusMagnumApiGetStatsResponses, OpusMagnumApiGetSubmissionData, OpusMagnumApiGetSubmissionResponses, OpusMagnumApiListPuzzlesData, OpusMagnumApiListPuzzlesResponses, OpusMagnumApiListResponsesNeedingValidationData, OpusMagnumApiListResponsesNeedingValidationErrors, OpusMagnumApiListResponsesNeedingValidationResponses, OpusMagnumApiListSubmissionsData, OpusMagnumApiListSubmissionsResponses, OpusMagnumApiValidateAutoData, OpusMagnumApiValidateAutoErrors, OpusMagnumApiValidateAutoResponses, OpusMagnumApiValidateResponseData, OpusMagnumApiValidateResponseErrors, OpusMagnumApiValidateResponseResponses, OpusMagnumApiValidateSubmissionData, OpusMagnumApiValidateSubmissionErrors, OpusMagnumApiValidateSubmissionResponses, PlaceApiCanvasData, PlaceApiCanvasResponses, PlaceApiEvolutionGifData, PlaceApiEvolutionGifResponses, PolylanSubmitterApiClearCacheData, PolylanSubmitterApiClearCacheErrors, PolylanSubmitterApiClearCacheResponses, PolylanSubmitterApiGetUserInfoData, PolylanSubmitterApiGetUserInfoResponses, PolylanSubmitterApiHealthCheckData, PolylanSubmitterApiHealthCheckResponses, SubmissionsApiCreateImageCropData, SubmissionsApiCreateImageCropErrors, SubmissionsApiCreateImageCropResponses, SubmissionsApiCreateSubmissionData, SubmissionsApiCreateSubmissionErrors, SubmissionsApiCreateSubmissionResponses, SubmissionsApiDeleteImageCropData, SubmissionsApiDeleteImageCropErrors, SubmissionsApiDeleteImageCropResponses, SubmissionsApiGetSubmissionData, SubmissionsApiGetSubmissionErrors, SubmissionsApiGetSubmissionResponses, SubmissionsApiListAvailableScopesData, SubmissionsApiListAvailableScopesErrors, SubmissionsApiListAvailableScopesResponses, SubmissionsApiListMyScopesData, SubmissionsApiListMyScopesErrors, SubmissionsApiListMyScopesResponses, SubmissionsApiListSubmissionsByGameData, SubmissionsApiListSubmissionsByGameErrors, SubmissionsApiListSubmissionsByGameResponses, SubmissionsApiListUserSubmissionsData, SubmissionsApiListUserSubmissionsErrors, SubmissionsApiListUserSubmissionsResponses, SubmissionsApiProcessCropOcrData, SubmissionsApiProcessCropOcrErrors, SubmissionsApiProcessCropOcrResponses, SubmissionsApiProcessFileOcrData, SubmissionsApiProcessFileOcrErrors, SubmissionsApiProcessFileOcrResponses, SubmissionsApiStopSyncScopesData, SubmissionsApiStopSyncScopesErrors, SubmissionsApiStopSyncScopesResponses, SubmissionsApiSyncScopesData, SubmissionsApiSyncScopesErrors, SubmissionsApiSyncScopesResponses, SubmissionsApiSyncScopesStatusData, SubmissionsApiSyncScopesStatusErrors, SubmissionsApiSyncScopesStatusResponses } from './types.gen';
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {
/**
@@ -30,7 +30,7 @@ export const polylanSubmitterApiHealthCheck = <ThrowOnError extends boolean = fa
*
* Clear API caches (admin only). Pass event_path to clear just that event's keys.
*/
export const polylanSubmitterApiClearCache = <ThrowOnError extends boolean = false>(options?: Options<PolylanSubmitterApiClearCacheData, ThrowOnError>) => (options?.client ?? client).post<PolylanSubmitterApiClearCacheResponses, unknown, ThrowOnError>({ url: '/api/cache/clear', ...options });
export const polylanSubmitterApiClearCache = <ThrowOnError extends boolean = false>(options?: Options<PolylanSubmitterApiClearCacheData, ThrowOnError>) => (options?.client ?? client).post<PolylanSubmitterApiClearCacheResponses, PolylanSubmitterApiClearCacheErrors, ThrowOnError>({ url: '/api/cache/clear', ...options });
/**
* Get User Info
@@ -70,7 +70,7 @@ export const opusMagnumApiListSubmissions = <ThrowOnError extends boolean = fals
*
* Create a new submission with multiple puzzle responses
*/
export const opusMagnumApiCreateSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiCreateSubmissionData, ThrowOnError>) => (options.client ?? client).post<OpusMagnumApiCreateSubmissionResponses, unknown, ThrowOnError>({
export const opusMagnumApiCreateSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiCreateSubmissionData, ThrowOnError>) => (options.client ?? client).post<OpusMagnumApiCreateSubmissionResponses, OpusMagnumApiCreateSubmissionErrors, ThrowOnError>({
...formDataBodySerializer,
url: '/api/events/{event_path}/opus-magnum/submissions',
...options,
@@ -85,7 +85,7 @@ export const opusMagnumApiCreateSubmission = <ThrowOnError extends boolean = fal
*
* Delete a submission (admin only)
*/
export const opusMagnumApiDeleteSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiDeleteSubmissionData, ThrowOnError>) => (options.client ?? client).delete<OpusMagnumApiDeleteSubmissionResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/opus-magnum/submissions/{submission_id}', ...options });
export const opusMagnumApiDeleteSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiDeleteSubmissionData, ThrowOnError>) => (options.client ?? client).delete<OpusMagnumApiDeleteSubmissionResponses, OpusMagnumApiDeleteSubmissionErrors, ThrowOnError>({ url: '/api/events/{event_path}/opus-magnum/submissions/{submission_id}', ...options });
/**
* Get Submission
@@ -99,7 +99,7 @@ export const opusMagnumApiGetSubmission = <ThrowOnError extends boolean = false>
*
* Manually validate a puzzle response
*/
export const opusMagnumApiValidateResponse = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateResponseData, ThrowOnError>) => (options.client ?? client).put<OpusMagnumApiValidateResponseResponses, unknown, ThrowOnError>({
export const opusMagnumApiValidateResponse = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateResponseData, ThrowOnError>) => (options.client ?? client).put<OpusMagnumApiValidateResponseResponses, OpusMagnumApiValidateResponseErrors, ThrowOnError>({
url: '/api/events/{event_path}/opus-magnum/responses/{response_id}/validate',
...options,
headers: {
@@ -113,21 +113,21 @@ export const opusMagnumApiValidateResponse = <ThrowOnError extends boolean = fal
*
* Try to auto validate a puzzle response
*/
export const opusMagnumApiValidateAuto = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateAutoData, ThrowOnError>) => (options.client ?? client).put<OpusMagnumApiValidateAutoResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/opus-magnum/responses/{response_id}/validate/auto', ...options });
export const opusMagnumApiValidateAuto = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateAutoData, ThrowOnError>) => (options.client ?? client).put<OpusMagnumApiValidateAutoResponses, OpusMagnumApiValidateAutoErrors, ThrowOnError>({ url: '/api/events/{event_path}/opus-magnum/responses/{response_id}/validate/auto', ...options });
/**
* List Responses Needing Validation
*
* Get all responses that need manual validation
*/
export const opusMagnumApiListResponsesNeedingValidation = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiListResponsesNeedingValidationData, ThrowOnError>) => (options.client ?? client).get<OpusMagnumApiListResponsesNeedingValidationResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/opus-magnum/responses/needs-validation', ...options });
export const opusMagnumApiListResponsesNeedingValidation = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiListResponsesNeedingValidationData, ThrowOnError>) => (options.client ?? client).get<OpusMagnumApiListResponsesNeedingValidationResponses, OpusMagnumApiListResponsesNeedingValidationErrors, ThrowOnError>({ url: '/api/events/{event_path}/opus-magnum/responses/needs-validation', ...options });
/**
* Validate Submission
*
* Mark entire submission as validated
*/
export const opusMagnumApiValidateSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateSubmissionData, ThrowOnError>) => (options.client ?? client).post<OpusMagnumApiValidateSubmissionResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/opus-magnum/submissions/{submission_id}/validate', ...options });
export const opusMagnumApiValidateSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateSubmissionData, ThrowOnError>) => (options.client ?? client).post<OpusMagnumApiValidateSubmissionResponses, OpusMagnumApiValidateSubmissionErrors, ThrowOnError>({ url: '/api/events/{event_path}/opus-magnum/submissions/{submission_id}/validate', ...options });
/**
* Get Stats
@@ -272,17 +272,17 @@ export const submissionsApiListUserSubmissions = <ThrowOnError extends boolean =
/**
* List Submissions By Game
*/
export const submissionsApiListSubmissionsByGame = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiListSubmissionsByGameData, ThrowOnError>) => (options.client ?? client).get<SubmissionsApiListSubmissionsByGameResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/submissions/submission/by/game', ...options });
export const submissionsApiListSubmissionsByGame = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiListSubmissionsByGameData, ThrowOnError>) => (options.client ?? client).get<SubmissionsApiListSubmissionsByGameResponses, SubmissionsApiListSubmissionsByGameErrors, ThrowOnError>({ url: '/api/events/{event_path}/submissions/submission/by/game', ...options });
/**
* Get Submission
*/
export const submissionsApiGetSubmission = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiGetSubmissionData, ThrowOnError>) => (options.client ?? client).get<SubmissionsApiGetSubmissionResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/submissions/submission/{submission_id}', ...options });
export const submissionsApiGetSubmission = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiGetSubmissionData, ThrowOnError>) => (options.client ?? client).get<SubmissionsApiGetSubmissionResponses, SubmissionsApiGetSubmissionErrors, ThrowOnError>({ url: '/api/events/{event_path}/submissions/submission/{submission_id}', ...options });
/**
* Create Image Crop
*/
export const submissionsApiCreateImageCrop = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiCreateImageCropData, ThrowOnError>) => (options.client ?? client).post<SubmissionsApiCreateImageCropResponses, unknown, ThrowOnError>({
export const submissionsApiCreateImageCrop = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiCreateImageCropData, ThrowOnError>) => (options.client ?? client).post<SubmissionsApiCreateImageCropResponses, SubmissionsApiCreateImageCropErrors, ThrowOnError>({
url: '/api/events/{event_path}/submissions/crops/s/{submission_file_id}',
...options,
headers: {
@@ -294,17 +294,17 @@ export const submissionsApiCreateImageCrop = <ThrowOnError extends boolean = fal
/**
* Delete Image Crop
*/
export const submissionsApiDeleteImageCrop = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiDeleteImageCropData, ThrowOnError>) => (options.client ?? client).delete<SubmissionsApiDeleteImageCropResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/submissions/crops/{crop_id}', ...options });
export const submissionsApiDeleteImageCrop = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiDeleteImageCropData, ThrowOnError>) => (options.client ?? client).delete<SubmissionsApiDeleteImageCropResponses, SubmissionsApiDeleteImageCropErrors, ThrowOnError>({ url: '/api/events/{event_path}/submissions/crops/{crop_id}', ...options });
/**
* Process File Ocr
*/
export const submissionsApiProcessFileOcr = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiProcessFileOcrData, ThrowOnError>) => (options.client ?? client).post<SubmissionsApiProcessFileOcrResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/submissions/files/{file_id}/process-ocr', ...options });
export const submissionsApiProcessFileOcr = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiProcessFileOcrData, ThrowOnError>) => (options.client ?? client).post<SubmissionsApiProcessFileOcrResponses, SubmissionsApiProcessFileOcrErrors, ThrowOnError>({ url: '/api/events/{event_path}/submissions/files/{file_id}/process-ocr', ...options });
/**
* Process Crop Ocr
*/
export const submissionsApiProcessCropOcr = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiProcessCropOcrData, ThrowOnError>) => (options.client ?? client).post<SubmissionsApiProcessCropOcrResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/submissions/crops/{crop_id}/process-ocr', ...options });
export const submissionsApiProcessCropOcr = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiProcessCropOcrData, ThrowOnError>) => (options.client ?? client).post<SubmissionsApiProcessCropOcrResponses, SubmissionsApiProcessCropOcrErrors, ThrowOnError>({ url: '/api/events/{event_path}/submissions/crops/{crop_id}/process-ocr', ...options });
/**
* Current State
+206 -3
View File
@@ -1338,11 +1338,17 @@ export type PolylanSubmitterApiHealthCheckData = {
export type PolylanSubmitterApiHealthCheckResponses = {
/**
* Response
*
* OK
*/
200: unknown;
200: {
[key: string]: unknown;
};
};
export type PolylanSubmitterApiHealthCheckResponse = PolylanSubmitterApiHealthCheckResponses[keyof PolylanSubmitterApiHealthCheckResponses];
export type PolylanSubmitterApiClearCacheData = {
body?: never;
path?: never;
@@ -1355,13 +1361,32 @@ export type PolylanSubmitterApiClearCacheData = {
url: '/api/cache/clear';
};
export type PolylanSubmitterApiClearCacheErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type PolylanSubmitterApiClearCacheError = PolylanSubmitterApiClearCacheErrors[keyof PolylanSubmitterApiClearCacheErrors];
export type PolylanSubmitterApiClearCacheResponses = {
/**
* Response
*
* OK
*/
200: unknown;
200: {
[key: string]: unknown;
};
};
export type PolylanSubmitterApiClearCacheResponse = PolylanSubmitterApiClearCacheResponses[keyof PolylanSubmitterApiClearCacheResponses];
export type PolylanSubmitterApiGetUserInfoData = {
body?: never;
path?: never;
@@ -1491,6 +1516,27 @@ export type OpusMagnumApiCreateSubmissionData = {
url: '/api/events/{event_path}/opus-magnum/submissions';
};
export type OpusMagnumApiCreateSubmissionErrors = {
/**
* Response
*
* Bad Request
*/
400: {
[key: string]: unknown;
};
/**
* Response
*
* Internal Server Error
*/
500: {
[key: string]: unknown;
};
};
export type OpusMagnumApiCreateSubmissionError = OpusMagnumApiCreateSubmissionErrors[keyof OpusMagnumApiCreateSubmissionErrors];
export type OpusMagnumApiCreateSubmissionResponses = {
/**
* OK
@@ -1516,13 +1562,32 @@ export type OpusMagnumApiDeleteSubmissionData = {
url: '/api/events/{event_path}/opus-magnum/submissions/{submission_id}';
};
export type OpusMagnumApiDeleteSubmissionErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type OpusMagnumApiDeleteSubmissionError = OpusMagnumApiDeleteSubmissionErrors[keyof OpusMagnumApiDeleteSubmissionErrors];
export type OpusMagnumApiDeleteSubmissionResponses = {
/**
* Response
*
* OK
*/
200: unknown;
200: {
[key: string]: unknown;
};
};
export type OpusMagnumApiDeleteSubmissionResponse = OpusMagnumApiDeleteSubmissionResponses[keyof OpusMagnumApiDeleteSubmissionResponses];
export type OpusMagnumApiGetSubmissionData = {
body?: never;
path: {
@@ -1564,6 +1629,19 @@ export type OpusMagnumApiValidateResponseData = {
url: '/api/events/{event_path}/opus-magnum/responses/{response_id}/validate';
};
export type OpusMagnumApiValidateResponseErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type OpusMagnumApiValidateResponseError = OpusMagnumApiValidateResponseErrors[keyof OpusMagnumApiValidateResponseErrors];
export type OpusMagnumApiValidateResponseResponses = {
/**
* OK
@@ -1589,6 +1667,19 @@ export type OpusMagnumApiValidateAutoData = {
url: '/api/events/{event_path}/opus-magnum/responses/{response_id}/validate/auto';
};
export type OpusMagnumApiValidateAutoErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type OpusMagnumApiValidateAutoError = OpusMagnumApiValidateAutoErrors[keyof OpusMagnumApiValidateAutoErrors];
export type OpusMagnumApiValidateAutoResponses = {
/**
* OK
@@ -1610,6 +1701,19 @@ export type OpusMagnumApiListResponsesNeedingValidationData = {
url: '/api/events/{event_path}/opus-magnum/responses/needs-validation';
};
export type OpusMagnumApiListResponsesNeedingValidationErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type OpusMagnumApiListResponsesNeedingValidationError = OpusMagnumApiListResponsesNeedingValidationErrors[keyof OpusMagnumApiListResponsesNeedingValidationErrors];
export type OpusMagnumApiListResponsesNeedingValidationResponses = {
/**
* Response
@@ -1637,6 +1741,19 @@ export type OpusMagnumApiValidateSubmissionData = {
url: '/api/events/{event_path}/opus-magnum/submissions/{submission_id}/validate';
};
export type OpusMagnumApiValidateSubmissionErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type OpusMagnumApiValidateSubmissionError = OpusMagnumApiValidateSubmissionErrors[keyof OpusMagnumApiValidateSubmissionErrors];
export type OpusMagnumApiValidateSubmissionResponses = {
/**
* OK
@@ -1809,6 +1926,14 @@ export type NoitaApiSubmitLogFileErrors = {
400: {
[key: string]: unknown;
};
/**
* Response
*
* Internal Server Error
*/
500: {
[key: string]: unknown;
};
};
export type NoitaApiSubmitLogFileError = NoitaApiSubmitLogFileErrors[keyof NoitaApiSubmitLogFileErrors];
@@ -2180,6 +2305,19 @@ export type SubmissionsApiListSubmissionsByGameData = {
url: '/api/events/{event_path}/submissions/submission/by/game';
};
export type SubmissionsApiListSubmissionsByGameErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type SubmissionsApiListSubmissionsByGameError = SubmissionsApiListSubmissionsByGameErrors[keyof SubmissionsApiListSubmissionsByGameErrors];
export type SubmissionsApiListSubmissionsByGameResponses = {
/**
* Response
@@ -2207,6 +2345,19 @@ export type SubmissionsApiGetSubmissionData = {
url: '/api/events/{event_path}/submissions/submission/{submission_id}';
};
export type SubmissionsApiGetSubmissionErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type SubmissionsApiGetSubmissionError = SubmissionsApiGetSubmissionErrors[keyof SubmissionsApiGetSubmissionErrors];
export type SubmissionsApiGetSubmissionResponses = {
/**
* OK
@@ -2232,6 +2383,19 @@ export type SubmissionsApiCreateImageCropData = {
url: '/api/events/{event_path}/submissions/crops/s/{submission_file_id}';
};
export type SubmissionsApiCreateImageCropErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type SubmissionsApiCreateImageCropError = SubmissionsApiCreateImageCropErrors[keyof SubmissionsApiCreateImageCropErrors];
export type SubmissionsApiCreateImageCropResponses = {
/**
* OK
@@ -2257,6 +2421,19 @@ export type SubmissionsApiDeleteImageCropData = {
url: '/api/events/{event_path}/submissions/crops/{crop_id}';
};
export type SubmissionsApiDeleteImageCropErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type SubmissionsApiDeleteImageCropError = SubmissionsApiDeleteImageCropErrors[keyof SubmissionsApiDeleteImageCropErrors];
export type SubmissionsApiDeleteImageCropResponses = {
/**
* Response
@@ -2286,6 +2463,19 @@ export type SubmissionsApiProcessFileOcrData = {
url: '/api/events/{event_path}/submissions/files/{file_id}/process-ocr';
};
export type SubmissionsApiProcessFileOcrErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type SubmissionsApiProcessFileOcrError = SubmissionsApiProcessFileOcrErrors[keyof SubmissionsApiProcessFileOcrErrors];
export type SubmissionsApiProcessFileOcrResponses = {
/**
* Response
@@ -2315,6 +2505,19 @@ export type SubmissionsApiProcessCropOcrData = {
url: '/api/events/{event_path}/submissions/crops/{crop_id}/process-ocr';
};
export type SubmissionsApiProcessCropOcrErrors = {
/**
* Response
*
* Forbidden
*/
403: {
[key: string]: unknown;
};
};
export type SubmissionsApiProcessCropOcrError = SubmissionsApiProcessCropOcrErrors[keyof SubmissionsApiProcessCropOcrErrors];
export type SubmissionsApiProcessCropOcrResponses = {
/**
* Response
+12 -6
View File
@@ -210,7 +210,9 @@ def list_user_submissions(request: HttpRequest, event_path: str, scope_id: UUID)
return submissions.select_related("user").order_by("-created_at")
@router.get(f"{PREFIX}/submission/by/game", response=list[SubmissionOut])
@router.get(
f"{PREFIX}/submission/by/game", response={200: list[SubmissionOut], 403: dict}
)
def list_submissions_by_game(request: HttpRequest, event_path: str, game_path: str):
game = get_object_or_404(Game, path=game_path)
@@ -220,7 +222,9 @@ def list_submissions_by_game(request: HttpRequest, event_path: str, game_path: s
return Submission.for_event.filter(scope__event_game__game=game)
@router.get(f"{PREFIX}/submission/{{submission_id}}", response=SubmissionOut)
@router.get(
f"{PREFIX}/submission/{{submission_id}}", response={200: SubmissionOut, 403: dict}
)
def get_submission(request: HttpRequest, event_path: str, submission_id: UUID):
submission = get_object_or_404(Submission.for_event, id=submission_id)
@@ -230,7 +234,9 @@ def get_submission(request: HttpRequest, event_path: str, submission_id: UUID):
return submission
@router.post(f"{PREFIX}/crops/s/{{submission_file_id}}", response=ImageCropOut)
@router.post(
f"{PREFIX}/crops/s/{{submission_file_id}}", response={200: ImageCropOut, 403: dict}
)
def create_image_crop(
request: HttpRequest,
event_path: str,
@@ -257,7 +263,7 @@ def create_image_crop(
return crop
@router.delete(f"{PREFIX}/crops/{{crop_id}}", response=dict)
@router.delete(f"{PREFIX}/crops/{{crop_id}}", response={200: dict, 403: dict})
def delete_image_crop(request: HttpRequest, event_path: str, crop_id: UUID):
if not request.user.is_staff:
return 403, {"detail": "Admin access required"}
@@ -270,7 +276,7 @@ def delete_image_crop(request: HttpRequest, event_path: str, crop_id: UUID):
return {"status": "deleted"}
@router.post(f"{PREFIX}/files/{{file_id}}/process-ocr", response=dict)
@router.post(f"{PREFIX}/files/{{file_id}}/process-ocr", response={200: dict, 403: dict})
def process_file_ocr(request: HttpRequest, event_path: str, file_id: UUID):
if not request.user.is_staff:
return 403, {"detail": "Admin access required"}
@@ -287,7 +293,7 @@ def process_file_ocr(request: HttpRequest, event_path: str, file_id: UUID):
return {"status": "queued"}
@router.post(f"{PREFIX}/crops/{{crop_id}}/process-ocr", response=dict)
@router.post(f"{PREFIX}/crops/{{crop_id}}/process-ocr", response={200: dict, 403: dict})
def process_crop_ocr(request: HttpRequest, event_path: str, crop_id: UUID):
if not request.user.is_staff:
return 403, {"detail": "Admin access required"}