first action update user pages .

2-update driver pages [fixed image display and notyfi]
3-update car pages [fixed image]
4-build tripe pages crud
5-build some role pages
6-build audit page
7-update ui compounants
8-update saidebar and topbar
9-cheange view to be ar view
10-cheange stractcher to be app,src
11-add validation layer by yup
12-add api image-proxy to broke image corse bloken
This commit is contained in:
m7amedez5511
2026-06-23 15:54:07 +03:00
parent c1b77f89cd
commit db64b79fe3
140 changed files with 9266 additions and 2449 deletions

View File

@@ -0,0 +1,48 @@
// Mirrors user.service.ts exactly: token parameter, buildPayload, buildQuery.
import { get, post, put, del } from "./api";
import type { ApiResponse, ApiListResponse, Client, ClientFormData } from "@/src/types/client";
/** نوع الاستجابة لعملية واحدة على عميل */
export interface ClientResponse {
data: Client;
}
/** بناء query string لجلب العملاء مع البحث والصفحات */
function buildClientsQuery(page: number, search: string): string {
return `?page=${page}&limit=10${search ? `&search=${encodeURIComponent(search)}` : ""}`;
}
export const clientService = {
/** جلب قائمة العملاء مع إمكانية البحث والتصفح بين الصفحات */
getAll: (page: number, search: string, token: string | null) =>
get<ApiListResponse<Client>>(`client${buildClientsQuery(page, search)}`, token),
/** جلب عميل واحد بالـ ID (مع العناوين المرفقة) */
getById: (id: string, token: string | null) =>
get<ApiResponse<Client>>(`client/${id}`, token),
/** إنشاء عميل جديد */
create: (data: ClientFormData, token: string | null) =>
post<ClientResponse>("client", buildPayload(data), token),
/** تعديل بيانات عميل موجود */
update: (id: string, data: ClientFormData, token: string | null) =>
put<ClientResponse>(`client/${id}`, buildPayload(data), token),
/** حذف عميل */
delete: (id: string, token: string | null) =>
del<void>(`client/${id}`, token),
};
/** تحويل بيانات النموذج إلى payload مناسب للـ API */
function buildPayload(data: ClientFormData): Record<string, string> {
const payload: Record<string, string> = {
name: data.name.trim(),
email: data.email.trim(),
phone: data.phone.trim(),
};
if (data.taxId?.trim()) payload.taxId = data.taxId.trim();
if (data.notes?.trim()) payload.notes = data.notes.trim();
return payload;
}