mirror of
https://github.com/eiblog/eiblog.git
synced 2026-03-01 00:34:58 +08:00
chore: run blog
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -15,4 +15,4 @@
|
|||||||
# Dependency directories (remove the comment below to include it)
|
# Dependency directories (remove the comment below to include it)
|
||||||
# vendor/
|
# vendor/
|
||||||
bin
|
bin
|
||||||
|
assets/*.*
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
appname: eiblog
|
appname: eiblog
|
||||||
database:
|
database:
|
||||||
driver: mongodb
|
driver: mongodb
|
||||||
source: localhost:27017
|
source: mongodb://localhost:27017
|
||||||
eshost: http://localhost:9200
|
eshost: http://localhost:9200
|
||||||
blogapp:
|
blogapp:
|
||||||
mode:
|
mode:
|
||||||
@@ -28,6 +28,7 @@ blogapp:
|
|||||||
shortname: xxxxxx
|
shortname: xxxxxx
|
||||||
publickey: wdSgxRm9rdGAlLKFcFdToBe3GT4SibmV7Y8EjJQ0r4GWXeKtxpopMAeIeoI2dTEg
|
publickey: wdSgxRm9rdGAlLKFcFdToBe3GT4SibmV7Y8EjJQ0r4GWXeKtxpopMAeIeoI2dTEg
|
||||||
accesstoken: 50023908f39f4607957e909b495326af
|
accesstoken: 50023908f39f4607957e909b495326af
|
||||||
|
interval: 5 # 获取评论数量间隔h
|
||||||
google:
|
google:
|
||||||
url: https://www.google-analytics.com/collect
|
url: https://www.google-analytics.com/collect
|
||||||
tid: UA-xxxxxx-1
|
tid: UA-xxxxxx-1
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -10,7 +10,7 @@ require (
|
|||||||
github.com/gin-gonic/gin v1.6.3
|
github.com/gin-gonic/gin v1.6.3
|
||||||
github.com/gofrs/uuid v3.3.0+incompatible
|
github.com/gofrs/uuid v3.3.0+incompatible
|
||||||
github.com/golang/protobuf v1.4.2
|
github.com/golang/protobuf v1.4.2
|
||||||
github.com/qiniu/api.v7/v7 v7.8.2
|
github.com/qiniu/go-sdk/v7 v7.9.5
|
||||||
github.com/sirupsen/logrus v1.4.2
|
github.com/sirupsen/logrus v1.4.2
|
||||||
github.com/swaggo/gin-swagger v1.3.0
|
github.com/swaggo/gin-swagger v1.3.0
|
||||||
github.com/swaggo/swag v1.6.9
|
github.com/swaggo/swag v1.6.9
|
||||||
|
|||||||
6
go.sum
6
go.sum
@@ -126,8 +126,6 @@ github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
|
|||||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gookit/color v1.3.6 h1:Rgbazd4JO5AgSTVGS3o0nvaSdwdrS8bzvIXwtK6OiMk=
|
|
||||||
github.com/gookit/color v1.3.6/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ=
|
|
||||||
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
|
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
|
github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
|
||||||
@@ -191,8 +189,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
|
|||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/qiniu/api.v7/v7 v7.8.2 h1:f08kI0MmsJNzK4sUS8bG3HDH67ktwd/ji23Gkiy2ra4=
|
github.com/qiniu/go-sdk/v7 v7.9.5 h1:hxsdSmRAfN8hp77OUjjDgKHyxjHpFlW5fC2rHC6hMRQ=
|
||||||
github.com/qiniu/api.v7/v7 v7.8.2/go.mod h1:FPsIqxh1Ym3X01sANE5ZwXfLZSWoCUp5+jNI8cLo3l0=
|
github.com/qiniu/go-sdk/v7 v7.9.5/go.mod h1:Eeqk1/Km3f1MuLUUkg2JCSg/dVkydKbBvEdJJqFgn9g=
|
||||||
github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
|
github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
|
||||||
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
|
|||||||
119
pkg/cache/cache.go
vendored
119
pkg/cache/cache.go
vendored
@@ -3,6 +3,7 @@ package cache
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -23,7 +24,7 @@ var (
|
|||||||
Ei *Cache
|
Ei *Cache
|
||||||
|
|
||||||
// regenerate pages chan
|
// regenerate pages chan
|
||||||
pagesCh = make(chan string, 1)
|
pagesCh = make(chan string, 2)
|
||||||
pageSeries = "series-md"
|
pageSeries = "series-md"
|
||||||
pageArchive = "archive-md"
|
pageArchive = "archive-md"
|
||||||
)
|
)
|
||||||
@@ -77,6 +78,79 @@ type Cache struct {
|
|||||||
ArticlesMap map[string]*model.Article // slug:article
|
ArticlesMap map[string]*model.Article // slug:article
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// // LoadInsertAccount 读取或创建账户
|
||||||
|
// LoadInsertAccount(ctx context.Context, acct *model.Account) (*model.Account, error)
|
||||||
|
// // UpdateAccount 更新账户
|
||||||
|
// UpdateAccount(ctx context.Context, name string, fields map[string]interface{}) error
|
||||||
|
//
|
||||||
|
// // LoadInsertBlogger 读取或创建博客
|
||||||
|
// LoadInsertBlogger(ctx context.Context, blogger *model.Blogger) (*model.Blogger, error)
|
||||||
|
// // UpdateBlogger 更新博客
|
||||||
|
// UpdateBlogger(ctx context.Context, fields map[string]interface{}) error
|
||||||
|
//
|
||||||
|
// // InsertSeries 创建专题
|
||||||
|
// InsertSeries(ctx context.Context, series *model.Series) error
|
||||||
|
// // RemoveSeries 删除专题
|
||||||
|
// RemoveSeries(ctx context.Context, id int) error
|
||||||
|
// // UpdateSeries 更新专题
|
||||||
|
// UpdateSeries(ctx context.Context, id int, fields map[string]interface{}) error
|
||||||
|
// // LoadAllSeries 读取所有专题
|
||||||
|
// LoadAllSeries(ctx context.Context) (model.SortedSeries, error)
|
||||||
|
//
|
||||||
|
// // InsertArticle 创建文章
|
||||||
|
// InsertArticle(ctx context.Context, article *model.Article) error
|
||||||
|
// // RemoveArticle 硬删除文章
|
||||||
|
// RemoveArticle(ctx context.Context, id int) error
|
||||||
|
// // DeleteArticle 软删除文章,放入回收箱
|
||||||
|
// DeleteArticle(ctx context.Context, id int) error
|
||||||
|
// // CleanArticles 清理回收站文章
|
||||||
|
// CleanArticles(ctx context.Context) error
|
||||||
|
// // UpdateArticle 更新文章
|
||||||
|
// UpdateArticle(ctx context.Context, id int, fields map[string]interface{}) error
|
||||||
|
// // RecoverArticle 恢复文章到草稿
|
||||||
|
// RecoverArticle(ctx context.Context, id int) error
|
||||||
|
// // LoadAllArticle 读取所有文章
|
||||||
|
// LoadAllArticle(ctx context.Context) (model.SortedArticles, error)
|
||||||
|
// // LoadTrashArticles 读取回收箱
|
||||||
|
// LoadTrashArticles(ctx context.Context) (model.SortedArticles, error)
|
||||||
|
// // LoadDraftArticles 读取草稿箱
|
||||||
|
// LoadDraftArticles(ctx context.Context) (model.SortedArticles, error)
|
||||||
|
|
||||||
|
// PageArticles 文章翻页
|
||||||
|
func (c *Cache) PageArticles(page int, pageSize int) (prev,
|
||||||
|
next int, articles []*model.Article) {
|
||||||
|
|
||||||
|
var l int
|
||||||
|
for l = len(c.Articles); l > 0; l-- {
|
||||||
|
if c.Articles[l-1].ID >= config.Conf.BlogApp.General.StartID {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if l == 0 {
|
||||||
|
return 0, 0, nil
|
||||||
|
}
|
||||||
|
m := l / pageSize
|
||||||
|
if d := l % pageSize; d > 0 {
|
||||||
|
m++
|
||||||
|
}
|
||||||
|
if page > m {
|
||||||
|
page = m
|
||||||
|
}
|
||||||
|
if page > 1 {
|
||||||
|
prev = page - 1
|
||||||
|
}
|
||||||
|
if page < m {
|
||||||
|
next = page + 1
|
||||||
|
}
|
||||||
|
s := (page - 1) * pageSize
|
||||||
|
e := page * pageSize
|
||||||
|
if e > l {
|
||||||
|
e = l
|
||||||
|
}
|
||||||
|
articles = c.Articles[s:e]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// loadBlogger 博客信息
|
// loadBlogger 博客信息
|
||||||
func (c *Cache) loadBlogger() error {
|
func (c *Cache) loadBlogger() error {
|
||||||
blogapp := config.Conf.BlogApp
|
blogapp := config.Conf.BlogApp
|
||||||
@@ -87,7 +161,7 @@ func (c *Cache) loadBlogger() error {
|
|||||||
BTitle: blogapp.Blogger.BTitle,
|
BTitle: blogapp.Blogger.BTitle,
|
||||||
Copyright: blogapp.Blogger.Copyright,
|
Copyright: blogapp.Blogger.Copyright,
|
||||||
}
|
}
|
||||||
blogger, err := c.LoadOrCreateBlogger(blogger)
|
blogger, err := c.LoadInsertBlogger(context.Background(), blogger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -108,7 +182,7 @@ func (c *Cache) loadAccount() error {
|
|||||||
PhoneN: blogapp.Account.PhoneNumber,
|
PhoneN: blogapp.Account.PhoneNumber,
|
||||||
Address: blogapp.Account.Address,
|
Address: blogapp.Account.Address,
|
||||||
}
|
}
|
||||||
account, err := c.LoadOrCreateAccount(account)
|
account, err := c.LoadInsertAccount(context.Background(), account)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -118,7 +192,7 @@ func (c *Cache) loadAccount() error {
|
|||||||
|
|
||||||
// loadArticles 文章信息
|
// loadArticles 文章信息
|
||||||
func (c *Cache) loadArticles() error {
|
func (c *Cache) loadArticles() error {
|
||||||
articles, err := c.LoadAllArticles()
|
articles, err := c.LoadAllArticle(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -254,7 +328,7 @@ func (c *Cache) timerClean() {
|
|||||||
ticker := time.NewTicker(dur * time.Hour)
|
ticker := time.NewTicker(dur * time.Hour)
|
||||||
|
|
||||||
for range ticker.C {
|
for range ticker.C {
|
||||||
err := c.CleanArticles()
|
err := c.CleanArticles(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Error("cache.timerClean.CleanArticles: ", err)
|
logrus.Error("cache.timerClean.CleanArticles: ", err)
|
||||||
}
|
}
|
||||||
@@ -273,38 +347,3 @@ func (c *Cache) timerDisqus() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PageArticles 文章翻页
|
|
||||||
func (c *Cache) PageArticles(page int, pageSize int) (prev,
|
|
||||||
next int, articles []*model.Article) {
|
|
||||||
|
|
||||||
var l int
|
|
||||||
for l = len(c.Articles); l > 0; l-- {
|
|
||||||
if c.Articles[l-1].ID >= config.Conf.BlogApp.General.StartID {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if l == 0 {
|
|
||||||
return 0, 0, nil
|
|
||||||
}
|
|
||||||
m := l / pageSize
|
|
||||||
if d := l % pageSize; d > 0 {
|
|
||||||
m++
|
|
||||||
}
|
|
||||||
if page > m {
|
|
||||||
page = m
|
|
||||||
}
|
|
||||||
if page > 1 {
|
|
||||||
prev = page - 1
|
|
||||||
}
|
|
||||||
if page < m {
|
|
||||||
next = page + 1
|
|
||||||
}
|
|
||||||
s := (page - 1) * pageSize
|
|
||||||
e := page * pageSize
|
|
||||||
if e > l {
|
|
||||||
e = l
|
|
||||||
}
|
|
||||||
articles = c.Articles[s:e]
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|||||||
76
pkg/cache/store/mongodb.go
vendored
76
pkg/cache/store/mongodb.go
vendored
@@ -16,6 +16,9 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/mongo/readpref"
|
"go.mongodb.org/mongo-driver/mongo/readpref"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// driver: mongodb
|
||||||
|
// source: mongodb://localhost:27017
|
||||||
|
|
||||||
const (
|
const (
|
||||||
mongoDBName = "eiblog"
|
mongoDBName = "eiblog"
|
||||||
collectionAccount = "account"
|
collectionAccount = "account"
|
||||||
@@ -50,42 +53,6 @@ func (db *mongodb) Init(source string) (Store, error) {
|
|||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadInsertAccount 读取或创建账户
|
|
||||||
func (db *mongodb) LoadInsertAccount(ctx context.Context,
|
|
||||||
acct *model.Account) (*model.Account, error) {
|
|
||||||
|
|
||||||
collection := db.Database(mongoDBName).Collection(collectionAccount)
|
|
||||||
|
|
||||||
filter := bson.M{"username": config.Conf.BlogApp.Account.Username}
|
|
||||||
result := collection.FindOne(ctx, filter)
|
|
||||||
err := result.Err()
|
|
||||||
if err != nil {
|
|
||||||
if err != mongo.ErrNoDocuments {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
_, err = collection.InsertOne(ctx, acct)
|
|
||||||
} else {
|
|
||||||
err = result.Decode(acct)
|
|
||||||
}
|
|
||||||
return acct, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateAccount 更新账户
|
|
||||||
func (db *mongodb) UpdateAccount(ctx context.Context, name string,
|
|
||||||
fields map[string]interface{}) error {
|
|
||||||
|
|
||||||
collection := db.Database(mongoDBName).Collection(collectionAccount)
|
|
||||||
|
|
||||||
filter := bson.M{"username": name}
|
|
||||||
params := bson.M{}
|
|
||||||
for k, v := range fields {
|
|
||||||
params[k] = v
|
|
||||||
}
|
|
||||||
update := bson.M{"$set": params}
|
|
||||||
_, err := collection.UpdateOne(ctx, filter, update)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// LoadInsertBlogger 读取或创建博客
|
// LoadInsertBlogger 读取或创建博客
|
||||||
func (db *mongodb) LoadInsertBlogger(ctx context.Context,
|
func (db *mongodb) LoadInsertBlogger(ctx context.Context,
|
||||||
blogger *model.Blogger) (*model.Blogger, error) {
|
blogger *model.Blogger) (*model.Blogger, error) {
|
||||||
@@ -122,6 +89,42 @@ func (db *mongodb) UpdateBlogger(ctx context.Context,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LoadInsertAccount 读取或创建账户
|
||||||
|
func (db *mongodb) LoadInsertAccount(ctx context.Context,
|
||||||
|
acct *model.Account) (*model.Account, error) {
|
||||||
|
|
||||||
|
collection := db.Database(mongoDBName).Collection(collectionAccount)
|
||||||
|
|
||||||
|
filter := bson.M{"username": config.Conf.BlogApp.Account.Username}
|
||||||
|
result := collection.FindOne(ctx, filter)
|
||||||
|
err := result.Err()
|
||||||
|
if err != nil {
|
||||||
|
if err != mongo.ErrNoDocuments {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_, err = collection.InsertOne(ctx, acct)
|
||||||
|
} else {
|
||||||
|
err = result.Decode(acct)
|
||||||
|
}
|
||||||
|
return acct, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateAccount 更新账户
|
||||||
|
func (db *mongodb) UpdateAccount(ctx context.Context, name string,
|
||||||
|
fields map[string]interface{}) error {
|
||||||
|
|
||||||
|
collection := db.Database(mongoDBName).Collection(collectionAccount)
|
||||||
|
|
||||||
|
filter := bson.M{"username": name}
|
||||||
|
params := bson.M{}
|
||||||
|
for k, v := range fields {
|
||||||
|
params[k] = v
|
||||||
|
}
|
||||||
|
update := bson.M{"$set": params}
|
||||||
|
_, err := collection.UpdateOne(ctx, filter, update)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// InsertSeries 创建专题
|
// InsertSeries 创建专题
|
||||||
func (db *mongodb) InsertSeries(ctx context.Context, series *model.Series) error {
|
func (db *mongodb) InsertSeries(ctx context.Context, series *model.Series) error {
|
||||||
collection := db.Database(mongoDBName).Collection(collectionSeries)
|
collection := db.Database(mongoDBName).Collection(collectionSeries)
|
||||||
@@ -222,7 +225,6 @@ func (db *mongodb) CleanArticles(ctx context.Context) error {
|
|||||||
collection := db.Database(mongoDBName).Collection(collectionArticle)
|
collection := db.Database(mongoDBName).Collection(collectionArticle)
|
||||||
|
|
||||||
exp := time.Now().Add(time.Duration(config.Conf.BlogApp.General.Trash) * time.Hour)
|
exp := time.Now().Add(time.Duration(config.Conf.BlogApp.General.Trash) * time.Hour)
|
||||||
fmt.Println(exp)
|
|
||||||
filter := bson.M{"deletetime": bson.M{"$gt": time.Time{}, "$lt": exp}}
|
filter := bson.M{"deletetime": bson.M{"$gt": time.Time{}, "$lt": exp}}
|
||||||
_, err := collection.DeleteMany(ctx, filter)
|
_, err := collection.DeleteMany(ctx, filter)
|
||||||
return err
|
return err
|
||||||
|
|||||||
1
pkg/cache/store/mongodb_test.go
vendored
1
pkg/cache/store/mongodb_test.go
vendored
@@ -155,7 +155,6 @@ func TestDeleteArticle(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
func TestCleanArticles(t *testing.T) {
|
func TestCleanArticles(t *testing.T) {
|
||||||
err := store.CleanArticles(context.Background())
|
err := store.CleanArticles(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
10
pkg/cache/store/store.go
vendored
10
pkg/cache/store/store.go
vendored
@@ -17,16 +17,16 @@ var (
|
|||||||
|
|
||||||
// Store 存储后端
|
// Store 存储后端
|
||||||
type Store interface {
|
type Store interface {
|
||||||
// LoadInsertAccount 读取或创建账户
|
|
||||||
LoadInsertAccount(ctx context.Context, acct *model.Account) (*model.Account, error)
|
|
||||||
// UpdateAccount 更新账户
|
|
||||||
UpdateAccount(ctx context.Context, name string, fields map[string]interface{}) error
|
|
||||||
|
|
||||||
// LoadInsertBlogger 读取或创建博客
|
// LoadInsertBlogger 读取或创建博客
|
||||||
LoadInsertBlogger(ctx context.Context, blogger *model.Blogger) (*model.Blogger, error)
|
LoadInsertBlogger(ctx context.Context, blogger *model.Blogger) (*model.Blogger, error)
|
||||||
// UpdateBlogger 更新博客
|
// UpdateBlogger 更新博客
|
||||||
UpdateBlogger(ctx context.Context, fields map[string]interface{}) error
|
UpdateBlogger(ctx context.Context, fields map[string]interface{}) error
|
||||||
|
|
||||||
|
// LoadInsertAccount 读取或创建账户
|
||||||
|
LoadInsertAccount(ctx context.Context, acct *model.Account) (*model.Account, error)
|
||||||
|
// UpdateAccount 更新账户
|
||||||
|
UpdateAccount(ctx context.Context, name string, fields map[string]interface{}) error
|
||||||
|
|
||||||
// InsertSeries 创建专题
|
// InsertSeries 创建专题
|
||||||
InsertSeries(ctx context.Context, series *model.Series) error
|
InsertSeries(ctx context.Context, series *model.Series) error
|
||||||
// RemoveSeries 删除专题
|
// RemoveSeries 删除专题
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ func init() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
generateOpensearch()
|
||||||
|
generateRobots()
|
||||||
|
generateCrossdomain()
|
||||||
go timerFeed()
|
go timerFeed()
|
||||||
go timerSitemap()
|
go timerSitemap()
|
||||||
}
|
}
|
||||||
@@ -38,29 +41,28 @@ func timerFeed() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
t := time.NewTicker(time.Hour * 4)
|
now := time.Now()
|
||||||
for now := range t.C {
|
_, _, articles := cache.Ei.PageArticles(1, 20)
|
||||||
_, _, articles := cache.Ei.PageArticles(1, 20)
|
params := map[string]interface{}{
|
||||||
params := map[string]interface{}{
|
"Titile": cache.Ei.Blogger.BTitle,
|
||||||
"Titile": cache.Ei.Blogger.BTitle,
|
"SubTitle": cache.Ei.Blogger.SubTitle,
|
||||||
"SubTitle": cache.Ei.Blogger.SubTitle,
|
"Host": config.Conf.BlogApp.Host,
|
||||||
"Host": config.Conf.BlogApp.Host,
|
"FeedrURL": config.Conf.BlogApp.FeedRPC.FeedrURL,
|
||||||
"FeedrURL": config.Conf.BlogApp.FeedRPC.FeedrURL,
|
"BuildDate": now.Format(time.RFC1123Z),
|
||||||
"BuildDate": now.Format(time.RFC1123Z),
|
"Articles": articles,
|
||||||
"Articles": articles,
|
|
||||||
}
|
|
||||||
f, err := os.OpenFile("assets/feed.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Error("file: timerFeed.OpenFile: ", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
err = tpl.Execute(f, params)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Error("file: timerFeed.Execute: ", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
f, err := os.OpenFile("assets/feed.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("file: timerFeed.OpenFile: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
err = tpl.Execute(f, params)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("file: timerFeed.Execute: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
time.AfterFunc(time.Hour*4, timerFeed)
|
||||||
}
|
}
|
||||||
|
|
||||||
// timerSitemap 定时刷新sitemap
|
// timerSitemap 定时刷新sitemap
|
||||||
@@ -71,24 +73,22 @@ func timerSitemap() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
t := time.NewTicker(time.Hour * 4)
|
params := map[string]interface{}{
|
||||||
for range t.C {
|
"Articles": cache.Ei.Articles,
|
||||||
params := map[string]interface{}{
|
"Host": config.Conf.BlogApp.Host,
|
||||||
"Articles": cache.Ei.Articles,
|
|
||||||
"Host": config.Conf.BlogApp.Host,
|
|
||||||
}
|
|
||||||
f, err := os.OpenFile("assets/sitemap.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Error("file: timerSitemap.OpenFile: ", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
err = tpl.Execute(f, params)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Error("file: timerSitemap.Execute: ", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
f, err := os.OpenFile("assets/sitemap.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("file: timerSitemap.OpenFile: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
err = tpl.Execute(f, params)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("file: timerSitemap.Execute: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
time.AfterFunc(time.Hour*24, timerSitemap)
|
||||||
}
|
}
|
||||||
|
|
||||||
// generateOpensearch 生成opensearch.xml
|
// generateOpensearch 生成opensearch.xml
|
||||||
@@ -103,7 +103,7 @@ func generateOpensearch() {
|
|||||||
"SubTitle": cache.Ei.Blogger.SubTitle,
|
"SubTitle": cache.Ei.Blogger.SubTitle,
|
||||||
"Host": config.Conf.BlogApp.Host,
|
"Host": config.Conf.BlogApp.Host,
|
||||||
}
|
}
|
||||||
f, err := os.OpenFile("static/opensearch.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
f, err := os.OpenFile("assets/opensearch.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Error("file: generateOpensearch.OpenFile: ", err)
|
logrus.Error("file: generateOpensearch.OpenFile: ", err)
|
||||||
return
|
return
|
||||||
@@ -126,7 +126,7 @@ func generateRobots() {
|
|||||||
params := map[string]string{
|
params := map[string]string{
|
||||||
"Host": config.Conf.BlogApp.Host,
|
"Host": config.Conf.BlogApp.Host,
|
||||||
}
|
}
|
||||||
f, err := os.OpenFile("static/robots.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
f, err := os.OpenFile("assets/robots.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Error("file: generateRobots.OpenFile: ", err)
|
logrus.Error("file: generateRobots.OpenFile: ", err)
|
||||||
return
|
return
|
||||||
@@ -149,7 +149,7 @@ func generateCrossdomain() {
|
|||||||
params := map[string]string{
|
params := map[string]string{
|
||||||
"Host": config.Conf.BlogApp.Host,
|
"Host": config.Conf.BlogApp.Host,
|
||||||
}
|
}
|
||||||
f, err := os.OpenFile("static/crossdomain.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
f, err := os.OpenFile("assets/crossdomain.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Error("file: generateCrossdomain.OpenFile: ", err)
|
logrus.Error("file: generateCrossdomain.OpenFile: ", err)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import (
|
|||||||
|
|
||||||
"github.com/eiblog/eiblog/pkg/config"
|
"github.com/eiblog/eiblog/pkg/config"
|
||||||
|
|
||||||
"github.com/qiniu/api.v7/v7/auth/qbox"
|
"github.com/qiniu/go-sdk/v7/auth/qbox"
|
||||||
"github.com/qiniu/api.v7/v7/storage"
|
"github.com/qiniu/go-sdk/v7/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
// QiniuUpload 上传文件
|
// QiniuUpload 上传文件
|
||||||
|
|||||||
Reference in New Issue
Block a user