- 更新 AGENTS.md 项目知识库文档(多目录) - 添加 docs/analyst.md 产品分析文档 - 添加 .omc/ 工具状态和会话记录 - 添加 .sisyphus/ 计划文档 - 添加 project-structure.txt 项目结构 - 删除 timeline 测试截图
1.9 KiB
1.9 KiB
src/lib/ - Core Utilities
Overview
Shared utilities and infrastructure layers used across the application.
Key Files
Validation Layer (validations.ts)
Purpose: Input validation and type safety using Zod schemas
ProjectInputSchema: Project data validation (1-10 tags, 1-10 links)WebhookPayloadSchema: Webhook request validation with API key authKeywordInputSchema: Keyword cloud data with visual configProjectQuerySchema: Query parameter validation (search, tags, status, pagination)ExternalLinkSchema: URL validation with http/https protocol checkTaskStatusEnum: Discovery task states (PENDING/IN_PROGRESS/COMPLETED/FAILED)
Prisma Client (prisma.ts)
Purpose: Singleton database client pattern
import { prisma } from "@/lib/prisma";
Utilities
utils.ts:cn()- Tailwind class merging with clsx/twMergeslug.ts:generateSlug()- URL-friendly slug generation (prefers English, max 100 chars)
GitHub Integration
github/api.ts:getGitHubStats()- Fetch repo stats (stars, forks, license) with 5min cachegithub/badges.ts:parseGitHubUrl(),getGitHubStarsBadgeUrl(),getAllGitHubBadgeUrls()
Usage Patterns
Validation:
import { ProjectInputSchema } from "@/lib/validations";
const validated = ProjectInputSchema.parse(inputData);
Database:
import { prisma } from "@/lib/prisma";
const projects = await prisma.project.findMany();
GitHub Badges:
import { getGitHubBadgesFromLinks } from "@/lib/github/badges";
const { stars } = getGitHubBadgesFromLinks(project.externalLinks);
Key Design Decisions
- Singleton Prisma client prevents connection pool exhaustion in dev
- All enums use Zod for runtime type checking
- API key minimum length: 32 characters
- URL validation enforces http/https protocol only