From 653f7dbeeb3f8bf658b2b2a493b27c95a382873b Mon Sep 17 00:00:00 2001 From: Sirttas Date: Sat, 6 Jun 2026 15:53:54 +0200 Subject: [PATCH] acquisition ui --- src/mammon/mammonService.ts | 2 + src/market/acquisition/AcquiredType.ts | 4 +- .../acquisition/AcquisitionResultTable.vue | 5 +- src/market/acquisition/acquisition.ts | 60 ++++++++++--------- src/market/type/MarketType.ts | 10 ++-- src/market/type/MarketTypeInput.vue | 2 +- src/pages/market/Acquisitions.vue | 13 ++-- 7 files changed, 54 insertions(+), 42 deletions(-) diff --git a/src/mammon/mammonService.ts b/src/mammon/mammonService.ts index 22c400c..8291789 100644 --- a/src/mammon/mammonService.ts +++ b/src/mammon/mammonService.ts @@ -1,6 +1,7 @@ import {logResource} from "@/service"; import axios from "axios"; import { + AcquisitionApi, ActivityApi, CharacterApi, CharacterRuleBookApi, @@ -29,3 +30,4 @@ export const ruleBookApi = new RuleBookApi(undefined, mammonUrl, mammonAxiosInst export const characterRuleBookApi = new CharacterRuleBookApi(undefined, mammonUrl, mammonAxiosInstance); export const activityApi = new ActivityApi(undefined, mammonUrl, mammonAxiosInstance); export const processingApi = new ProcessingApi(undefined, mammonUrl, mammonAxiosInstance); +export const acquisitionApi = new AcquisitionApi(undefined, mammonUrl, mammonAxiosInstance); diff --git a/src/market/acquisition/AcquiredType.ts b/src/market/acquisition/AcquiredType.ts index cece1df..b8d42c9 100644 --- a/src/market/acquisition/AcquiredType.ts +++ b/src/market/acquisition/AcquiredType.ts @@ -1,7 +1,7 @@ import { MarketType } from ".."; -import { MarbasAcquiredType } from "./acquisition"; +import { RawAcquiredType } from "./acquisition"; -export type AcquiredType = Omit & { +export type AcquiredType = Omit & { type: MarketType, buy: number, sell: number diff --git a/src/market/acquisition/AcquisitionResultTable.vue b/src/market/acquisition/AcquisitionResultTable.vue index 3889cf7..752385b 100644 --- a/src/market/acquisition/AcquisitionResultTable.vue +++ b/src/market/acquisition/AcquisitionResultTable.vue @@ -6,9 +6,10 @@ import {useStorage} from '@vueuse/core'; import {computed, ref} from 'vue'; import {AcquiredType} from './AcquiredType'; import AcquisitionQuantilsTooltip from './AcquisitionQuantilsTooltip.vue'; +import {formatEveDate, formatIsk, percentFormater} from "@/formaters.ts"; type Result = { - id: number; + id: string; type: MarketType; name: string; buy: number; @@ -97,7 +98,7 @@ const { sortedArray, headerProps, showColumn } = useSort(computed(() => const precentProfit = marketTaxStore.calculateProfit(price, first.sell); list.push({ - id: typeID, + id: typeID.toString(), type: first.type, name: first.type.name, buy: first.buy, diff --git a/src/market/acquisition/acquisition.ts b/src/market/acquisition/acquisition.ts index 1003b91..513c454 100644 --- a/src/market/acquisition/acquisition.ts +++ b/src/market/acquisition/acquisition.ts @@ -1,41 +1,43 @@ -import { defineStore } from "pinia"; -import { computed, ref } from "vue"; +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([]); // TODO + const acquiredTypes = ref([]); const types = computed(() => acquiredTypes.value.filter(item => item.remaining > 0)); - const addAcquiredType = async (type: number, quantity: number, price: number, source?: AcquiredTypeSource) => { - const newItem = []; - acquiredTypes.value = [...acquiredTypes.value, newItem]; - }; - const removeAcquiredType = async (id: number, quantity: number) => { - const found = acquiredTypes.value.find(t => t.id === id); + // 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) => {}; - if (!found) { - return 0; - } - - const item = { - ...found, - remaining: Math.max(0, found.remaining - quantity) - }; - - acquiredTypes.value = acquiredTypes.value.map(i => { - if (i.id === item.id) { - return item; - } else { - return i; - } - }); - }; - - const refresh = () => {} + const refresh = () => acquisitionApi.findAllAcquisitions() + .then(response => acquiredTypes.value = response.data.map(toAcquiredType)); refresh(); return { acquiredTypes: types, addAcquiredType, removeAcquiredType, refresh }; -}); \ No newline at end of file +}); diff --git a/src/market/type/MarketType.ts b/src/market/type/MarketType.ts index 3f37467..1a8dd0a 100644 --- a/src/market/type/MarketType.ts +++ b/src/market/type/MarketType.ts @@ -1,7 +1,7 @@ import {esiAxiosInstance} from '@/service'; export type MarketType = { - type_id: number; + id: number; group_id: number; market_group_id: number; name: string; @@ -19,9 +19,11 @@ const fetchType = (id: number): Promise => { if (cache.has(id)) { return Promise.resolve(cache.get(id)!); } - return esiAxiosInstance.get(`/universe/types/${id}/`).then(r => { - cache.set(id, r.data); - return r.data; + return esiAxiosInstance.get & { type_id: number }>(`/universe/types/${id}/`).then(r => { + const { type_id, ...rest } = r.data; + const marketType: MarketType = { id: type_id, ...rest }; + cache.set(id, marketType); + return marketType; }); }; diff --git a/src/market/type/MarketTypeInput.vue b/src/market/type/MarketTypeInput.vue index 9d37962..0163228 100644 --- a/src/market/type/MarketTypeInput.vue +++ b/src/market/type/MarketTypeInput.vue @@ -89,7 +89,7 @@ watchEffect(async () => {