Files
makemd/dashboard/src/services/monitoringDataSource.ts

81 lines
2.3 KiB
TypeScript
Raw Permalink Normal View History

import { http } from './http';
export interface MonitoringItem {
id: string;
name: string;
status: string;
createdAt: string;
updatedAt?: string;
}
export interface MonitoringDataSource {
list(): Promise<MonitoringItem[]>;
create(data: Partial<MonitoringItem>): Promise<MonitoringItem>;
update(id: string, data: Partial<MonitoringItem>): Promise<MonitoringItem>;
delete(id: string): Promise<void>;
}
class MonitoringApiDataSource implements MonitoringDataSource {
async list() {
const response = await http.get('/api/monitoring/list');
return response.data.data;
}
async create(data: Partial<MonitoringItem>) {
const response = await http.post('/api/monitoring', data);
return response.data.data;
}
async update(id: string, data: Partial<MonitoringItem>) {
const response = await http.put(`/api/monitoring/${id}`, data);
return response.data.data;
}
async delete(id: string) {
await http.delete(`/api/monitoring/${id}`);
}
}
class MonitoringMockDataSource implements MonitoringDataSource {
private items: MonitoringItem[] = [
{ id: '1', name: '示例项目 1', status: 'ACTIVE', createdAt: new Date().toISOString() },
{ id: '2', name: '示例项目 2', status: 'INACTIVE', createdAt: new Date().toISOString() },
];
async list() {
return this.items;
}
async create(data: Partial<MonitoringItem>) {
const item: MonitoringItem = {
id: String(this.items.length + 1),
name: data.name || '',
status: data.status || 'ACTIVE',
createdAt: new Date().toISOString(),
};
this.items.push(item);
return item;
}
async update(id: string, data: Partial<MonitoringItem>) {
const index = this.items.findIndex(item => item.id === id);
if (index >= 0) {
this.items[index] = { ...this.items[index], ...data };
return this.items[index];
}
throw new Error('Item not found');
}
async delete(id: string) {
const index = this.items.findIndex(item => item.id === id);
if (index >= 0) {
this.items.splice(index, 1);
}
}
}
const useMock = process.env.NODE_ENV === 'development' || process.env.REACT_APP_USE_MOCK === 'true';
export const MonitoringDataSource: MonitoringDataSource = useMock
? new MonitoringMockDataSource()
: new MonitoringApiDataSource();