fix(sitestore): clean up sitestore for refactoring

This commit is contained in:
hexxa 2022-03-22 18:04:13 +08:00 committed by Hexxa
parent 9ff28ecce4
commit b4dc30f824
14 changed files with 117 additions and 128 deletions

View file

@ -4,8 +4,6 @@ import (
"errors"
"fmt"
"reflect"
"github.com/ihexxa/quickshare/src/db/sitestore"
)
const (
@ -16,6 +14,8 @@ const (
ShareIDNs = "sharingKey"
uploadsPrefix = "uploads"
KeyInitTime = "keyInitTime"
)
var (
@ -40,13 +40,27 @@ type Quota struct {
}
type Preferences struct {
Bg *sitestore.BgConfig `json:"bg"`
CSSURL string `json:"cssURL"`
LanPackURL string `json:"lanPackURL"`
Lan string `json:"lan"`
Theme string `json:"theme"`
Avatar string `json:"avatar"`
Email string `json:"email"`
Bg *BgConfig `json:"bg"`
CSSURL string `json:"cssURL"`
LanPackURL string `json:"lanPackURL"`
Lan string `json:"lan"`
Theme string `json:"theme"`
Avatar string `json:"avatar"`
Email string `json:"email"`
}
type ClientConfig struct {
SiteName string `json:"siteName" yaml:"siteName"`
SiteDesc string `json:"siteDesc" yaml:"siteDesc"`
Bg *BgConfig `json:"bg" yaml:"bg"`
}
type BgConfig struct {
Url string `json:"url" yaml:"url"`
Repeat string `json:"repeat" yaml:"repeat"`
Position string `json:"position" yaml:"position"`
Align string `json:"align" yaml:"align"`
BgColor string `json:"bgColor" yaml:"bgColor"`
}
func ComparePreferences(p1, p2 *Preferences) bool {

View file

@ -30,10 +30,6 @@ var (
maxHashingTime = 10
)
func IsNotFound(err error) bool {
return err == ErrNotFound
}
type IFileInfoStore interface {
AddSharing(dirPath string) error
DelSharing(dirPath string) error
@ -89,7 +85,7 @@ func (fi *FileInfoStore) AddSharing(dirPath string) error {
info, err := fi.GetInfo(dirPath)
if err != nil {
if !IsNotFound(err) {
if !errors.Is(err, ErrNotFound) {
return err
}
info = &db.FileInfo{
@ -199,7 +195,7 @@ func (fi *FileInfoStore) GetInfos(itemPaths []string) (map[string]*db.FileInfo,
for _, itemPath := range itemPaths {
info, err := fi.GetInfo(itemPath)
if err != nil {
if !IsNotFound(err) {
if !errors.Is(err, ErrNotFound) {
return nil, err
}
continue
@ -233,7 +229,7 @@ func (fi *FileInfoStore) SetSha1(itemPath, sign string) error {
info, err := fi.GetInfo(itemPath)
if err != nil {
if !IsNotFound(err) {
if !errors.Is(err, ErrNotFound) {
return err
}
info = &db.FileInfo{

View file

@ -3,49 +3,28 @@ package sitestore
import (
"encoding/json"
"errors"
"fmt"
"sync"
"time"
"github.com/ihexxa/quickshare/src/db"
"github.com/ihexxa/quickshare/src/kvstore"
)
const (
InitNs = "SiteInit"
SiteNs = "Site"
InitTimeKey = "initTime"
SiteCfgKey = "siteCfg"
NsSite = "NsSite"
KeySiteCfg = "KeySiteCfg"
)
var (
ErrNotFound = errors.New("site config not found")
)
func IsNotFound(err error) bool {
return err == ErrNotFound
}
type ISiteStore interface {
SetClientCfg(cfg *ClientConfig) error
SetClientCfg(cfg *db.ClientConfig) error
GetCfg() (*SiteConfig, error)
}
type ClientConfig struct {
SiteName string `json:"siteName" yaml:"siteName"`
SiteDesc string `json:"siteDesc" yaml:"siteDesc"`
Bg *BgConfig `json:"bg" yaml:"bg"`
}
type BgConfig struct {
Url string `json:"url" yaml:"url"`
Repeat string `json:"repeat" yaml:"repeat"`
Position string `json:"position" yaml:"position"`
Align string `json:"align" yaml:"align"`
BgColor string `json:"bgColor" yaml:"bgColor"`
}
type SiteConfig struct {
ClientCfg *ClientConfig `json:"clientCfg" yaml:"clientCfg"`
ClientCfg *db.ClientConfig `json:"clientCfg" yaml:"clientCfg"`
}
type SiteStore struct {
@ -61,65 +40,59 @@ func NewSiteStore(store kvstore.IKVStore) (*SiteStore, error) {
}
func (st *SiteStore) Init(cfg *SiteConfig) error {
_, ok := st.store.GetStringIn(InitNs, InitTimeKey)
_, ok := st.store.GetStringIn(NsSite, KeySiteCfg)
if !ok {
var err error
for _, nsName := range []string{
InitNs,
SiteNs,
} {
if err = st.store.AddNamespace(nsName); err != nil {
return err
}
}
// TODO: replace following with setConfig
err = st.SetClientCfg(cfg.ClientCfg)
if err != nil {
if err = st.store.AddNamespace(NsSite); err != nil {
return err
}
err = st.store.SetStringIn(InitNs, InitTimeKey, fmt.Sprintf("%d", time.Now().Unix()))
err = st.setCfg(cfg)
if err != nil {
return err
}
}
return nil
}
func (st *SiteStore) SetClientCfg(cfg *ClientConfig) error {
st.mtx.Lock()
defer st.mtx.Unlock()
siteCfg := &SiteConfig{}
cfgStr, ok := st.store.GetStringIn(SiteNs, SiteCfgKey)
if ok {
err := json.Unmarshal([]byte(cfgStr), siteCfg)
if err != nil {
return err
}
func (st *SiteStore) getCfg() (*SiteConfig, error) {
cfgStr, ok := st.store.GetStringIn(NsSite, KeySiteCfg)
if !ok {
return nil, ErrNotFound
}
siteCfg.ClientCfg = cfg
cfgBytes, err := json.Marshal(siteCfg)
cfg := &SiteConfig{}
err := json.Unmarshal([]byte(cfgStr), cfg)
if err != nil {
return nil, err
}
return cfg, nil
}
func (st *SiteStore) setCfg(cfg *SiteConfig) error {
cfgBytes, err := json.Marshal(cfg)
if err != nil {
return err
}
return st.store.SetStringIn(SiteNs, SiteCfgKey, string(cfgBytes))
return st.store.SetStringIn(NsSite, KeySiteCfg, string(cfgBytes))
}
func (st *SiteStore) SetClientCfg(cfg *db.ClientConfig) error {
st.mtx.Lock()
defer st.mtx.Unlock()
siteCfg, err := st.getCfg()
if err != nil {
return err
}
siteCfg.ClientCfg = cfg
return st.setCfg(siteCfg)
}
func (st *SiteStore) GetCfg() (*SiteConfig, error) {
st.mtx.RLock()
defer st.mtx.RUnlock()
cfgStr, ok := st.store.GetStringIn(SiteNs, SiteCfgKey)
if !ok {
return nil, ErrNotFound
}
siteCfg := &SiteConfig{}
err := json.Unmarshal([]byte(cfgStr), siteCfg)
if err != nil {
return nil, err
}
return siteCfg, nil
return st.getCfg()
}

View file

@ -7,6 +7,7 @@ import (
"reflect"
"testing"
"github.com/ihexxa/quickshare/src/db"
"github.com/ihexxa/quickshare/src/kvstore/boltdbpvd"
)
@ -14,10 +15,10 @@ func TestSiteStore(t *testing.T) {
testSiteMethods := func(t *testing.T, store ISiteStore) {
siteCfg := &SiteConfig{
ClientCfg: &ClientConfig{
ClientCfg: &db.ClientConfig{
SiteName: "quickshare",
SiteDesc: "simpel file sharing",
Bg: &BgConfig{
Bg: &db.BgConfig{
Url: "/imgs/bg.jpg",
Repeat: "no-repeat",
Position: "fixed",
@ -55,10 +56,10 @@ func TestSiteStore(t *testing.T) {
t.Fatal("fail to new kvstore", err)
}
err = store.Init(&SiteConfig{
ClientCfg: &ClientConfig{
ClientCfg: &db.ClientConfig{
SiteName: "",
SiteDesc: "",
Bg: &BgConfig{
Bg: &db.BgConfig{
Url: "",
Repeat: "",
Position: "",

View file

@ -8,7 +8,6 @@ import (
"time"
"github.com/ihexxa/quickshare/src/db"
"github.com/ihexxa/quickshare/src/db/sitestore"
"github.com/ihexxa/quickshare/src/kvstore"
)
@ -35,7 +34,7 @@ var (
ErrNotFound = errors.New("not found")
DefaultPreferences = db.Preferences{
Bg: &sitestore.BgConfig{
Bg: &db.BgConfig{
Url: "",
Repeat: "no-repeat",
Position: "center",
@ -51,14 +50,10 @@ var (
}
)
func IsReachedLimitErr(err error) bool {
return err == ErrReachedLimit
}
type UserCfg struct {
Name string `json:"name"`
Role string `json:"role"`
Pwd string `json:"pwd"`
Name string `json:"name" yaml:"name"`
Role string `json:"role" yaml:"role"`
Pwd string `json:"pwd" yaml:"pwd"`
}
type IUserStore interface {

View file

@ -186,7 +186,7 @@ func TestUserStores(t *testing.T) {
}
newPrefer := &db.Preferences{
Bg: &sitestore.BgConfig{
Bg: &db.BgConfig{
Url: "/url",
Repeat: "repeat",
Position: "pos",