Files
gemory/src/ledger/ledger.ts
T
2026-05-20 00:18:27 +02:00

64 lines
2.7 KiB
TypeScript

import {
CombiningLedgerResponse,
CombiningLedgerResponseTypeEnum,
CreateCombiningLedgerRequest,
CreateMainLedgerRequest,
LedgerResponseTypeEnum,
MainLedgerResponse,
MainLedgerResponseTypeEnum,
UpdateCombiningLedgerRequest,
UpdateMainLedgerRequest
} from "@/generated/mammon";
import {defineStore} from "pinia";
import {ref, triggerRef} from "vue";
import {ledgerControllerApi} from "@/mammon";
export const LedgerTypes = LedgerResponseTypeEnum;
export type LedgerType = LedgerResponseTypeEnum;
export type MainLedger = MainLedgerResponse & {type: MainLedgerResponseTypeEnum}
export type CombiningLedger = CombiningLedgerResponse & {type: CombiningLedgerResponseTypeEnum}
export type Ledger = MainLedger | CombiningLedger;
export const isMain = (ledger: Ledger): ledger is MainLedger => {
return ledger.type === LedgerTypes.Main;
}
export const isCombining = (ledger: Ledger): ledger is CombiningLedger => {
return ledger.type === LedgerTypes.Combining;
}
export const useLedgersStore = defineStore('ledgers', () => {
const ledgers = ref<Ledger[]>([]);
const addLedger = (ledger: Ledger) => {
ledgers.value.push(ledger);
triggerRef(ledgers);
return ledger;
};
const replaceLedger = (ledger: Ledger) => {
const index = ledgers.value.findIndex(l => l.ledgerId === ledger.ledgerId);
if (index !== -1) {
ledgers.value[index] = ledger;
}
triggerRef(ledgers);
return ledger;
};
const findById = (ledgerId: string): Ledger | undefined => ledgers.value.find(l => l.ledgerId === ledgerId);
const findAllById = (ledgerIds: string[]): Ledger[] => ledgerIds.map(findById).filter((x): x is Ledger => x !== undefined)
const createMain = (ledger: CreateMainLedgerRequest) => ledgerControllerApi.createMainLedger(ledger).then(response => addLedger(response.data as Ledger));
const createCombining = (ledger: CreateCombiningLedgerRequest) => ledgerControllerApi.createCombiningLedger(ledger).then(response => addLedger(response.data as Ledger));
const updateMain = (ledgerId: string, ledger: UpdateMainLedgerRequest) => ledgerControllerApi.updateMainLedger(ledgerId, ledger).then(response => replaceLedger(response.data as Ledger));
const updateCombining = (ledgerId: string, ledger: UpdateCombiningLedgerRequest) => ledgerControllerApi.updateCombiningLedger(ledgerId, ledger).then(response => replaceLedger(response.data as Ledger));
const refresh = () => ledgerControllerApi.findAll().then(response => ledgers.value = response.data as Ledger[]);
refresh();
return {ledgers, findById, findAllById, createMain, createCombining, updateMain, updateCombining, refresh};
})