diff --git a/docs/mammon-api.yml b/docs/mammon-api.yml index e6e6fd8..288933d 100644 --- a/docs/mammon-api.yml +++ b/docs/mammon-api.yml @@ -415,66 +415,6 @@ paths: $ref: "#/components/schemas/AcquisitionResponse" components: schemas: - IskRuleClauseResponse: - allOf: - - $ref: "#/components/schemas/RuleClauseResponse" - - type: object - properties: - fromLedgerRef: - type: string - pattern: "[a-z]+(-[a-z]+)*" - toLedgerRef: - type: string - pattern: "[a-z]+(-[a-z]+)*" - required: - - fromLedgerRef - - toLedgerRef - ItemExchangeRuleClauseResponse: - allOf: - - $ref: "#/components/schemas/RuleClauseResponse" - - type: object - properties: - rate: - type: string - enum: - - NONE - - VALUE - - JITA_BUY - - JITA_SELL - - EVE_ESTIMATE - fromLedgerRef: - type: string - pattern: "[a-z]+(-[a-z]+)*" - toLedgerRef: - type: string - pattern: "[a-z]+(-[a-z]+)*" - required: - - fromLedgerRef - - rate - - toLedgerRef - RuleClauseResponse: - discriminator: - propertyName: type - mapping: - ISK: "#/components/schemas/IskRuleClauseResponse" - ITEM_EXCHANGE: "#/components/schemas/ItemExchangeRuleClauseResponse" - oneOf: - - $ref: "#/components/schemas/IskRuleClauseResponse" - - $ref: "#/components/schemas/ItemExchangeRuleClauseResponse" - properties: - type: - type: string - required: - - type - RuleResponse: - type: object - properties: - clauses: - type: array - items: - $ref: "#/components/schemas/RuleClauseResponse" - required: - - clauses UpdateRuleBookRequest: type: object properties: @@ -487,14 +427,12 @@ components: items: type: string pattern: "[a-z]+(-[a-z]+)*" - rules: - type: object - additionalProperties: - $ref: "#/components/schemas/RuleResponse" + script: + type: string required: - ledgerRefs - name - - rules + - script - usedForAcquisitions RuleBookResponse: type: object @@ -511,15 +449,13 @@ components: items: type: string pattern: "[a-z]+(-[a-z]+)*" - rules: - type: object - additionalProperties: - $ref: "#/components/schemas/RuleResponse" + script: + type: string required: - ledgerRefs - name - ruleBookId - - rules + - script - usedForAcquisitions UpdateMainLedgerRequest: type: object @@ -623,14 +559,12 @@ components: items: type: string pattern: "[a-z]+(-[a-z]+)*" - rules: - type: object - additionalProperties: - $ref: "#/components/schemas/RuleResponse" + script: + type: string required: - ledgerRefs - name - - rules + - script - usedForAcquisitions CreateMainLedgerRequest: type: object diff --git a/src/components/SliderCheckbox.vue b/src/components/SliderCheckbox.vue index 5577871..fd032b9 100644 --- a/src/components/SliderCheckbox.vue +++ b/src/components/SliderCheckbox.vue @@ -12,7 +12,8 @@ const modelValue = defineModel({ default: false }); \ No newline at end of file diff --git a/src/generated/mammon/api.ts b/src/generated/mammon/api.ts index 0ea3c2e..09dd446 100644 --- a/src/generated/mammon/api.ts +++ b/src/generated/mammon/api.ts @@ -71,14 +71,8 @@ export interface CreateRuleBookRequest { 'name': string; 'usedForAcquisitions': boolean; 'ledgerRefs': Array; - 'rules': { [key: string]: RuleResponse; }; + 'script': string; } -export interface IskRuleClauseResponse extends RuleClauseResponse { - 'fromLedgerRef': string; - 'toLedgerRef': string; -} - - export interface IskTransferResponse extends TransferResponse { 'fromLedgerId': string; 'toLedgerId': string; @@ -88,22 +82,6 @@ export interface ItemBalanceResponse { 'typeId': number; 'quantity': number; } -export interface ItemExchangeRuleClauseResponse extends RuleClauseResponse { - 'rate': ItemExchangeRuleClauseResponseRateEnum; - 'fromLedgerRef': string; - 'toLedgerRef': string; -} - -export const ItemExchangeRuleClauseResponseRateEnum = { - None: 'NONE', - Value: 'VALUE', - JitaBuy: 'JITA_BUY', - JitaSell: 'JITA_SELL', - EveEstimate: 'EVE_ESTIMATE', -} as const; - -export type ItemExchangeRuleClauseResponseRateEnum = typeof ItemExchangeRuleClauseResponseRateEnum[keyof typeof ItemExchangeRuleClauseResponseRateEnum]; - export interface ItemTransferResponse extends TransferResponse { 'fromLedgerId': string; 'toLedgerId': string; @@ -125,15 +103,7 @@ export interface RuleBookResponse { 'name': string; 'usedForAcquisitions': boolean; 'ledgerRefs': Array; - 'rules': { [key: string]: RuleResponse; }; -} -/** - * @type RuleClauseResponse - */ -export type RuleClauseResponse = { type: 'ISK' } & IskRuleClauseResponse | { type: 'ITEM_EXCHANGE' } & ItemExchangeRuleClauseResponse; - -export interface RuleResponse { - 'clauses': Array; + 'script': string; } export interface SetCharacterRuleBookRequest { 'ruleBookId': string; @@ -162,7 +132,7 @@ export interface UpdateRuleBookRequest { 'name': string; 'usedForAcquisitions': boolean; 'ledgerRefs': Array; - 'rules': { [key: string]: RuleResponse; }; + 'script': string; } /** diff --git a/src/pages/rules/EditCharacterRuleBook.vue b/src/pages/rules/EditCharacterRuleBook.vue index e3d3d1a..3bd7e80 100644 --- a/src/pages/rules/EditCharacterRuleBook.vue +++ b/src/pages/rules/EditCharacterRuleBook.vue @@ -88,7 +88,7 @@ watch(useRoute(), async route => {
{{ref}}: - +
diff --git a/src/pages/rules/EditRuleBook.vue b/src/pages/rules/EditRuleBook.vue index 11d7285..3c4ac72 100644 --- a/src/pages/rules/EditRuleBook.vue +++ b/src/pages/rules/EditRuleBook.vue @@ -3,15 +3,16 @@ import {useRoute, useRouter} from "vue-router"; import {ref, watch} from "vue"; import {useDebounceFn} from "@vueuse/core"; import log from "loglevel"; -import {activityTypes, RuleInput, Rules, useRuleBooksStore} from "@/rules"; +import {useRuleBooksStore} from "@/rules"; import {PlusIcon, TrashIcon} from "@heroicons/vue/24/outline"; import {routeNames} from "@/routes"; -import {Dropdown} from "@/components"; +import {SliderCheckbox} from "@/components"; const ruleBookId = ref(); const name = ref(''); +const usedForAcquisitions = ref(false); const ledgerRefs = ref([]); -const rules = ref({}); +const script = ref(''); const {findById, create, update, refresh} = useRuleBooksStore(); const router = useRouter(); @@ -20,16 +21,18 @@ const save = async () => { if (!ruleBookId.value) { const created = await create({ name: name.value, + usedForAcquisitions: usedForAcquisitions.value, ledgerRefs: ledgerRefs.value, - rules: rules.value + script: script.value }) await router.push({ name: routeNames.editRuleBook, params: {ruleBookId: created.ruleBookId}}) } else { await update(ruleBookId.value, { name: name.value, + usedForAcquisitions: usedForAcquisitions.value, ledgerRefs: ledgerRefs.value, - rules: rules.value + script: script.value }) } } @@ -57,14 +60,16 @@ watch(useRoute(), async route => { ruleBookId.value = id; name.value = ruleBook?.name ?? ''; - ledgerRefs.value = [...ruleBook?.ledgerRefs]; - rules.value = {...ruleBook?.rules}; // TODO fully clone rules + usedForAcquisitions.value = ruleBook?.usedForAcquisitions ?? false; + ledgerRefs.value = [...(ruleBook?.ledgerRefs ?? [])]; + script.value = ruleBook?.script ?? ''; log.info('Loaded rule book:', ruleBook); } else { ruleBookId.value = undefined; name.value = ''; + usedForAcquisitions.value = false; ledgerRefs.value = []; - rules.value = {}; + script.value = ''; log.info('No rule book to load'); } }, { immediate: true }) @@ -76,12 +81,16 @@ watch(useRoute(), async route => {
Name: +
Ledgers References: -
+
- +
@@ -89,14 +98,10 @@ watch(useRoute(), async route => {
-
- - - - - +
+ Script: +
@@ -110,11 +115,8 @@ watch(useRoute(), async route => { \ No newline at end of file diff --git a/src/rules/LedgerRefSelect.vue b/src/rules/LedgerRefSelect.vue deleted file mode 100644 index 918d9f9..0000000 --- a/src/rules/LedgerRefSelect.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/src/rules/RuleClauseInput.vue b/src/rules/RuleClauseInput.vue deleted file mode 100644 index cfdd399..0000000 --- a/src/rules/RuleClauseInput.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/src/rules/RuleInput.vue b/src/rules/RuleInput.vue deleted file mode 100644 index dec8253..0000000 --- a/src/rules/RuleInput.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - - - diff --git a/src/rules/index.ts b/src/rules/index.ts index 060eedf..5058ecb 100644 --- a/src/rules/index.ts +++ b/src/rules/index.ts @@ -1,3 +1 @@ export * from "./rules"; - -export {default as RuleInput} from './RuleInput.vue'; \ No newline at end of file diff --git a/src/rules/rules.ts b/src/rules/rules.ts index 05afe80..59afbc9 100644 --- a/src/rules/rules.ts +++ b/src/rules/rules.ts @@ -2,39 +2,13 @@ import {characterRuleBookApi, ruleBookApi} from "@/mammon"; import { CharacterRuleBookResponse, CreateRuleBookRequest, - ItemExchangeRuleClauseResponseRateEnum, RuleBookResponse, - RuleResponse, SetCharacterRuleBookRequest } from "@/generated/mammon"; import {defineStore} from "pinia"; import {ref, triggerRef} from "vue"; -export const activityTypes = { - itemBought: {key: "ITEM_BOUGHT", name: "Item Bought"}, - itemSold: {key: "ITEM_SOLD", name: "Item Sold"}, - itemAcquiredManually: {key: "ITEM_ACQUIRED_MANUALLY", name: "Item Acquired Manually"}, - itemConsumedManually: {key: "ITEM_CONSUME_MANUALLY", name: "Item Consumed Manually"}, - bountyEarned: {key: "BOUNTY_EARNED", name: "Bounty Earned"}, - // itemManufactured: {id: "ITEM_MANUFACTURED", name: "Item Manufactured"} -} as const; - -export type Activity = { key: ActivityType, name: string } -export type ActivityType = typeof activityTypes[keyof typeof activityTypes]['key']; -export type Rules = { [key: ActivityType]: RuleResponse; }; -export type RuleBook = RuleBookResponse & { rules: Rules } - -export const activityTypeHasRate = (key: ActivityType): boolean => key !== activityTypes.bountyEarned.key; - -export const ratesTypes = { - None: {key: "NONE", name: "0 ISK"}, - Value: {key: "VALUE", name: "Value"}, - JitaBuy: {key: "JITA_BUY", name: "Jita Buy Order"}, - JitaSell: {key: "JITA_SELL", name: "Jita Sell Order"}, - EveEstimate: {key: "EVE_ESTIMATE", name: "Eve Estimate"}, -} as const; - -export type Rate = { key: ItemExchangeRuleClauseResponseRateEnum, name: string } +export type RuleBook = RuleBookResponse; export const useRuleBooksStore = defineStore('rule-books', () => { const ruleBooks = ref([]); @@ -59,7 +33,7 @@ export const useRuleBooksStore = defineStore('rule-books', () => { const create = (ruleBook: CreateRuleBookRequest) => ruleBookApi.createRuleBook(ruleBook).then(response => addRuleBook(response.data)); const update = (ruleBookId: string, ruleBook: CreateRuleBookRequest) => ruleBookApi.updateRuleBook(ruleBookId, ruleBook).then(response => replaceRuleBook(response.data)); - const refresh = () => ruleBookApi.findAllRuleBooks().then(response => ruleBooks.value = response.data as RuleBook[]); + const refresh = () => ruleBookApi.findAllRuleBooks().then(response => ruleBooks.value = response.data); refresh(); @@ -68,7 +42,7 @@ export const useRuleBooksStore = defineStore('rule-books', () => { export const findCharacterRuleBookByCharacterId = (characterId: number): Promise => characterRuleBookApi.findCharacterRuleBookByCharacterId(characterId) .then(response => response.data) - .catch(() => ({characterId, rules: {}})); + .catch(() => ({characterId, ruleBookId: '', bindings: {}})); export const setCharacterRuleBookForCharacter = (characterId: number, ruleBook: SetCharacterRuleBookRequest): Promise => characterRuleBookApi.setCharacterRuleBookForCharacter(characterId, ruleBook) .then(response => response.data); \ No newline at end of file