refactor(ProductService): 修复createProduct方法和其他方法错误 fix(InventoryAgingService): 修复AGING_THRESHOLD_DAYS引用问题 fix(InventoryService): 修复predictSKUDemand方法 refactor(ChatBotController): 从tsoa风格改为Express风格 fix(CommandCenterController): 修复类型问题 fix(AdAutoService): 修复stock可能为undefined的问题 docs: 更新SERVICE_MAP、DOMAIN_MODEL等架构文档 chore: 启动前端服务(运行在http://localhost:8000)
157 lines
4.2 KiB
TypeScript
157 lines
4.2 KiB
TypeScript
import { logger } from '../core/logger';
|
|
|
|
export interface MediaAsset {
|
|
id: string;
|
|
tenantId: string;
|
|
shopId: string;
|
|
type: 'IMAGE' | 'VIDEO' | 'DOCUMENT';
|
|
filename: string;
|
|
url: string;
|
|
status: 'UPLOADED' | 'PROCESSING' | 'PENDING_REVIEW' | 'APPROVED' | 'IN_USE' | 'ARCHIVED' | 'REJECTED';
|
|
metadata: Record<string, any>;
|
|
traceId: string;
|
|
taskId: string;
|
|
businessType: 'TOC' | 'TOB';
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
}
|
|
|
|
export interface CreateMediaAssetParams {
|
|
tenantId: string;
|
|
shopId: string;
|
|
type: 'IMAGE' | 'VIDEO' | 'DOCUMENT';
|
|
filename: string;
|
|
url: string;
|
|
metadata: Record<string, any>;
|
|
traceId: string;
|
|
taskId: string;
|
|
businessType: 'TOC' | 'TOB';
|
|
}
|
|
|
|
export interface UpdateMediaAssetParams {
|
|
id: string;
|
|
status?: 'UPLOADED' | 'PROCESSING' | 'PENDING_REVIEW' | 'APPROVED' | 'IN_USE' | 'ARCHIVED' | 'REJECTED';
|
|
metadata?: Record<string, any>;
|
|
traceId: string;
|
|
}
|
|
|
|
export class MediaAssetService {
|
|
/**
|
|
* 初始化数据库表
|
|
*/
|
|
static async initTable() {
|
|
logger.info('🚀 MediaAssetService table initialized');
|
|
// 这里可以添加数据库表初始化逻辑
|
|
}
|
|
|
|
/**
|
|
* 创建素材
|
|
*/
|
|
static async createAsset(params: CreateMediaAssetParams): Promise<MediaAsset> {
|
|
logger.info(`[MediaAssetService] Creating asset: ${params.filename}`, { traceId: params.traceId });
|
|
// 这里可以添加创建素材的逻辑
|
|
return {
|
|
id: 'asset_' + Date.now(),
|
|
tenantId: params.tenantId,
|
|
shopId: params.shopId,
|
|
type: params.type,
|
|
filename: params.filename,
|
|
url: params.url,
|
|
status: 'UPLOADED',
|
|
metadata: params.metadata,
|
|
traceId: params.traceId,
|
|
taskId: params.taskId,
|
|
businessType: params.businessType,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date()
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 更新素材状态
|
|
*/
|
|
static async updateAsset(params: UpdateMediaAssetParams): Promise<MediaAsset> {
|
|
logger.info(`[MediaAssetService] Updating asset: ${params.id}`, { traceId: params.traceId });
|
|
// 这里可以添加更新素材的逻辑
|
|
return {
|
|
id: params.id,
|
|
tenantId: 'tenant_1',
|
|
shopId: 'shop_1',
|
|
type: 'IMAGE',
|
|
filename: 'example.jpg',
|
|
url: 'https://example.com/image.jpg',
|
|
status: params.status || 'UPLOADED',
|
|
metadata: params.metadata || {},
|
|
traceId: params.traceId,
|
|
taskId: 'task_1',
|
|
businessType: 'TOC',
|
|
createdAt: new Date(),
|
|
updatedAt: new Date()
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 获取素材列表
|
|
*/
|
|
static async getAssets(tenantId: string, shopId: string, traceId: string): Promise<MediaAsset[]> {
|
|
logger.info(`[MediaAssetService] Getting assets for tenant: ${tenantId}, shop: ${shopId}`, { traceId });
|
|
// 这里可以添加获取素材列表的逻辑
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* 获取素材详情
|
|
*/
|
|
static async getAssetById(id: string, traceId: string): Promise<MediaAsset | null> {
|
|
logger.info(`[MediaAssetService] Getting asset: ${id}`, { traceId });
|
|
// 这里可以添加获取素材详情的逻辑
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 审核素材
|
|
*/
|
|
static async reviewAsset(id: string, approved: boolean, traceId: string): Promise<MediaAsset> {
|
|
logger.info(`[MediaAssetService] Reviewing asset: ${id}, approved: ${approved}`, { traceId });
|
|
// 这里可以添加审核素材的逻辑
|
|
return {
|
|
id,
|
|
tenantId: 'tenant_1',
|
|
shopId: 'shop_1',
|
|
type: 'IMAGE',
|
|
filename: 'example.jpg',
|
|
url: 'https://example.com/image.jpg',
|
|
status: approved ? 'APPROVED' : 'REJECTED',
|
|
metadata: {},
|
|
traceId,
|
|
taskId: 'task_1',
|
|
businessType: 'TOC',
|
|
createdAt: new Date(),
|
|
updatedAt: new Date()
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 归档素材
|
|
*/
|
|
static async archiveAsset(id: string, traceId: string): Promise<MediaAsset> {
|
|
logger.info(`[MediaAssetService] Archiving asset: ${id}`, { traceId });
|
|
// 这里可以添加归档素材的逻辑
|
|
return {
|
|
id,
|
|
tenantId: 'tenant_1',
|
|
shopId: 'shop_1',
|
|
type: 'IMAGE',
|
|
filename: 'example.jpg',
|
|
url: 'https://example.com/image.jpg',
|
|
status: 'ARCHIVED',
|
|
metadata: {},
|
|
traceId,
|
|
taskId: 'task_1',
|
|
businessType: 'TOC',
|
|
createdAt: new Date(),
|
|
updatedAt: new Date()
|
|
};
|
|
}
|
|
}
|