create user pages crud also update pages ui build order and car ,driver first page interfase create model layer to componants
This commit is contained in:
@@ -1,6 +1,3 @@
|
||||
|
||||
// All authentication API calls in one place.
|
||||
|
||||
import { post } from "./api";
|
||||
import type { LoginResponse } from "../types/auth";
|
||||
|
||||
|
||||
2
services/car.service.ts
Normal file
2
services/car.service.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
export const carService = {};
|
||||
1
services/driver.service.ts
Normal file
1
services/driver.service.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const driverService = {};
|
||||
@@ -1,4 +1,7 @@
|
||||
export { request, get, post, put, del, ApiError } from "./api";
|
||||
export { authService } from "./auth.service";
|
||||
export { dashboardService } from "./dashboard.service";
|
||||
export { clientService } from "./client.service";
|
||||
export { clientService } from "./client.service";
|
||||
export {userService} from "./user.service";
|
||||
export { carService } from "./car.service";
|
||||
export { driverService } from "./driver.service";
|
||||
45
services/order.service.ts
Normal file
45
services/order.service.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
// services/order.service.ts
|
||||
import { get, post, put, del } from "./api";
|
||||
import type {
|
||||
Order,
|
||||
CreateOrderPayload,
|
||||
UpdateOrderPayload,
|
||||
UpdateOrderStatusPayload,
|
||||
TransferOrderPayload,
|
||||
OrdersResponse,
|
||||
} from "../types/order";
|
||||
|
||||
export const orderService = {
|
||||
/** Get all orders (paginated) */
|
||||
getAll: (params?: Record<string, string | number>) => {
|
||||
const qs = params
|
||||
? "?" + new URLSearchParams(params as Record<string, string>).toString()
|
||||
: "";
|
||||
return get<OrdersResponse>(`orders${qs}`);
|
||||
},
|
||||
|
||||
/** Get order by ID */
|
||||
getById: (id: string) => get<Order>(`orders/${id}`),
|
||||
|
||||
/** Create new order */
|
||||
create: (payload: CreateOrderPayload) =>
|
||||
post<Order>("orders", payload),
|
||||
|
||||
/** Update order metadata */
|
||||
update: (id: string, payload: UpdateOrderPayload) =>
|
||||
put<Order>(`orders/${id}`, payload),
|
||||
|
||||
/** Update order status with optional reason */
|
||||
updateStatus: (id: string, payload: UpdateOrderStatusPayload) =>
|
||||
put<Order>(`orders/${id}/status`, payload),
|
||||
|
||||
/** Transfer order to a different trip */
|
||||
transfer: (id: string, payload: TransferOrderPayload) =>
|
||||
put<Order>(`orders/${id}/transfer`, payload),
|
||||
|
||||
/** Soft-delete an order */
|
||||
delete: (id: string) => del<void>(`orders/${id}`),
|
||||
|
||||
/** Get archived orders */
|
||||
getArchived: () => get<OrdersResponse>("orders/archived"),
|
||||
};
|
||||
55
services/user.service.ts
Normal file
55
services/user.service.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
// خدمة المستخدمين — كل نداءات الـ API الخاصة بالمستخدمين تكون هنا فقط
|
||||
import { get, post, put, del } from "./api";
|
||||
import type { ApiListResponse, User, UserFormData } from "../types/user";
|
||||
import type { Role } from "../types/role";
|
||||
import type { Branch } from "../types/branch";
|
||||
|
||||
/** نوع الاستجابة لعملية واحدة على مستخدم */
|
||||
export interface UserResponse {
|
||||
data: User;
|
||||
}
|
||||
|
||||
/** بناء query string لجلب المستخدمين مع البحث والصفحات */
|
||||
function buildUsersQuery(page: number, search: string): string {
|
||||
return `?page=${page}&limit=10${search ? `&search=${encodeURIComponent(search)}` : ""}`;
|
||||
}
|
||||
|
||||
export const userService = {
|
||||
/** جلب قائمة المستخدمين مع إمكانية البحث والتصفح بين الصفحات */
|
||||
getAll: (page: number, search: string, token: string | null) =>
|
||||
get<ApiListResponse<User>>(`users${buildUsersQuery(page, search)}`, token),
|
||||
|
||||
/** إنشاء مستخدم جديد */
|
||||
create: (data: Omit<UserFormData, "password"> & { password: string }, token: string | null) =>
|
||||
post<UserResponse>("users", buildPayload(data, true), token),
|
||||
|
||||
/** تعديل بيانات مستخدم موجود */
|
||||
update: (id: string, data: UserFormData, token: string | null) =>
|
||||
put<UserResponse>(`users/${id}`, buildPayload(data, false), token),
|
||||
|
||||
/** حذف مستخدم */
|
||||
delete: (id: string, token: string | null) =>
|
||||
del<void>(`users/${id}`, token),
|
||||
|
||||
/** جلب قائمة الأدوار لاستخدامها في نموذج المستخدم */
|
||||
getRoles: (token: string | null) =>
|
||||
get<{ data: { data: Role[] } }>("role?limit=100", token),
|
||||
|
||||
/** جلب قائمة الفروع لاستخدامها في نموذج المستخدم */
|
||||
getBranches: (token: string | null) =>
|
||||
get<{ data: { data: Branch[] } }>("branches?limit=100", token),
|
||||
};
|
||||
|
||||
/** تحويل بيانات النموذج إلى payload مناسب للـ API */
|
||||
function buildPayload(data: UserFormData, isNew: boolean): Record<string, string> {
|
||||
const payload: Record<string, string> = {
|
||||
name: data.name.trim(),
|
||||
phone: data.phone.trim(),
|
||||
roleId: data.roleId,
|
||||
branchId: data.branchId,
|
||||
};
|
||||
if (data.email) payload.email = data.email.trim();
|
||||
if (isNew && data.password) payload.password = data.password;
|
||||
else if (!isNew && data.password) payload.password = data.password;
|
||||
return payload;
|
||||
}
|
||||
Reference in New Issue
Block a user