/
database.go
47 lines (39 loc) · 1.36 KB
/
database.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package database
import (
"fmt"
"github.com/conku/gorm"
"github.com/conku/i18n"
)
// Translation is a struct used to save translations into databae
type Translation struct {
Locale string `sql:"size:12;"`
Key string `sql:"size:4294967295;"`
Value string `sql:"size:4294967295"`
}
// New new DB backend for I18n
func New(db *gorm.DB) i18n.Backend {
db.AutoMigrate(&Translation{})
if err := db.Model(&Translation{}).AddUniqueIndex("idx_translations_key_with_locale", "locale", "key").Error; err != nil {
fmt.Printf("Failed to create unique index for translations key & locale, got: %v\n", err.Error())
}
return &Backend{DB: db}
}
// Backend DB backend
type Backend struct {
DB *gorm.DB
}
// LoadTranslations load translations from DB backend
func (backend *Backend) LoadTranslations() (translations []*i18n.Translation) {
backend.DB.Find(&translations)
return translations
}
// SaveTranslation save translation into DB backend
func (backend *Backend) SaveTranslation(t *i18n.Translation) error {
return backend.DB.Where(Translation{Key: t.Key, Locale: t.Locale}).
Assign(Translation{Value: t.Value}).
FirstOrCreate(&Translation{}).Error
}
// DeleteTranslation delete translation into DB backend
func (backend *Backend) DeleteTranslation(t *i18n.Translation) error {
return backend.DB.Where(Translation{Key: t.Key, Locale: t.Locale}).Delete(&Translation{}).Error
}