84 lines
1.5 KiB
Go
84 lines
1.5 KiB
Go
package default
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"encoding/json"
|
|
|
|
"github.com/ihexxa/quickshare/src/db"
|
|
)
|
|
|
|
func (st *DefaultStore) getCfg(ctx context.Context, tx *sql.Tx) (*db.SiteConfig, error) {
|
|
var configStr string
|
|
err := tx.QueryRowContext(
|
|
ctx,
|
|
`select config
|
|
from t_config
|
|
where id=0`,
|
|
).Scan(&configStr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
config := &db.SiteConfig{}
|
|
err = json.Unmarshal([]byte(configStr), config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err = db.CheckSiteCfg(config, true); err != nil {
|
|
return nil, err
|
|
}
|
|
return config, nil
|
|
}
|
|
|
|
func (st *DefaultStore) setCfg(ctx context.Context, tx *sql.Tx, cfg *db.SiteConfig) error {
|
|
if err := db.CheckSiteCfg(cfg, false); err != nil {
|
|
return err
|
|
}
|
|
|
|
cfgBytes, err := json.Marshal(cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = tx.ExecContext(
|
|
ctx,
|
|
`update t_config
|
|
set config=?
|
|
where id=0`,
|
|
string(cfgBytes),
|
|
)
|
|
return err
|
|
}
|
|
|
|
func (st *DefaultStore) SetClientCfg(ctx context.Context, cfg *db.ClientConfig) error {
|
|
tx, err := st.db.BeginTx(ctx, &sql.TxOptions{})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer tx.Rollback()
|
|
|
|
siteCfg, err := st.getCfg(ctx, tx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
siteCfg.ClientCfg = cfg
|
|
|
|
err = st.setCfg(ctx, tx, siteCfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return tx.Commit()
|
|
}
|
|
|
|
func (st *DefaultStore) GetCfg(ctx context.Context) (*db.SiteConfig, error) {
|
|
tx, err := st.db.BeginTx(ctx, &sql.TxOptions{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer tx.Rollback()
|
|
|
|
return st.getCfg(ctx, tx)
|
|
}
|