package dao import ( "context" "fmt" "git.x2erp.com/qdy/go-svc-configure/internal/tables" "github.com/jmoiron/sqlx" ) // CreateProject 创建项目 func CreateProject(ctx context.Context, tx *sqlx.Tx, projectID, description, mcpURL, creator string) (int64, error) { id := fmt.Sprintf("project.%s", projectID) query := ` INSERT INTO config_project (id, project_id, description, mcp_url, creator, created_at) VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP) ` result, err := tx.ExecContext(ctx, query, id, projectID, description, mcpURL, creator) if err != nil { return -1, fmt.Errorf("创建项目失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // GetProjectByProjectID 根据项目ID查询项目 func GetProjectByProjectID(ctx context.Context, db *sqlx.DB, projectID string) (*tables.ProjectDB, error) { var project tables.ProjectDB query := ` SELECT id, project_id, description, mcp_url, creator, created_at FROM config_project WHERE project_id = ? ` err := db.GetContext(ctx, &project, query, projectID) if err != nil { return nil, fmt.Errorf("查询项目失败: %v", err) } return &project, nil } // ListProjects 查询项目列表 func ListProjects(ctx context.Context, db *sqlx.DB) ([]tables.ProjectDB, error) { var projects []tables.ProjectDB query := ` SELECT id, project_id, description, mcp_url, creator, created_at FROM config_project ORDER BY created_at DESC ` err := db.SelectContext(ctx, &projects, query) if err != nil { return nil, fmt.Errorf("查询项目列表失败: %v", err) } return projects, nil } // UpdateProject 更新项目信息 func UpdateProject(ctx context.Context, tx *sqlx.Tx, projectID, description, mcpURL string) (int64, error) { query := ` UPDATE config_project SET description = ?, mcp_url = ? WHERE project_id = ? ` result, err := tx.ExecContext(ctx, query, description, mcpURL, projectID) if err != nil { return -1, fmt.Errorf("更新项目失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // DeleteProject 删除项目 func DeleteProject(ctx context.Context, tx *sqlx.Tx, projectID string) (int64, error) { query := `DELETE FROM config_project WHERE project_id = ?` result, err := tx.ExecContext(ctx, query, projectID) if err != nil { return -1, fmt.Errorf("删除项目失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // CheckProjectExists 检查项目是否存在 func CheckProjectExists(ctx context.Context, db *sqlx.DB, projectID string) (bool, error) { var count int query := `SELECT COUNT(*) FROM config_project WHERE project_id = ?` err := db.GetContext(ctx, &count, query, projectID) if err != nil { return false, fmt.Errorf("检查项目存在性失败: %v", err) } return count > 0, nil }