All files / libs/assignments/plans/state/src/lib/api-client plan-assignments.api-client.ts

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

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 57 58 59 60 61 62 63 64 65 66 67 68 69 70                                                                                                                                           
import { type SetRequired } from 'type-fest';

import { http } from '@amalia/core/http/client';
import {
  type DeletePlanAssignmentsRequest,
  type PlanAssignment,
  type UpdatePlanAssignmentRequest,
  type UpdatePlanAssignmentsRequest,
  type UpsertPlanAssignmentsDryRunResponse,
  type UpsertPlanAssignmentsRequest,
  type ValidatePlanAssignmentsCsvRequest,
} from '@amalia/payout-definition/plans/types';

export class PlanAssignmentsApiClient {
  public static async getPlansAssignments<TRelations extends 'user'[] = []>({
    planIds,
    relations = [] as unknown as TRelations,
  }: {
    planIds: string[];
    relations?: TRelations;
  }): Promise<SetRequired<PlanAssignment, TRelations[number]>[]> {
    const { data } = await http.get<SetRequired<PlanAssignment, TRelations[number]>[]>('/plan-assignments', {
      params: {
        planId: planIds,
        relations: relations.join(',') || undefined,
      },
    });

    return data;
  }

  public static async getPlanAssignments<TRelations extends 'user'[] = []>({
    planId,
    relations = [] as unknown as TRelations,
  }: {
    planId: string;
    relations?: TRelations;
  }) {
    return this.getPlansAssignments<TRelations>({ planIds: [planId], relations });
  }

  public static async upsertPlanAssignmentsDryRun(
    csvRows: ValidatePlanAssignmentsCsvRequest['csvRows'],
  ): Promise<UpsertPlanAssignmentsDryRunResponse> {
    return (
      await http.post<UpsertPlanAssignmentsDryRunResponse>('/plan-assignments/validate', {
        csvRows,
      } satisfies ValidatePlanAssignmentsCsvRequest)
    ).data;
  }

  public static async upsertPlanAssignments(
    planAssignments: UpsertPlanAssignmentsRequest['planAssignments'],
  ): Promise<PlanAssignment[]> {
    return (
      await http.post<PlanAssignment[]>('/plan-assignments', { planAssignments } satisfies UpsertPlanAssignmentsRequest)
    ).data;
  }

  public static async updatePlanAssignments(planAssignments: UpdatePlanAssignmentRequest[]): Promise<PlanAssignment> {
    return (
      await http.patch<PlanAssignment>('/plan-assignments', { planAssignments } satisfies UpdatePlanAssignmentsRequest)
    ).data;
  }

  public static async deletePlanAssignments(planAssignmentIds: PlanAssignment['id'][]): Promise<void> {
    await http.delete('/plan-assignments', { data: { planAssignmentIds } satisfies DeletePlanAssignmentsRequest });
  }
}