refactor(services): 重构服务文件结构,将服务按功能分类到不同目录
- 将服务文件按功能分类到core、ai、analytics、security等目录 - 修复logger导入路径问题,统一使用相对路径 - 更新相关文件的导入路径引用 - 添加新的批量操作组件导出文件 - 修复dashboard页面中的类型错误 - 添加dotenv依赖到package.json
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { http } from './http';
|
||||
/**
|
||||
* [MOCK] 用户资产数据<E695B0><EFBFBD>? * AI注意: 这是Mock实现,不是真实业务逻辑
|
||||
* 仅在USE_MOCK=true时启<E697B6><EFBFBD>? */
|
||||
* [MOCK] 用户资产数据<E695B0>? * AI注意: 这是Mock实现,不是真实业务逻辑
|
||||
* 仅在USE_MOCK=true时启<E697B6>? */
|
||||
|
||||
export type MemberLevel = 'BRONZE' | 'SILVER' | 'GOLD' | 'PLATINUM' | 'DIAMOND';
|
||||
|
||||
@@ -10,15 +11,15 @@ export interface UserAsset {
|
||||
userId: string;
|
||||
userName: string;
|
||||
email: string;
|
||||
userEmail?: string; // <20><EFBFBD>?email 同义
|
||||
userEmail?: string; // <20>?email 同义
|
||||
memberLevel: MemberLevel;
|
||||
points: number;
|
||||
memberScore?: number; // <20><EFBFBD>?points 同义
|
||||
memberScore?: number; // <20>?points 同义
|
||||
totalSpent: number;
|
||||
availableBalance: number;
|
||||
availablePoints?: number; // <20><EFBFBD>?availableBalance 同义
|
||||
availablePoints?: number; // <20>?availableBalance 同义
|
||||
frozenBalance: number;
|
||||
frozenPoints?: number; // <20><EFBFBD>?frozenBalance 同义
|
||||
frozenPoints?: number; // <20>?frozenBalance 同义
|
||||
cashbackBalance?: number;
|
||||
couponCount?: number;
|
||||
totalOrders: number;
|
||||
@@ -61,13 +62,13 @@ export interface PointsRecord {
|
||||
source: string;
|
||||
description: string;
|
||||
createdAt: string;
|
||||
// 额外字段,用<EFBC8C><EFBFBD>?PointsManage 页面
|
||||
// 额外字段,用<EFBC8C>?PointsManage 页面
|
||||
tenantId?: string;
|
||||
shopId?: string;
|
||||
traceId?: string;
|
||||
businessType?: 'TOC' | 'TOB';
|
||||
points?: number; // <20><EFBFBD>?amount 同义
|
||||
sourceType?: string; // <20><EFBFBD>?source 同义
|
||||
points?: number; // <20>?amount 同义
|
||||
sourceType?: string; // <20>?source 同义
|
||||
status?: 'PENDING' | 'CONFIRMED' | 'FROZEN' | 'EXPIRED' | 'CANCELLED';
|
||||
expiredAt?: string;
|
||||
sourceId?: string;
|
||||
@@ -245,51 +246,39 @@ class ApiUserAssetDataSource implements IUserAssetDataSource {
|
||||
private baseUrl = '/api/user-assets';
|
||||
|
||||
async fetchUserAssets(params?: { memberLevel?: string; status?: string; search?: string }): Promise<UserAsset[]> {
|
||||
const response = await fetch(`${this.baseUrl}?${new URLSearchParams(params as any)}`);
|
||||
if (!response.ok) throw new Error('Failed to fetch user assets');
|
||||
return response.json();
|
||||
const response = await http.get(`${this.baseUrl}?${new URLSearchParams(params as any)}`);
|
||||
|
||||
return response.data;
|
||||
}
|
||||
|
||||
async updateUserAsset(id: string, data: Partial<UserAsset>): Promise<UserAsset> {
|
||||
const response = await fetch(`${this.baseUrl}/${id}`, {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(data),
|
||||
});
|
||||
if (!response.ok) throw new Error('Failed to update user asset');
|
||||
return response.json();
|
||||
const response = await http.put(`${this.baseUrl}/${id}`, data);
|
||||
|
||||
return response.data;
|
||||
}
|
||||
|
||||
async fetchMemberLevelConfigs(): Promise<MemberLevelConfig[]> {
|
||||
const response = await fetch(`${this.baseUrl}/member-levels`);
|
||||
if (!response.ok) throw new Error('Failed to fetch member level configs');
|
||||
return response.json();
|
||||
const response = await http.get(`${this.baseUrl}/member-levels`);
|
||||
|
||||
return response.data;
|
||||
}
|
||||
|
||||
async updateMemberLevelConfig(id: string, data: Partial<MemberLevelConfig>): Promise<MemberLevelConfig> {
|
||||
const response = await fetch(`${this.baseUrl}/member-levels/${id}`, {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(data),
|
||||
});
|
||||
if (!response.ok) throw new Error('Failed to update member level config');
|
||||
return response.json();
|
||||
const response = await http.put(`${this.baseUrl}/member-levels/${id}`, data);
|
||||
|
||||
return response.data;
|
||||
}
|
||||
|
||||
async fetchPointsRecords(params?: { userId?: string; type?: string }): Promise<PointsRecord[]> {
|
||||
const response = await fetch(`${this.baseUrl}/points?${new URLSearchParams(params as any)}`);
|
||||
if (!response.ok) throw new Error('Failed to fetch points records');
|
||||
return response.json();
|
||||
const response = await http.get(`${this.baseUrl}/points?${new URLSearchParams(params as any)}`);
|
||||
|
||||
return response.data;
|
||||
}
|
||||
|
||||
async adjustPoints(userId: string, amount: number, reason: string): Promise<PointsRecord> {
|
||||
const response = await fetch(`${this.baseUrl}/points/adjust`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ userId, amount, reason }),
|
||||
});
|
||||
if (!response.ok) throw new Error('Failed to adjust points');
|
||||
return response.json();
|
||||
const response = await http.post(`${this.baseUrl}/points/adjust`, { userId, amount, reason });
|
||||
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user