links search
This commit is contained in:
@@ -24,6 +24,11 @@ function buildDateFilter(startTime?: string, endTime?: string): string {
|
||||
return filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '';
|
||||
}
|
||||
|
||||
// 字符串转义函数
|
||||
function escapeString(str: string): string {
|
||||
return str.replace(/'/g, "\\'");
|
||||
}
|
||||
|
||||
// 构建通用过滤条件
|
||||
export function buildFilter(params: Partial<EventsQueryParams>): string {
|
||||
const filters = [];
|
||||
@@ -38,32 +43,45 @@ export function buildFilter(params: Partial<EventsQueryParams>): string {
|
||||
|
||||
// 事件类型过滤
|
||||
if (params.eventType) {
|
||||
filters.push(`event_type = '${params.eventType}'`);
|
||||
filters.push(`event_type = '${escapeString(params.eventType)}'`);
|
||||
}
|
||||
|
||||
// 链接ID过滤
|
||||
if (params.linkId) {
|
||||
filters.push(`link_id = '${params.linkId}'`);
|
||||
filters.push(`link_id = '${escapeString(params.linkId)}'`);
|
||||
}
|
||||
|
||||
// 链接短码过滤
|
||||
if (params.linkSlug) {
|
||||
filters.push(`link_slug = '${params.linkSlug}'`);
|
||||
filters.push(`link_slug = '${escapeString(params.linkSlug)}'`);
|
||||
}
|
||||
|
||||
// 用户ID过滤
|
||||
if (params.userId) {
|
||||
filters.push(`user_id = '${params.userId}'`);
|
||||
filters.push(`user_id = '${escapeString(params.userId)}'`);
|
||||
}
|
||||
|
||||
// 团队ID过滤
|
||||
if (params.teamId) {
|
||||
filters.push(`team_id = '${params.teamId}'`);
|
||||
filters.push(`team_id = '${escapeString(params.teamId)}'`);
|
||||
}
|
||||
|
||||
// 项目ID过滤
|
||||
if (params.projectId) {
|
||||
filters.push(`project_id = '${params.projectId}'`);
|
||||
filters.push(`project_id = '${escapeString(params.projectId)}'`);
|
||||
}
|
||||
|
||||
// 标签筛选
|
||||
if (params.tags && params.tags.length > 0) {
|
||||
const tagConditions = params.tags.map(tag =>
|
||||
`JSONHas(JSONExtractArrayRaw(link_tags), JSON_QUOTE('${escapeString(tag)}'))`
|
||||
);
|
||||
filters.push(`(${tagConditions.join(' OR ')})`);
|
||||
}
|
||||
|
||||
// Slug 模糊搜索
|
||||
if (params.searchSlug) {
|
||||
filters.push(`positionCaseInsensitive(link_slug, '${escapeString(params.searchSlug)}') > 0`);
|
||||
}
|
||||
|
||||
return filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '';
|
||||
|
||||
Reference in New Issue
Block a user