All files / libs/payout-definition/state/src/lib/rules rules.api-client.ts

0% Statements 0/55
0% Branches 0/1
0% Functions 0/1
0% Lines 0/55

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56                                                                                                               
import { type TokenType } from '@amalia/amalia-lang/tokens/types';
import { http } from '@amalia/core/http/client';
import {
  type CreateRuleRequest,
  type PatchRuleRequest,
  type Plan,
  type Rule,
} from '@amalia/payout-definition/plans/types';

const e = encodeURIComponent;

export class RulesApiClient {
  public static async update(rule: Rule): Promise<Rule> {
    const { data } = await http.put<Rule>(`/rules/${e(rule.id)}`, rule);
    return data;
  }

  public static async delete(ruleId: string): Promise<void> {
    await http.delete(`/rules/${e(ruleId)}`);
  }

  public static async list(): Promise<Rule[]> {
    const { data } = await http.get<Rule[]>(`/rules`);
    return data;
  }

  public static async create(createRuleRequest: CreateRuleRequest): Promise<Rule> {
    const { data } = await http.post<Rule>('/rules', createRuleRequest);
    return data;
  }

  public static async patch({ ruleId, ...request }: PatchRuleRequest & { ruleId: Rule['id'] }): Promise<Rule> {
    const { data } = await http.patch<Rule>(`/rules/${e(ruleId)}`, request);
    return data;
  }

  public static async findRuleIdWhereTokenIsUsed({
    planId,
    tokenType,
    tokenId,
  }: {
    planId: Plan['id'];
    tokenType: TokenType;
    tokenId: string;
  }): Promise<{ ruleId: string | null; fallbackRuleId: string | null }> {
    const { data } = await http.post<{ ruleId: string | null; fallbackRuleId: string | null }>(
      `/plans-v2/${planId}/find-ruleId-where-token-is-used`,
      {
        tokenType,
        tokenId,
      },
    );
    return data;
  }
}