70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package traffic
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var _ Model = (*customTrafficModel)(nil)
|
|
|
|
type (
|
|
Model interface {
|
|
trafficModel
|
|
customTrafficLogicModel
|
|
}
|
|
trafficModel interface {
|
|
Insert(ctx context.Context, data *TrafficLog) error
|
|
FindOne(ctx context.Context, id int64) (*TrafficLog, error)
|
|
Update(ctx context.Context, data *TrafficLog) error
|
|
Delete(ctx context.Context, id int64) error
|
|
Transaction(ctx context.Context, fn func(db *gorm.DB) error) error
|
|
}
|
|
|
|
customTrafficModel struct {
|
|
*defaultTrafficModel
|
|
}
|
|
defaultTrafficModel struct {
|
|
Conn *gorm.DB
|
|
table string
|
|
}
|
|
)
|
|
|
|
func newTrafficModel(db *gorm.DB) *defaultTrafficModel {
|
|
return &defaultTrafficModel{
|
|
Conn: db,
|
|
table: "`traffic`",
|
|
}
|
|
}
|
|
|
|
func (m *defaultTrafficModel) Insert(ctx context.Context, data *TrafficLog) error {
|
|
return m.Conn.WithContext(ctx).Create(&data).Error
|
|
}
|
|
|
|
func (m *defaultTrafficModel) FindOne(ctx context.Context, id int64) (*TrafficLog, error) {
|
|
var data TrafficLog
|
|
err := m.Conn.WithContext(ctx).Model(&TrafficLog{}).Where("`id` = ?", id).First(&data).Error
|
|
return &data, err
|
|
}
|
|
|
|
func (m *defaultTrafficModel) Update(ctx context.Context, data *TrafficLog) error {
|
|
return m.Conn.WithContext(ctx).Save(data).Error
|
|
}
|
|
|
|
func (m *defaultTrafficModel) Delete(ctx context.Context, id int64) error {
|
|
_, err := m.FindOne(ctx, id)
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil
|
|
}
|
|
return err
|
|
}
|
|
|
|
return m.Conn.WithContext(ctx).Delete(&TrafficLog{}, id).Error
|
|
}
|
|
|
|
func (m *defaultTrafficModel) Transaction(ctx context.Context, fn func(db *gorm.DB) error) error {
|
|
return m.Conn.WithContext(ctx).Transaction(fn)
|
|
}
|