update
This commit is contained in:
57
internal/repository/translate_repository.go
Normal file
57
internal/repository/translate_repository.go
Normal file
@ -0,0 +1,57 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// TitleCnMemory 翻译记忆表行(title_cn_memory)。
|
||||
type TitleCnMemory struct {
|
||||
TitleEn string `gorm:"primaryKey;column:title_en"`
|
||||
TitleCn string `gorm:"column:title_cn"`
|
||||
UpdatedAt uint32 `gorm:"column:updated_at"`
|
||||
}
|
||||
|
||||
// TableName 指定记忆表名。
|
||||
func (TitleCnMemory) TableName() string { return "title_cn_memory" }
|
||||
|
||||
// TranslateRepository 标题翻译记忆的读写接口。
|
||||
type TranslateRepository interface {
|
||||
// GetTitleCnMemory 取某英文标题的人工中文翻译;不存在返回 (_, false, nil)。
|
||||
GetTitleCnMemory(ctx context.Context, titleEn string) (string, bool, error)
|
||||
// UpsertTitleCnMemory 幂等写入/更新一条映射。
|
||||
UpsertTitleCnMemory(ctx context.Context, titleEn, titleCn string) error
|
||||
}
|
||||
|
||||
type translateRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewTranslateRepository 创建翻译记忆仓储。
|
||||
func NewTranslateRepository(db *gorm.DB) TranslateRepository {
|
||||
return &translateRepository{db: db}
|
||||
}
|
||||
|
||||
func (r *translateRepository) GetTitleCnMemory(ctx context.Context, titleEn string) (string, bool, error) {
|
||||
var row TitleCnMemory
|
||||
err := r.db.WithContext(ctx).Where("title_en = ?", titleEn).First(&row).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return "", false, nil
|
||||
}
|
||||
return "", false, err
|
||||
}
|
||||
return row.TitleCn, true, nil
|
||||
}
|
||||
|
||||
func (r *translateRepository) UpsertTitleCnMemory(ctx context.Context, titleEn, titleCn string) error {
|
||||
now := uint32(time.Now().Unix())
|
||||
row := TitleCnMemory{TitleEn: titleEn, TitleCn: titleCn, UpdatedAt: now}
|
||||
return r.db.WithContext(ctx).
|
||||
Where("title_en = ?", titleEn).
|
||||
Assign(TitleCnMemory{TitleCn: titleCn, UpdatedAt: now}).
|
||||
FirstOrCreate(&row).Error
|
||||
}
|
||||
Reference in New Issue
Block a user