package logmessage

import (
    "context"
    "gorm.io/gorm"
)

type (
    Model interface {
        logMessageModel
        customLogMessageModel
    }
    logMessageModel interface {
        Insert(ctx context.Context, data *LogMessage) error
        FindOne(ctx context.Context, id int64) (*LogMessage, error)
        Update(ctx context.Context, data *LogMessage) error
        Delete(ctx context.Context, id int64) error
    }
    customModel struct{
        *defaultModel
    }
    defaultModel struct{
        *gorm.DB
    }
)

func newDefaultModel(db *gorm.DB) *defaultModel {
    return &defaultModel{DB: db}
}

func (m *defaultModel) Insert(ctx context.Context, data *LogMessage) error {
    return m.WithContext(ctx).Create(data).Error
}

func (m *defaultModel) FindOne(ctx context.Context, id int64) (*LogMessage, error) {
    var v LogMessage
    err := m.WithContext(ctx).Where("id = ?", id).First(&v).Error
    if err != nil {
        return nil, err
    }
    return &v, nil
}

func (m *defaultModel) Update(ctx context.Context, data *LogMessage) error {
    return m.WithContext(ctx).Where("`id` = ?", data.Id).Save(data).Error
}

func (m *defaultModel) Delete(ctx context.Context, id int64) error {
    return m.WithContext(ctx).Where("`id` = ?", id).Delete(&LogMessage{}).Error
}
