forked from corestoreio/parrot
/
locale.go
59 lines (49 loc) · 1.61 KB
/
locale.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
48
49
50
51
52
53
54
55
56
57
58
59
package postgres
import (
"database/sql"
"github.com/parrot-translate/parrot/parrot-api/model"
"github.com/lib/pq/hstore"
)
func (db *PostgresDB) CreateLocale(loc model.Locale) (*model.Locale, error) {
h := hstore.Hstore{}
h.Map = make(map[string]sql.NullString)
for k, v := range loc.Pairs {
h.Map[k] = sql.NullString{String: v, Valid: true}
}
values, err := h.Value()
if err != nil {
return nil, parseError(err)
}
row := db.QueryRow("INSERT INTO locales (ident, language, country, pairs, project_id) VALUES($1, $2, $3, $4, $5) RETURNING id",
loc.Ident, loc.Language, loc.Country, values, loc.ProjectID)
err = row.Scan(&loc.ID)
return &loc, parseError(err)
}
func (db *PostgresDB) UpdateLocalePairs(projID string, localeIdent string, pairs map[string]string) (*model.Locale, error) {
h := hstore.Hstore{}
h.Map = make(map[string]sql.NullString)
for k, v := range pairs {
h.Map[k] = sql.NullString{String: v, Valid: true}
}
values, err := h.Value()
if err != nil {
return nil, err
}
row := db.QueryRow("UPDATE locales SET pairs = pairs || $1 WHERE project_id = $2 AND ident = $3 RETURNING *", values, projID, localeIdent)
loc := model.Locale{}
err = row.Scan(&loc.ID, &loc.Ident, &loc.Language, &loc.Country, &h, &loc.ProjectID)
if err != nil {
return nil, parseError(err)
}
loc.Pairs = make(map[string]string)
for k, v := range h.Map {
if v.Valid {
loc.Pairs[k] = v.String
}
}
return &loc, nil
}
func (db *PostgresDB) DeleteLocale(projID string, ident string) error {
_, err := db.Exec("DELETE FROM locales WHERE project_id = $1 AND ident = $2", projID, ident)
return parseError(err)
}