package dao import ( "context" "fmt" "git.x2erp.com/qdy/go-svc-configure/internal/tables" "github.com/jmoiron/sqlx" ) // CreateProjectSkill 创建项目Skill func CreateProjectSkill(ctx context.Context, tx *sqlx.Tx, skillID, projectID, description, content, creator string) (int64, error) { id := fmt.Sprintf("project_skill.%s", skillID) query := ` INSERT INTO config_project_skill (id, skill_id, project_id, description, content, creator, created_at) VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP) ` result, err := tx.ExecContext(ctx, query, id, skillID, projectID, description, content, creator) if err != nil { return -1, fmt.Errorf("创建项目Skill失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // GetProjectSkillBySkillID 根据SkillID查询项目Skill func GetProjectSkillBySkillID(ctx context.Context, db *sqlx.DB, skillID string) (*tables.ProjectSkillDB, error) { var projectSkill tables.ProjectSkillDB query := ` SELECT id, skill_id, project_id, description, content, creator, created_at FROM config_project_skill WHERE skill_id = ? ` err := db.GetContext(ctx, &projectSkill, query, skillID) if err != nil { return nil, fmt.Errorf("查询项目Skill失败: %v", err) } return &projectSkill, nil } // ListProjectSkills 查询项目Skill列表 func ListProjectSkills(ctx context.Context, db *sqlx.DB) ([]tables.ProjectSkillDB, error) { var projectSkills []tables.ProjectSkillDB query := ` SELECT id, skill_id, project_id, description, content, creator, created_at FROM config_project_skill ORDER BY created_at DESC ` err := db.SelectContext(ctx, &projectSkills, query) if err != nil { return nil, fmt.Errorf("查询项目Skill列表失败: %v", err) } return projectSkills, nil } // UpdateProjectSkill 更新项目Skill信息 func UpdateProjectSkill(ctx context.Context, tx *sqlx.Tx, skillID, projectID, description, content string) (int64, error) { query := ` UPDATE config_project_skill SET project_id = ?, description = ?, content = ? WHERE skill_id = ? ` result, err := tx.ExecContext(ctx, query, projectID, description, content, skillID) if err != nil { return -1, fmt.Errorf("更新项目Skill失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // DeleteProjectSkill 删除项目Skill func DeleteProjectSkill(ctx context.Context, tx *sqlx.Tx, skillID string) (int64, error) { query := `DELETE FROM config_project_skill WHERE skill_id = ?` result, err := tx.ExecContext(ctx, query, skillID) if err != nil { return -1, fmt.Errorf("删除项目Skill失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // CheckProjectSkillExists 检查项目Skill是否存在 func CheckProjectSkillExists(ctx context.Context, db *sqlx.DB, skillID string) (bool, error) { var count int query := `SELECT COUNT(*) FROM config_project_skill WHERE skill_id = ?` err := db.GetContext(ctx, &count, query, skillID) if err != nil { return false, fmt.Errorf("检查项目Skill存在性失败: %v", err) } return count > 0, nil } // DeleteProjectSkillsByProjectID 根据项目ID删除所有关联的Skill func DeleteProjectSkillsByProjectID(ctx context.Context, tx *sqlx.Tx, projectID string) (int64, error) { query := `DELETE FROM config_project_skill WHERE project_id = ?` result, err := tx.ExecContext(ctx, query, projectID) if err != nil { return -1, fmt.Errorf("删除项目关联Skill失败: %v", err) } rowsAffected, _ := result.RowsAffected() return rowsAffected, nil }