Files
gemory/src/market/acquisition/acquisition.ts
2024-05-17 14:19:57 +02:00

68 lines
2.0 KiB
TypeScript

import { useAuthStore } from "@/auth";
import { marbasAxiosInstance } from "@/service";
import { defineStore } from "pinia";
import { computed, onMounted, 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 authStore = useAuthStore();
const items = 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',
user: authStore.userId,
})).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);
};
onMounted(async () => {
acquiredItems.value = (await marbasAxiosInstance.get<AcquiredMarketItem[]>(endpoint)).data.filter(item => item.remaining > 0);
});
return { items, addAcquiredItem, removeAcquiredItem };
});