# DriverApp Services

## Tổng quan

Thư mục `DriverApp` chứa các service liên quan đến ứng dụng lái xe (Driver App), được tách biệt khỏi các service nghiệp vụ kinh doanh (Business Operations) để đảm bảo tính rõ ràng và dễ bảo trì.

## Cấu trúc

### 1. DriverAppService

- **Mục đích**: Xử lý logic dashboard và thông tin tổng quan cho lái xe
- **Chức năng chính**:
  - Lấy thông tin dashboard
  - Thông tin chấm công
  - Thông tin xe đang phụ trách

### 2. DriverAppOrderService

- **Mục đích**: Xử lý tất cả các thao tác liên quan đến đơn hàng cho lái xe
- **Chức năng chính**:
  - Tìm kiếm danh sách đơn hàng
  - Lấy thông tin chi tiết đơn hàng
  - Cập nhật trạng thái lấy hàng (Pickup)
  - Cập nhật trạng thái giao hàng (Delivery)
  - Xử lý các trường hợp thất bại (PickupFail, DeliveryFail)

### 3. DriverFinService

- **Mục đích**: Xử lý các vấn đề tài chính liên quan đến lái xe
- **Chức năng chính**:
  - Thông tin tài chính của lái xe
  - Tìm kiếm đơn hàng tài chính

## Lý do tách biệt

### Trước đây

- `OperationService` trong thư mục `Business` xử lý cả logic nghiệp vụ kinh doanh và logic lái xe
- Gây khó khăn trong việc bảo trì và mở rộng
- Không rõ ràng về trách nhiệm của từng service

### Hiện tại

- **OperationService**: Chỉ xử lý logic nghiệp vụ kinh doanh (Search, GetById)
- **DriverAppOrderService**: Xử lý tất cả logic liên quan đến đơn hàng cho lái xe
- **DriverAppService**: Xử lý logic dashboard và thông tin tổng quan
- **DriverFinService**: Xử lý logic tài chính cho lái xe

## API Endpoints

### DriverAppController

- `GET /api/DriverApp/GetDashboard` - Lấy thông tin dashboard
- `GET /api/DriverApp/GetFinancialInfo` - Lấy thông tin tài chính
- `POST /api/DriverApp/SearchFinancialOrders` - Tìm kiếm đơn hàng tài chính
- `POST /api/DriverApp/SearchOrders` - Tìm kiếm đơn hàng
- `GET /api/DriverApp/GetOrder/{id}` - Lấy thông tin đơn hàng theo ID
- `POST /api/DriverApp/Pickup` - Cập nhật trạng thái lấy hàng thành công
- `POST /api/DriverApp/PickupFail` - Cập nhật trạng thái lấy hàng thất bại
- `POST /api/DriverApp/Delivery` - Cập nhật trạng thái giao hàng thành công
- `POST /api/DriverApp/DeliveryFail` - Cập nhật trạng thái giao hàng thất bại

### OperationController (Đã cập nhật)

- `POST /api/Operation/Search` - Tìm kiếm hoạt động (chỉ dành cho Business Operations)
- `GET /api/Operation/GetById` - Lấy thông tin hoạt động theo ID

## Models

### DriverApp Models

- `DriverAppPickupModel` - Model cập nhật trạng thái lấy hàng
- `DriverAppDeliveryModel` - Model cập nhật trạng thái giao hàng
- `DriverAppFailModel` - Model cập nhật trạng thái thất bại

### Business Operations Models (Đã di chuyển)

- `PickupModel`, `DeliveryModel`, `FailModel` - Đã được di chuyển từ Business Operations

## Quyền truy cập

### DriverApp Roles

- `DriverApp.GetDashboard`
- `DriverApp.GetFinancialInfo`
- `DriverApp.SearchFinancialOrders`
- `DriverApp.SearchOrders`
- `DriverApp.GetOrder`
- `DriverApp.Pickup`
- `DriverApp.PickupFail`
- `DriverApp.Delivery`
- `DriverApp.DeliveryFail`

### Operation Roles (Đã cập nhật)

- `Operation.Search`
- `Operation.GetById`

## Lợi ích của cấu trúc mới

1. **Tách biệt rõ ràng trách nhiệm**: Mỗi service có một mục đích cụ thể
2. **Dễ bảo trì**: Khi cần thay đổi logic lái xe, chỉ cần sửa trong DriverApp
3. **Dễ mở rộng**: Có thể thêm các service mới cho DriverApp mà không ảnh hưởng đến Business Operations
4. **Tránh phụ thuộc chéo**: Các module không phụ thuộc lẫn nhau
5. **Code rõ ràng**: Dễ hiểu và dễ debug

## Hướng dẫn sử dụng

### Để thêm chức năng mới cho Driver App

1. Tạo model mới trong `Ladaer.BackEnd/Infrastructures/DTO/Models/DriverApp/`
2. Thêm method vào `IDriverAppOrderService` interface
3. Implement method trong `DriverAppOrderService`
4. Thêm endpoint vào `DriverAppController`
5. Đăng ký service trong `DependencyRegister`

### Để thêm chức năng mới cho Business Operations

1. Tạo model mới trong `Ladaer.BackEnd/Infrastructures/DTO/Models/Business/Operations/`
2. Thêm method vào `IOperationService` interface
3. Implement method trong `OperationService`
4. Thêm endpoint vào `OperationController`
5. Đăng ký service trong `DependencyRegister`
