links search

This commit is contained in:
2025-03-31 16:46:33 +08:00
parent d75110d6b8
commit e7b3b735e0
11 changed files with 689 additions and 303 deletions

View File

@@ -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 ')}` : '';