import { API_PATHS } from "@/api/api-paths"; import { apiGet, apiPost } from "@/api/api"; import { handleApiResponse, handlePaginatedResponse } from "@/api/handle-api-response"; import { mapAccount, mapAccountListItems, mapAccountToBackend, } from "@/domain/accounts/mappers/account-mapper"; import type { Account, AccountsListParams, AccountsListResult, } from "@/domain/accounts/types/account"; function buildSearchParams(params: AccountsListParams): Record { return { search: params.search ?? "", page: params.page ?? 1, pageSize: params.pageSize ?? 12, }; } export const accountsApi = { getList: async (params: AccountsListParams = {}): Promise => { const searchParams = buildSearchParams(params); const data = await apiGet(API_PATHS.account.getList, { searchParams }); const paginated = handlePaginatedResponse(data, { page: params.page, pageSize: params.pageSize, }); return { items: mapAccountListItems(paginated.items), totalCount: paginated.totalCount, page: paginated.page, pageSize: paginated.pageSize, }; }, getById: async (id: string | number): Promise => { const data = await apiGet(API_PATHS.account.getById, { searchParams: { id }, }); return mapAccount(handleApiResponse(data)); }, create: async (payload: unknown): Promise => { const data = await apiPost( API_PATHS.account.addAccounts, mapAccountToBackend(payload), ); return mapAccount(handleApiResponse(data)); }, update: async (id: string | number, payload: unknown): Promise => { const data = await apiPost( API_PATHS.account.editAccounts, mapAccountToBackend({ ...(payload as object), id }), ); return mapAccount(handleApiResponse(data)); }, delete: async (id: string | number): Promise => { await apiGet(API_PATHS.account.deleteAccounts, { searchParams: { id }, }); }, };