44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import {defineStore} from "pinia";
|
|
import {computed, ref} from "vue";
|
|
import {acquisitionApi} from "@/mammon";
|
|
import {AcquisitionResponse, AcquisitionResponseSourceEnum} from "@/generated/mammon";
|
|
|
|
export type AcquiredTypeSource = 'bo' | 'so' | 'prod' | 'misc';
|
|
|
|
export type RawAcquiredType = {
|
|
id: string;
|
|
type: number;
|
|
quantity: number;
|
|
remaining: number;
|
|
price: number;
|
|
date: Date;
|
|
source: AcquisitionResponseSourceEnum;
|
|
}
|
|
|
|
const toAcquiredType = (a: AcquisitionResponse): RawAcquiredType => ({
|
|
id: a.acquisitionId,
|
|
type: a.marketTypeId,
|
|
quantity: a.quantity,
|
|
remaining: a.remaining,
|
|
price: a.unitCost,
|
|
date: new Date(a.datetime),
|
|
source: a.source,
|
|
});
|
|
|
|
export const useAcquiredTypesStore = defineStore('market-acquisition', () => {
|
|
const acquiredTypes = ref<RawAcquiredType[]>([]);
|
|
|
|
const types = computed(() => acquiredTypes.value.filter(item => item.remaining > 0));
|
|
|
|
// Display-only: the backend exposes no write endpoint yet, so buy/sell are no-ops.
|
|
const addAcquiredType = async (_type: number, _quantity: number, _price: number, _source?: AcquiredTypeSource) => {};
|
|
const removeAcquiredType = async (_id: string, _quantity: number) => {};
|
|
|
|
const refresh = () => acquisitionApi.findAllAcquisitions()
|
|
.then(response => acquiredTypes.value = response.data.map(toAcquiredType));
|
|
|
|
refresh();
|
|
|
|
return { acquiredTypes: types, addAcquiredType, removeAcquiredType, refresh };
|
|
});
|