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()
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|