43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import { MarketOrderHistory, MarketType } from "@/market";
|
|
import { usePocketBase, watchCollection } from "@/pocketbase";
|
|
import { defineStore } from "pinia";
|
|
import { RecordModel } from "pocketbase";
|
|
import { computed, onMounted, ref } from "vue";
|
|
|
|
export type ScanResult = {
|
|
type: MarketType;
|
|
history: MarketOrderHistory[];
|
|
buy: number,
|
|
sell: number
|
|
}
|
|
|
|
interface MarketScan extends RecordModel {
|
|
owner: string;
|
|
types: number[];
|
|
};
|
|
|
|
const marketScans = 'marketScans';
|
|
|
|
export const useMarkeyScanStore = defineStore(marketScans, () => {
|
|
const pb = usePocketBase();
|
|
const marketScan = ref<MarketScan>();
|
|
|
|
const types = computed(() => marketScan.value?.types ?? []);
|
|
const setTypes = async (types: number[]) => {
|
|
if (marketScan.value?.id) {
|
|
marketScan.value = await pb.collection(marketScans).update(marketScan.value.id, { owner: pb.authStore.model!.id, types });
|
|
} else {
|
|
marketScan.value = await pb.collection(marketScans).create({ owner: pb.authStore.model!.id, types });
|
|
}
|
|
}
|
|
|
|
watchCollection<MarketScan>(marketScans, '*', data => {
|
|
if (data.action === 'delete') {
|
|
marketScan.value = undefined;
|
|
} else if (!marketScan.value || data.record.id === marketScan.value.id) {
|
|
marketScan.value = data.record;
|
|
}
|
|
});
|
|
onMounted(async () => marketScan.value = await pb.collection(marketScans).getFirstListItem<MarketScan>('').catch(() => undefined));
|
|
return { types, setTypes };
|
|
}); |