import type { ProjectRule } from "@vtit-agent-coding/shared"; import { type D1, newId, queryDb } from "./db"; export async function createProjectRule(db: D1, projectId: string, fileName: string, title: string, content: string): Promise { const id = newId(); await queryDb( db, `INSERT INTO project_rules (id, project_id, file_name, title, content, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, NOW(), NOW())`, [id, projectId, fileName, title, content], ); const rule = await getProjectRule(db, projectId, id); if (!rule) throw new Error("Failed to create project rule"); return rule; } export async function getProjectRule(db: D1, projectId: string, ruleId: string): Promise { const res = await queryDb(db, "SELECT * FROM project_rules WHERE id = $1 AND project_id = $2", [ruleId, projectId]); return res.rows[0] || null; } export async function listProjectRules(db: D1, projectId: string): Promise { const res = await queryDb(db, "SELECT * FROM project_rules WHERE project_id = $1 ORDER BY file_name ASC", [projectId]); return res.rows; } export async function updateProjectRule( db: D1, projectId: string, ruleId: string, updates: { file_name?: string; title?: string; content?: string }, ): Promise { const sets: string[] = ["updated_at = NOW()"]; const params: unknown[] = []; let idx = 1; if (updates.file_name !== undefined) { sets.push(`file_name = $${idx++}`); params.push(updates.file_name); } if (updates.title !== undefined) { sets.push(`title = $${idx++}`); params.push(updates.title); } if (updates.content !== undefined) { sets.push(`content = $${idx++}`); params.push(updates.content); } params.push(ruleId); params.push(projectId); await queryDb(db, `UPDATE project_rules SET ${sets.join(", ")} WHERE id = $${idx++} AND project_id = $${idx}`, params); return getProjectRule(db, projectId, ruleId); } export async function deleteProjectRule(db: D1, projectId: string, ruleId: string): Promise { const res = await queryDb(db, "DELETE FROM project_rules WHERE id = $1 AND project_id = $2", [ruleId, projectId]); return (res.rowCount ?? 0) > 0; }