2025-10-10 07:13:36 -07:00

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)
}