kra/internal/data/example/customer.go

96 lines
2.4 KiB
Go

package example
import (
"context"
"kra/internal/biz/example"
"kra/internal/data/model"
"kra/internal/data/query"
"gorm.io/gorm"
)
type customerRepo struct {
db *gorm.DB
}
// NewCustomerRepo 创建客户仓储
func NewCustomerRepo(db *gorm.DB) example.CustomerRepo {
return &customerRepo{db: db}
}
func (r *customerRepo) Create(ctx context.Context, customer *example.Customer) error {
m := toCustomerModel(customer)
return r.db.WithContext(ctx).Create(m).Error
}
func (r *customerRepo) Update(ctx context.Context, customer *example.Customer) error {
return r.db.WithContext(ctx).Save(toCustomerModel(customer)).Error
}
func (r *customerRepo) Delete(ctx context.Context, id uint) error {
return r.db.WithContext(ctx).Delete(&model.ExaCustomer{}, id).Error
}
func (r *customerRepo) FindByID(ctx context.Context, id uint) (*example.Customer, error) {
c := query.ExaCustomer
m, err := c.WithContext(ctx).Where(c.ID.Eq(int64(id))).First()
if err != nil {
return nil, err
}
return toCustomerBiz(m), nil
}
func (r *customerRepo) List(ctx context.Context, authorityIds []uint, page, pageSize int) ([]*example.Customer, int64, error) {
c := query.ExaCustomer
q := c.WithContext(ctx)
if len(authorityIds) > 0 {
ids := make([]int64, len(authorityIds))
for i, id := range authorityIds {
ids[i] = int64(id)
}
q = q.Where(c.SysUserAuthorityID.In(ids...))
}
total, err := q.Count()
if err != nil {
return nil, 0, err
}
offset := (page - 1) * pageSize
list, err := q.Offset(offset).Limit(pageSize).Find()
if err != nil {
return nil, 0, err
}
result := make([]*example.Customer, len(list))
for i, m := range list {
result[i] = toCustomerBiz(m)
}
return result, total, nil
}
// 转换函数
func toCustomerModel(c *example.Customer) *model.ExaCustomer {
return &model.ExaCustomer{
ID: int64(c.ID),
CustomerName: c.CustomerName,
CustomerPhoneData: c.CustomerPhoneData,
SysUserID: int64(c.SysUserID),
SysUserAuthorityID: int64(c.SysUserAuthorityID),
}
}
func toCustomerBiz(m *model.ExaCustomer) *example.Customer {
return &example.Customer{
ID: uint(m.ID),
CustomerName: m.CustomerName,
CustomerPhoneData: m.CustomerPhoneData,
SysUserID: uint(m.SysUserID),
SysUserAuthorityID: uint(m.SysUserAuthorityID),
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}