63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import { marbasAxiosInstance } from "@/service";
|
|
import { defineStore } from "pinia";
|
|
import { computed, ref } from "vue";
|
|
|
|
export type AcquiredMarketItem = {
|
|
id: number;
|
|
type: number;
|
|
quantity: number;
|
|
remaining: number;
|
|
price: number;
|
|
date: Date;
|
|
source: 'bo' | 'so' | 'prod';
|
|
user: number;
|
|
}
|
|
|
|
const endpoint = '/api/acquisitions';
|
|
|
|
export const useAcquiredItemStore = defineStore('market-acquisition', () => {
|
|
const acquiredItems = ref<AcquiredMarketItem[]>([]);
|
|
|
|
const types = computed(() => acquiredItems.value);
|
|
const addAcquiredItem = async (type: number, quantity: number, price: number) => {
|
|
acquiredItems.value = [...acquiredItems.value, (await marbasAxiosInstance.post<AcquiredMarketItem>(endpoint, {
|
|
type: type,
|
|
quantity: quantity,
|
|
remaining: quantity,
|
|
price: price,
|
|
date: new Date(),
|
|
source: 'bo',
|
|
})).data];
|
|
};
|
|
const removeAcquiredItem = async (type: number, quantity: number) => {
|
|
const found = acquiredItems.value.find(item => item.type === type);
|
|
|
|
if (!found) {
|
|
return;
|
|
}
|
|
|
|
if (found.remaining <= 0) {
|
|
acquiredItems.value = acquiredItems.value.filter(i => i.type !== type);
|
|
|
|
} else {
|
|
acquiredItems.value = acquiredItems.value.map(i => {
|
|
if (i.type === item.type) {
|
|
return item;
|
|
} else {
|
|
return i;
|
|
}
|
|
});
|
|
}
|
|
|
|
const item = {
|
|
...found,
|
|
remaining: found.remaining - quantity
|
|
};
|
|
|
|
await marbasAxiosInstance.put(`${endpoint}/${item.id}`, item);
|
|
};
|
|
|
|
marbasAxiosInstance.get<AcquiredMarketItem[]>(endpoint).then(res => acquiredItems.value = res.data.filter(item => item.remaining > 0));
|
|
|
|
return { types, addAcquiredItem, removeAcquiredItem };
|
|
}); |