extract evepraisal from apraisal

This commit is contained in:
2023-11-16 09:54:23 +01:00
parent f115381955
commit 98ce81dfb2
7 changed files with 43 additions and 30 deletions
+44
View File
@@ -0,0 +1,44 @@
import { defineStore } from 'pinia';
import { ref } from 'vue';
import { MarketType } from "../type";
import { MarketTypePrice } from './MarketTypePrice';
import { getEvepraisalPrices } from './evepraisal';
type MarketTypePriceCache = {
price: MarketTypePrice,
date: Date
}
const cacheDuration = 1000 * 60 * 5; // 5 minutes
export const useApraisalStore = defineStore('appraisal', () => {
const cache = ref<Record<number, MarketTypePriceCache>>({});
const getPricesUncached = getEvepraisalPrices;
const getPrice = async (type: MarketType): Promise<MarketTypePrice> => (await getPrices([type]))[0];
const getPrices = async (types: MarketType[]): Promise<MarketTypePrice[]> => {
const now = new Date();
const cached: MarketTypePrice[] = [];
const uncached: MarketType[] = [];
types.forEach(t => {
const cachedPrice = cache.value[t.id];
if (cachedPrice && now.getTime() - cachedPrice.date.getTime() < cacheDuration) {
cached.push(cachedPrice.price);
} else {
uncached.push(t);
}
});
if (uncached.length > 0) {
const prices = await getPricesUncached(uncached);
prices.forEach(p => cache.value[p.type.id] = { price: p, date: now });
return [...cached, ...prices];
}
return cached;
};
return { getPrice, getPrices };
});