96 lines
2.4 KiB
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,
|
|
}
|
|
}
|