Skip to content
Extraits de code Groupes Projets
Valider c2fbca55 rédigé par Steel's avatar Steel
Parcourir les fichiers

cache promotion

parent 97b3a204
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -17,24 +17,9 @@ export default { ...@@ -17,24 +17,9 @@ export default {
} }
}, },
scalars: { scalars: {
Date: {
type: 'string'
},
DateTime: {
type: 'string'
},
Url: { Url: {
type: 'string' type: 'string'
}, },
SmolStr: {
type: 'string'
},
UUID: {
type: 'string'
},
Identifier: {
type: 'string'
},
Base64: { Base64: {
type: 'string' type: 'string'
} }
......
// import { GetPromotionStore, UserDetailsStore } from '$houdini'; import { GetPromotionStore } from '$houdini';
// import { pageIterator } from '$lib/graphql/query'; import { pageIterator } from '$lib/graphql/query';
import type { RequestEvent } from '@sveltejs/kit';
// type Promotion = unknown[]; type UserId = string;
type PromoCache = {
lastUpdateMs: number;
promo: Set<UserId>;
};
// const cache = new Map<number, Promotion>(); const cache = new Map<number, PromoCache>();
// 1 hour
const CACHE_DURATION_MS = 1000 * 60 * 60;
// function fetchPromotion(promotion: number) { async function fetchPromotion(promotion: number, event: RequestEvent): Promise<PromoCache> {
// return Array.fromAsync(pageIterator(event, GetPromotionStore, { promotion })); const array = await Array.fromAsync(pageIterator(GetPromotionStore, { promotion }, event));
// } return {
lastUpdateMs: new Date().getTime(),
promo: new Set(array.map((node) => node.id))
};
}
// export async function getPromotion(promo: number): Promise<Promotion> { export async function getPromotion(promo: number, event: RequestEvent): Promise<Set<UserId>> {
// if (cache.has(promo)) { if (cache.has(promo)) {
// return cache.get(promo)!; const data = cache.get(promo)!;
// } if (new Date().getTime() - data.lastUpdateMs < CACHE_DURATION_MS) return data.promo;
// const promotion = await fetchPromotion(promo); }
// cache.set(promo, promotion); const freshData = await fetchPromotion(promo, event);
// return promotion; cache.set(promo, freshData);
// } return freshData.promo;
}
// export async function* promotionIterator( export async function* promotionIterator(
// min: number, min: number,
// max: number max: number,
// ): AsyncGenerator<Promotion, void, unknown> { event: RequestEvent
// for (let i = min; i <= max; i++) { ): AsyncGenerator<UserId, void, undefined> {
// yield getPromotion(i); for (let i = min; i <= max; i++) {
// } const promo = await getPromotion(i, event);
// } yield* promo;
}
}
// export function getPromotionRange(min: number, max: number): Promise<Promotion> { export function getPromotionRange(
// return Array.fromAsync(promotionIterator(min, max)); min: number,
// } max: number,
event: RequestEvent
): Promise<Set<UserId>> {
return Array.fromAsync(promotionIterator(min, max, event)).then((array) => new Set(array));
}
...@@ -22,9 +22,9 @@ export async function* pageIterator< ...@@ -22,9 +22,9 @@ export async function* pageIterator<
Data extends Page<GraphQLValue>, Data extends Page<GraphQLValue>,
Input extends PageArgs | GraphQLVariables Input extends PageArgs | GraphQLVariables
>( >(
event: RequestEvent,
queryStore: new () => QueryStore<Data, Input>, queryStore: new () => QueryStore<Data, Input>,
variables: Omit<Input, 'first' | 'after'>, variables: Omit<Input, 'first' | 'after'>,
event: RequestEvent,
pageSize = 100 pageSize = 100
): AsyncGenerator<NodeType<Data>, void, undefined> { ): AsyncGenerator<NodeType<Data>, void, undefined> {
const store = new queryStore(); const store = new queryStore();
......
Ce diff est replié.
...@@ -2,10 +2,10 @@ import { superValidate } from 'sveltekit-superforms'; ...@@ -2,10 +2,10 @@ import { superValidate } from 'sveltekit-superforms';
import { zod } from 'sveltekit-superforms/adapters'; import { zod } from 'sveltekit-superforms/adapters';
import { schema } from './schema'; import { schema } from './schema';
import { fail, redirect } from '@sveltejs/kit'; import { fail, redirect } from '@sveltejs/kit';
import { GetPromotionStore, UserDetailsStore } from '$houdini'; import { UserDetailsStore } from '$houdini';
import { pageIterator } from '$lib/graphql/query';
import { getRandomItems } from '$lib/utils'; import { getRandomItems } from '$lib/utils';
import { GameStage, Game } from '$lib/game'; import { GameStage, Game } from '$lib/game';
import { getPromotion } from '$lib/data';
type Option = { type Option = {
value: string; value: string;
...@@ -18,10 +18,7 @@ export async function load(event) { ...@@ -18,10 +18,7 @@ export async function load(event) {
if (game.state.stage === GameStage.GAME_OVER) redirect(303, '/quiz/game-over'); if (game.state.stage === GameStage.GAME_OVER) redirect(303, '/quiz/game-over');
if (game.state.stage === GameStage.NEXT) { if (game.state.stage === GameStage.NEXT) {
const pagination = pageIterator(event, GetPromotionStore, { promotion: 2023 }); const all = await getPromotion(2023, event);
const promotion = await Array.fromAsync(pagination);
const all = new Set(promotion.map((p) => p.id));
const previous = new Set(game.state.history); const previous = new Set(game.state.history);
const available = all.difference(previous); const available = all.difference(previous);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter