175 lines
4.3 KiB
Markdown
175 lines
4.3 KiB
Markdown
# API Services Documentation
|
|
|
|
Tất cả logic gọi API đã được tách riêng vào folder `services`. Mỗi service tương ứng với một nhóm API.
|
|
|
|
## Cấu trúc Services
|
|
|
|
```
|
|
src/services/
|
|
├── index.ts # Export tất cả services
|
|
├── auth.service.ts # API xác thực
|
|
├── app-version.service.ts # API quản lý phần mềm
|
|
├── device-comm.service.ts # API thiết bị
|
|
├── command.service.ts # API lệnh
|
|
└── device.service.ts # Helper functions
|
|
```
|
|
|
|
## Cách Sử Dụng
|
|
|
|
### 1. Auth Service (Xác thực)
|
|
|
|
```tsx
|
|
import { authService } from '@/services'
|
|
|
|
// Đăng nhập
|
|
const response = await authService.login({
|
|
username: 'user',
|
|
password: 'pass'
|
|
})
|
|
|
|
// Đăng xuất
|
|
await authService.logout()
|
|
|
|
// Kiểm tra session
|
|
const pingResult = await authService.ping(token)
|
|
|
|
// Thay đổi mật khẩu
|
|
await authService.changePassword({
|
|
currentPassword: 'old',
|
|
newPassword: 'new'
|
|
})
|
|
|
|
// Tạo tài khoản mới (admin)
|
|
await authService.createAccount({
|
|
userName: 'newuser',
|
|
password: 'pass',
|
|
name: 'John Doe',
|
|
roleId: 1,
|
|
accessBuildings: [1, 2, 3]
|
|
})
|
|
```
|
|
|
|
### 2. App Version Service (Quản lý phần mềm)
|
|
|
|
```tsx
|
|
import { appVersionService } from '@/services'
|
|
|
|
// Lấy danh sách agent
|
|
const agents = await appVersionService.getAgentVersion()
|
|
|
|
// Lấy danh sách phần mềm
|
|
const software = await appVersionService.getSoftwareList()
|
|
|
|
// Upload file
|
|
const formData = new FormData()
|
|
formData.append('file', fileInput.files[0])
|
|
await appVersionService.uploadSoftware(formData, (progressEvent) => {
|
|
console.log(`Progress: ${progressEvent.loaded}/${progressEvent.total}`)
|
|
})
|
|
|
|
// Lấy blacklist
|
|
const blacklist = await appVersionService.getBlacklist()
|
|
|
|
// Thêm vào blacklist
|
|
await appVersionService.addBlacklist({ appId: 1, reason: 'virus' })
|
|
|
|
// Xóa khỏi blacklist
|
|
await appVersionService.deleteBlacklist(1)
|
|
```
|
|
|
|
### 3. Device Comm Service (Thiết bị)
|
|
|
|
```tsx
|
|
import { deviceCommService } from '@/services'
|
|
|
|
// Lấy tất cả thiết bị
|
|
const allDevices = await deviceCommService.getAllDevices()
|
|
|
|
// Lấy danh sách phòng
|
|
const rooms = await deviceCommService.getRoomList()
|
|
|
|
// Lấy thiết bị trong phòng
|
|
const devices = await deviceCommService.getDeviceFromRoom('Room A')
|
|
|
|
// Gửi lệnh
|
|
await deviceCommService.sendCommand('Room A', {
|
|
command: 'dir'
|
|
})
|
|
|
|
// Cập nhật agent
|
|
await deviceCommService.updateAgent('Room A', { version: '1.0.0' })
|
|
|
|
// Cài đặt MSI
|
|
await deviceCommService.installMsi('Room A', { msiFileId: 1 })
|
|
```
|
|
|
|
### 4. Command Service (Lệnh)
|
|
|
|
```tsx
|
|
import { commandService } from '@/services'
|
|
|
|
// Lấy danh sách lệnh
|
|
const commands = await commandService.getCommandList()
|
|
|
|
// Thêm lệnh
|
|
await commandService.addCommand({ name: 'cmd1', command: 'echo hello' })
|
|
|
|
// Cập nhật lệnh
|
|
await commandService.updateCommand(1, { name: 'cmd1 updated' })
|
|
|
|
// Xóa lệnh
|
|
await commandService.deleteCommand(1)
|
|
```
|
|
|
|
## Sử dụng với React Query/Hooks
|
|
|
|
### Cách cũ (trực tiếp gọi từ component):
|
|
```tsx
|
|
const { data } = useQueryData({
|
|
queryKey: ["software-version"],
|
|
url: API_ENDPOINTS.APP_VERSION.GET_SOFTWARE,
|
|
})
|
|
```
|
|
|
|
### Cách mới (tách biệt logic):
|
|
|
|
Có thể tạo custom hooks bao quanh services:
|
|
|
|
```tsx
|
|
// hooks/useGetSoftware.ts
|
|
import { useQuery } from '@tanstack/react-query'
|
|
import { appVersionService } from '@/services'
|
|
|
|
export function useGetSoftware() {
|
|
return useQuery({
|
|
queryKey: ['software-version'],
|
|
queryFn: () => appVersionService.getSoftwareList(),
|
|
staleTime: 60 * 1000,
|
|
})
|
|
}
|
|
```
|
|
|
|
Sau đó sử dụng trong component:
|
|
```tsx
|
|
function AppsComponent() {
|
|
const { data, isLoading } = useGetSoftware()
|
|
// ...
|
|
}
|
|
```
|
|
|
|
## Lợi ích của cách sử dụng mới
|
|
|
|
1. **Tách biệt logic** - Logic API nằm riêng, dễ bảo trì
|
|
2. **Tái sử dụng** - Có thể sử dụng service từ bất kỳ nơi
|
|
3. **Dễ test** - Dễ mock services khi viết unit tests
|
|
4. **Centralized error handling** - Có thể xử lý lỗi chung
|
|
5. **Type safety** - TypeScript types cho tất cả API requests/responses
|
|
|
|
## Cải tiến trong tương lai
|
|
|
|
Có thể thêm:
|
|
- Global error handling middleware trong axios
|
|
- Request/response interceptors cho authentication
|
|
- Retry logic cho failed requests
|
|
- Request cancellation
|