fix(sitestore): clean up sitestore for refactoring
This commit is contained in:
parent
9ff28ecce4
commit
b4dc30f824
14 changed files with 117 additions and 128 deletions
|
@ -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 {
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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: "",
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -186,7 +186,7 @@ func TestUserStores(t *testing.T) {
|
|||
}
|
||||
|
||||
newPrefer := &db.Preferences{
|
||||
Bg: &sitestore.BgConfig{
|
||||
Bg: &db.BgConfig{
|
||||
Url: "/url",
|
||||
Repeat: "repeat",
|
||||
Position: "pos",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue