Files
gemory/src/rules/rules.ts
T
2026-08-08 21:28:23 +02:00

45 lines
1.5 KiB
TypeScript

import {ruleBookApi, ruleScriptApi} from "@/mammon";
import {RuleBookResponse, RuleScopeRequest, RuleScriptRequest, RuleScriptResponse, UpdateRuleBookRequest} from "@/generated/mammon";
import {isAxiosError} from "axios";
import {defineStore} from "pinia";
import {ref} from "vue";
export type RuleBook = RuleBookResponse;
export type RuleScript = RuleScriptResponse;
export type RuleScope = RuleScriptResponse['scope'];
export const emptyScope = (): RuleScopeRequest => ({
ledgers: {},
characters: {},
corporations: {},
walletDivisions: {},
});
export const useRuleBookStore = defineStore('rule-book', () => {
const ruleBook = ref<RuleBook | null>(null);
const refresh = () => ruleBookApi.findRuleBook()
.then(response => ruleBook.value = response.data)
.catch(error => {
if (isAxiosError(error) && error.response?.status === 404) {
ruleBook.value = null;
return;
}
throw error;
});
const update = (scripts: RuleScriptRequest[]) => ruleBookApi.updateRuleBook({scripts} satisfies UpdateRuleBookRequest)
.then(response => ruleBook.value = response.data);
refresh();
return {ruleBook, update};
})
export const fetchScriptDefinitions = (): Promise<string> =>
ruleScriptApi.listScriptDefinitions()
.then(response => Promise.all(
response.data.map(name => ruleScriptApi.getScriptDefinition(name, {responseType: 'text'}).then(r => r.data))
))
.then(definitions => definitions.join('\n'));