fix(market): per-event bet loss+win
This commit is contained in:
@@ -19,7 +19,7 @@ const { t } = useI18n();
|
||||
useTitle(computed(() => t("market.pageTitle")));
|
||||
|
||||
const marketStore = useMarketStore();
|
||||
const { markets, userInfo, isLoading } = storeToRefs(marketStore);
|
||||
const { markets, userInfo, userPoints, isLoading } = storeToRefs(marketStore);
|
||||
|
||||
const reloadPage = async () => {
|
||||
await marketStore.refreshPage(props.eventPath);
|
||||
@@ -56,7 +56,7 @@ onMounted(() => {
|
||||
{{ t("market.myBets") }}
|
||||
</h3>
|
||||
<div class="text-lg font-semibold">
|
||||
<span class="text-primary">{{ userInfo.points }}</span>
|
||||
<span class="text-primary">{{ userPoints }}</span>
|
||||
<span class="text-base-content/60 ml-1">{{ t("common.pts") }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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, GamesApiListGamesData, GamesApiListGamesResponses, MarketApiCloseMarketData, MarketApiCloseMarketResponses, MarketApiCreateBetData, MarketApiCreateBetResponses, 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, PolylanSubmitterApiGetConfigData, PolylanSubmitterApiGetConfigResponses, 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 } from './types.gen';
|
||||
import type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponses, AnimationsApiResultsData, AnimationsApiResultsResponses, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponses, ClockApiCurrentStateData, ClockApiCurrentStateResponses, ClockApiMyStatsData, ClockApiMyStatsResponses, GamesApiListEventGamesData, GamesApiListEventGamesResponses, GamesApiListGamesData, GamesApiListGamesResponses, 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, PolylanSubmitterApiGetConfigData, PolylanSubmitterApiGetConfigResponses, 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 } from './types.gen';
|
||||
|
||||
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {
|
||||
/**
|
||||
@@ -319,6 +319,13 @@ export const marketApiListMarkets = <ThrowOnError extends boolean = false>(optio
|
||||
*/
|
||||
export const marketApiListUserBets = <ThrowOnError extends boolean = false>(options: Options<MarketApiListUserBetsData, ThrowOnError>) => (options.client ?? client).get<MarketApiListUserBetsResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/market/user/bets', ...options });
|
||||
|
||||
/**
|
||||
* Get User Points
|
||||
*
|
||||
* Get the current user's points balance for this event.
|
||||
*/
|
||||
export const marketApiGetUserPoints = <ThrowOnError extends boolean = false>(options: Options<MarketApiGetUserPointsData, ThrowOnError>) => (options.client ?? client).get<MarketApiGetUserPointsResponses, unknown, ThrowOnError>({ url: '/api/events/{event_path}/market/user/points', ...options });
|
||||
|
||||
/**
|
||||
* Close Market
|
||||
*
|
||||
|
||||
@@ -1153,6 +1153,16 @@ export type UserBetSchema = {
|
||||
market?: MarketListSchema | null;
|
||||
};
|
||||
|
||||
/**
|
||||
* UserPointsSchema
|
||||
*/
|
||||
export type UserPointsSchema = {
|
||||
/**
|
||||
* Points
|
||||
*/
|
||||
points: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* ResolveMarketSchema
|
||||
*/
|
||||
@@ -2173,6 +2183,27 @@ export type MarketApiListUserBetsResponses = {
|
||||
|
||||
export type MarketApiListUserBetsResponse = MarketApiListUserBetsResponses[keyof MarketApiListUserBetsResponses];
|
||||
|
||||
export type MarketApiGetUserPointsData = {
|
||||
body?: never;
|
||||
path: {
|
||||
/**
|
||||
* Event Path
|
||||
*/
|
||||
event_path: string;
|
||||
};
|
||||
query?: never;
|
||||
url: '/api/events/{event_path}/market/user/points';
|
||||
};
|
||||
|
||||
export type MarketApiGetUserPointsResponses = {
|
||||
/**
|
||||
* OK
|
||||
*/
|
||||
200: UserPointsSchema;
|
||||
};
|
||||
|
||||
export type MarketApiGetUserPointsResponse = MarketApiGetUserPointsResponses[keyof MarketApiGetUserPointsResponses];
|
||||
|
||||
export type MarketApiCloseMarketData = {
|
||||
body?: never;
|
||||
path: {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref } from 'vue'
|
||||
import { polylanSubmitterApiGetUserInfo, marketApiListMarkets, marketApiListUserBets } from '@/api'
|
||||
import { polylanSubmitterApiGetUserInfo, marketApiListMarkets, marketApiListUserBets, marketApiGetUserPoints } from '@/api'
|
||||
import type { Market } from '@/types'
|
||||
import type { UserInfoOut, UserBetSchema } from '@/api/types.gen'
|
||||
|
||||
@@ -9,6 +9,7 @@ export const useMarketStore = defineStore('market', () => {
|
||||
const markets = ref<Market[]>([])
|
||||
const userInfo = ref<UserInfoOut | undefined>()
|
||||
const userBets = ref<UserBetSchema[]>([])
|
||||
const userPoints = ref<number>(0)
|
||||
const isLoading = ref(true)
|
||||
const error = ref<string>('')
|
||||
|
||||
@@ -49,6 +50,18 @@ export const useMarketStore = defineStore('market', () => {
|
||||
}
|
||||
}
|
||||
|
||||
const loadUserPoints = async (eventPath: string) => {
|
||||
try {
|
||||
const response = await marketApiGetUserPoints({ path: { event_path: eventPath } })
|
||||
if (response.data) {
|
||||
userPoints.value = response.data.points
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = 'Failed to load user points'
|
||||
console.error('Error loading user points:', err)
|
||||
}
|
||||
}
|
||||
|
||||
const initializeMarketPage = async (eventPath: string) => {
|
||||
isLoading.value = true
|
||||
error.value = ''
|
||||
@@ -59,9 +72,9 @@ export const useMarketStore = defineStore('market', () => {
|
||||
loadMarkets(eventPath),
|
||||
])
|
||||
|
||||
// Load user bets if authenticated
|
||||
// Load user bets and points if authenticated
|
||||
if (userInfo.value?.is_authenticated) {
|
||||
await loadUserBets(eventPath)
|
||||
await Promise.all([loadUserBets(eventPath), loadUserPoints(eventPath)])
|
||||
}
|
||||
} finally {
|
||||
isLoading.value = false
|
||||
@@ -73,6 +86,7 @@ export const useMarketStore = defineStore('market', () => {
|
||||
loadUserInfo(),
|
||||
loadMarkets(eventPath),
|
||||
userInfo.value?.is_authenticated ? loadUserBets(eventPath) : Promise.resolve(),
|
||||
userInfo.value?.is_authenticated ? loadUserPoints(eventPath) : Promise.resolve(),
|
||||
])
|
||||
}
|
||||
|
||||
@@ -81,6 +95,7 @@ export const useMarketStore = defineStore('market', () => {
|
||||
markets,
|
||||
userInfo,
|
||||
userBets,
|
||||
userPoints,
|
||||
isLoading,
|
||||
error,
|
||||
|
||||
@@ -88,6 +103,7 @@ export const useMarketStore = defineStore('market', () => {
|
||||
loadUserInfo,
|
||||
loadMarkets,
|
||||
loadUserBets,
|
||||
loadUserPoints,
|
||||
initializeMarketPage,
|
||||
refreshPage,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user