mirror of
https://github.com/eiblog/eiblog.git
synced 2026-02-11 08:52:27 +08:00
refactor: eiblog
This commit is contained in:
2
pkg/cache/store/mongodb.go
vendored
Normal file
2
pkg/cache/store/mongodb.go
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
// Package store provides ...
|
||||
package store
|
||||
70
pkg/cache/store/store.go
vendored
Normal file
70
pkg/cache/store/store.go
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
// Package store provides ...
|
||||
package store
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"sync"
|
||||
|
||||
"github.com/eiblog/eiblog/v2/pkg/model"
|
||||
)
|
||||
|
||||
var (
|
||||
storeMu sync.RWMutex
|
||||
stores = make(map[string]Driver)
|
||||
)
|
||||
|
||||
// Store 存储后端
|
||||
type Store interface {
|
||||
LoadOrCreateAccount(acct *model.Account) (*model.Account, error)
|
||||
LoadOrCreateBlogger(blogger *model.Blogger) (*model.Blogger, error)
|
||||
LoadAllArticles() ([]*model.Article, error)
|
||||
|
||||
UpdateAccount(name string, fields map[string]interface{}) error
|
||||
UpdateBlogger(fields map[string]interface{}) error
|
||||
UpdateArticle(article *model.Article) error
|
||||
CleanArticles() error
|
||||
}
|
||||
|
||||
// Driver 存储驱动
|
||||
type Driver interface {
|
||||
Init(source string) (Store, error)
|
||||
}
|
||||
|
||||
// Register 注册驱动
|
||||
func Register(name string, driver Driver) {
|
||||
storeMu.Lock()
|
||||
defer storeMu.Unlock()
|
||||
if driver == nil {
|
||||
panic("store: register driver is nil")
|
||||
}
|
||||
if _, dup := stores[name]; dup {
|
||||
panic("store: register called twice for driver " + name)
|
||||
}
|
||||
stores[name] = driver
|
||||
}
|
||||
|
||||
// Drivers 获取所有
|
||||
func Drivers() []string {
|
||||
storeMu.Lock()
|
||||
defer storeMu.Unlock()
|
||||
|
||||
list := make([]string, 0, len(stores))
|
||||
for name := range stores {
|
||||
list = append(list, name)
|
||||
}
|
||||
sort.Strings(list)
|
||||
return list
|
||||
}
|
||||
|
||||
// NewStore 新建存储
|
||||
func NewStore(name string, source string) (Store, error) {
|
||||
storeMu.RLock()
|
||||
driver, ok := stores[name]
|
||||
storeMu.RUnlock()
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("store: unknown driver %q (forgotten import?)", name)
|
||||
}
|
||||
|
||||
return driver.Init(source)
|
||||
}
|
||||
Reference in New Issue
Block a user