package repository import ( "errors" "github.com/wmms/wmms/pkg/database" ) // ErrRecordNotFound 表示按 id + 组织没查到目标记录:要么 id 不存在,要么这条记录 // 属于别的组织。按主键更新时影响 0 行就返回它,避免「改了一条不存在的记录」还提示 // 保存成功。 var ErrRecordNotFound = errors.New("记录不存在,可能已被删除或不属于当前组织") // execExpectingRow 执行一条按主键更新的语句,并要求它至少匹配到一行。 // // 判断依据是 RowsAffected,而 MySQL 默认返回的是「实际改变」的行数——编辑弹窗里 // 一个字段都没动时同样是 0,跟记录不存在分不开。所以 DSN 必须开 clientFoundRows=true // (见 pkg/database.Init)把语义换成「匹配」的行数,这个检查才成立。 func execExpectingRow(query string, args ...interface{}) error { result, err := database.DB.Exec(query, args...) if err != nil { return err } affected, err := result.RowsAffected() if err != nil { return err } if affected == 0 { return ErrRecordNotFound } return nil }