mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-10-04 06:22:02 +00:00
Update looked its row up and ignored the result. When nothing matched - because the key does not exist, or because the caller's data scope filters the row out - the model stayed at its zero value, Generate copied the request onto it, and Save, finding a zero key, inserted a new row. The update of a row the caller may not see became a row they now own, and the RowsAffected check meant to refuse it never fired, because the insert did affect one. A missing row now ends the update with the same "无权更新该数据" the RowsAffected check returns, and any other lookup error is returned as is. This applies to every generated table, an int id included.
128 lines
3.6 KiB
Plaintext
128 lines
3.6 KiB
Plaintext
package service
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/go-admin-team/go-admin-core/v2/sdk/service"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/clause"
|
|
|
|
"go-admin/app/{{.PackageName}}/models"
|
|
"go-admin/app/{{.PackageName}}/service/dto"
|
|
"go-admin/common/actions"
|
|
cDto "go-admin/common/dto"
|
|
)
|
|
|
|
type {{.ClassName}} struct {
|
|
service.Service
|
|
}
|
|
|
|
// GetPage 获取{{.ClassName}}列表
|
|
func (e *{{.ClassName}}) GetPage(c *dto.{{.ClassName}}GetPageReq, p *actions.DataPermission, list *[]models.{{.ClassName}}, count *int64) error {
|
|
var err error
|
|
var data models.{{.ClassName}}
|
|
|
|
err = e.Orm.Model(&data).
|
|
Scopes(
|
|
cDto.MakeCondition(c.GetNeedSearch()),
|
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
actions.Permission(data.TableName(), p),
|
|
).
|
|
Find(list).Limit(-1).Offset(-1).
|
|
Count(count).Error
|
|
if err != nil {
|
|
e.Log.Errorf("{{.ClassName}}Service GetPage error:%s \r\n", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Get 获取{{.ClassName}}对象
|
|
//
|
|
// The key is matched as a value of the model's primary-key column. Handed to
|
|
// First on its own, a string key would be read as a SQL condition.
|
|
func (e *{{.ClassName}}) Get(d *dto.{{.ClassName}}GetReq, p *actions.DataPermission, model *models.{{.ClassName}}) error {
|
|
var data models.{{.ClassName}}
|
|
|
|
err := e.Orm.Model(&data).
|
|
Scopes(
|
|
actions.Permission(data.TableName(), p),
|
|
).
|
|
Where(clause.Eq{Column: clause.PrimaryColumn, Value: d.GetId()}).
|
|
First(model).Error
|
|
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
|
err = errors.New("查看对象不存在或无权查看")
|
|
e.Log.Errorf("Service Get{{.ClassName}} error:%s \r\n", err)
|
|
return err
|
|
}
|
|
if err != nil {
|
|
e.Log.Errorf("db error:%s", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Insert 创建{{.ClassName}}对象
|
|
func (e *{{.ClassName}}) Insert(c *dto.{{.ClassName}}InsertReq) error {
|
|
var err error
|
|
var data models.{{.ClassName}}
|
|
c.Generate(&data)
|
|
err = e.Orm.Create(&data).Error
|
|
if err != nil {
|
|
e.Log.Errorf("{{.ClassName}}Service Insert error:%s \r\n", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Update 修改{{.ClassName}}对象
|
|
//
|
|
// The row has to be found first. Save on a model whose key is still zero
|
|
// inserts, so a row that is missing - or that p filters out - must stop here
|
|
// rather than turn the update into a new row.
|
|
func (e *{{.ClassName}}) Update(c *dto.{{.ClassName}}UpdateReq, p *actions.DataPermission) error {
|
|
var err error
|
|
var data = models.{{.ClassName}}{}
|
|
err = e.Orm.Scopes(
|
|
actions.Permission(data.TableName(), p),
|
|
).
|
|
Where(clause.Eq{Column: clause.PrimaryColumn, Value: c.GetId()}).
|
|
First(&data).Error
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return errors.New("无权更新该数据")
|
|
}
|
|
if err != nil {
|
|
e.Log.Errorf("{{.ClassName}}Service Update error:%s \r\n", err)
|
|
return err
|
|
}
|
|
c.Generate(&data)
|
|
|
|
db := e.Orm.Save(&data)
|
|
if err = db.Error; err != nil {
|
|
e.Log.Errorf("{{.ClassName}}Service Save error:%s \r\n", err)
|
|
return err
|
|
}
|
|
if db.RowsAffected == 0 {
|
|
return errors.New("无权更新该数据")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Remove 删除{{.ClassName}}
|
|
func (e *{{.ClassName}}) Remove(d *dto.{{.ClassName}}DeleteReq, p *actions.DataPermission) error {
|
|
var data models.{{.ClassName}}
|
|
|
|
db := e.Orm.Model(&data).
|
|
Scopes(
|
|
actions.Permission(data.TableName(), p),
|
|
).Delete(&data, d.GetId())
|
|
if err := db.Error; err != nil {
|
|
e.Log.Errorf("Service Remove{{.ClassName}} error:%s \r\n", err)
|
|
return err
|
|
}
|
|
if db.RowsAffected == 0 {
|
|
return errors.New("无权删除该数据")
|
|
}
|
|
return nil
|
|
}
|