feat(F-186): completed feature
This commit is contained in:
@@ -12,14 +12,14 @@ async function apiFetch<T>(path: string, init?: RequestInit): Promise<T> {
|
||||
},
|
||||
});
|
||||
if (!res.ok) {
|
||||
const err = await res.json().catch(() => ({ message: res.statusText })) as {
|
||||
const err = (await res.json().catch(() => ({ message: res.statusText }))) as {
|
||||
message?: string;
|
||||
error?: { message?: string; code?: string };
|
||||
};
|
||||
throw Object.assign(
|
||||
new Error(err.error?.message ?? err.message ?? 'Request failed'),
|
||||
{ status: res.status, code: err.error?.code },
|
||||
);
|
||||
throw Object.assign(new Error(err.error?.message ?? err.message ?? 'Request failed'), {
|
||||
status: res.status,
|
||||
code: err.error?.code,
|
||||
});
|
||||
}
|
||||
return res.json() as Promise<T>;
|
||||
}
|
||||
@@ -41,11 +41,13 @@ export const posApi = {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ openingCashCents }),
|
||||
}),
|
||||
/** Load touch category navigation and four terminal quick products. */
|
||||
/** Load touch category navigation and eight terminal quick products. */
|
||||
touchCatalog: <T>() => apiFetch<T>('/pos/catalog/touch'),
|
||||
/** List products by query. */
|
||||
searchProducts: (q: string, storeId?: string, limit = 20) =>
|
||||
apiFetch(`/pos/products/search?q=${encodeURIComponent(q)}&storeId=${storeId ?? ''}&limit=${limit}`),
|
||||
apiFetch(
|
||||
`/pos/products/search?q=${encodeURIComponent(q)}&storeId=${storeId ?? ''}&limit=${limit}`,
|
||||
),
|
||||
/** Get product by EAN. */
|
||||
productByEan: (ean: string) => apiFetch(`/pos/products/by-ean/${encodeURIComponent(ean)}`),
|
||||
/** Get product by SKU. */
|
||||
@@ -55,10 +57,22 @@ export const posApi = {
|
||||
/** Create an identity customer from the register. */
|
||||
createCustomer: <T>(data: { email: string; displayName?: string; phone?: string }) =>
|
||||
apiFetch<T>('/pos/customers', { method: 'POST', body: JSON.stringify(data) }),
|
||||
/** Atomically confirm a fully allocated sale. */
|
||||
createSale: <T>(data: unknown) =>
|
||||
apiFetch<T>('/pos/sales', { method: 'POST', body: JSON.stringify(data) }),
|
||||
/** Email the immutable generated receipt. */
|
||||
emailReceipt: <T>(orderId: string, email: string) =>
|
||||
apiFetch<T>(`/pos/sales/${encodeURIComponent(orderId)}/receipt/email`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ email }),
|
||||
}),
|
||||
};
|
||||
|
||||
export const authApi = {
|
||||
login: (email: string, password: string) =>
|
||||
apiFetch('/backoffice/auth/login', { method: 'POST', body: JSON.stringify({ email, password }) }),
|
||||
apiFetch('/backoffice/auth/login', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ email, password }),
|
||||
}),
|
||||
logout: () => apiFetch('/backoffice/auth/logout', { method: 'POST' }),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user