package dao import ( "context" "fmt" "git.x2erp.com/qdy/go-svc-configure/internal/tables" "github.com/jmoiron/sqlx" ) // CreateProjectAgent 创建项目Agent func CreateProjectAgent(ctx context.Context, tx *sqlx.Tx, agentID, projectID, description, content, creator string) (int64, error) { id := fmt.Sprintf("project_agent.%s", agentID) query := ` INSERT INTO config_project_agent (id, agent_id, project_id, description, content, creator, created_at) VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP) ` result, err := tx.ExecContext(ctx, query, id, agentID, projectID, description, content, creator) if err != nil { return -1, fmt.Errorf("创建项目Agent失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // GetProjectAgentByAgentID 根据AgentID查询项目Agent func GetProjectAgentByAgentID(ctx context.Context, db *sqlx.DB, agentID string) (*tables.ProjectAgentDB, error) { var projectAgent tables.ProjectAgentDB query := ` SELECT id, agent_id, project_id, description, content, creator, created_at FROM config_project_agent WHERE agent_id = ? ` err := db.GetContext(ctx, &projectAgent, query, agentID) if err != nil { return nil, fmt.Errorf("查询项目Agent失败: %v", err) } return &projectAgent, nil } // ListProjectAgents 查询项目Agent列表 func ListProjectAgents(ctx context.Context, db *sqlx.DB) ([]tables.ProjectAgentDB, error) { var projectAgents []tables.ProjectAgentDB query := ` SELECT id, agent_id, project_id, description, content, creator, created_at FROM config_project_agent ORDER BY created_at DESC ` err := db.SelectContext(ctx, &projectAgents, query) if err != nil { return nil, fmt.Errorf("查询项目Agent列表失败: %v", err) } return projectAgents, nil } // UpdateProjectAgent 更新项目Agent信息 func UpdateProjectAgent(ctx context.Context, tx *sqlx.Tx, agentID, projectID, description, content string) (int64, error) { query := ` UPDATE config_project_agent SET project_id = ?, description = ?, content = ? WHERE agent_id = ? ` result, err := tx.ExecContext(ctx, query, projectID, description, content, agentID) if err != nil { return -1, fmt.Errorf("更新项目Agent失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // DeleteProjectAgent 删除项目Agent func DeleteProjectAgent(ctx context.Context, tx *sqlx.Tx, agentID string) (int64, error) { query := `DELETE FROM config_project_agent WHERE agent_id = ?` result, err := tx.ExecContext(ctx, query, agentID) if err != nil { return -1, fmt.Errorf("删除项目Agent失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // CheckProjectAgentExists 检查项目Agent是否存在 func CheckProjectAgentExists(ctx context.Context, db *sqlx.DB, agentID string) (bool, error) { var count int query := `SELECT COUNT(*) FROM config_project_agent WHERE agent_id = ?` err := db.GetContext(ctx, &count, query, agentID) if err != nil { return false, fmt.Errorf("检查项目Agent存在性失败: %v", err) } return count > 0, nil } // DeleteProjectAgentsByProjectID 根据项目ID删除所有关联的Agent func DeleteProjectAgentsByProjectID(ctx context.Context, tx *sqlx.Tx, projectID string) (int64, error) { query := `DELETE FROM config_project_agent WHERE project_id = ?` result, err := tx.ExecContext(ctx, query, projectID) if err != nil { return -1, fmt.Errorf("删除项目关联Agent失败: %v", err) } rowsAffected, _ := result.RowsAffected() return rowsAffected, nil }