import { http } from './http'; export interface MonitoringItem { id: string; name: string; status: string; createdAt: string; updatedAt?: string; } export interface MonitoringDataSource { list(): Promise; create(data: Partial): Promise; update(id: string, data: Partial): Promise; delete(id: string): Promise; } class MonitoringApiDataSource implements MonitoringDataSource { async list() { const response = await http.get('/api/monitoring/list'); return response.data.data; } async create(data: Partial) { const response = await http.post('/api/monitoring', data); return response.data.data; } async update(id: string, data: Partial) { 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) { 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) { 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();