diff --git a/pkg/cache/store/mongodb.go b/pkg/cache/store/mongodb.go index 32d0ac6..08763cd 100644 --- a/pkg/cache/store/mongodb.go +++ b/pkg/cache/store/mongodb.go @@ -326,6 +326,11 @@ func (db *mongodb) LoadArticleList(ctx context.Context, search SearchArticles) ( return articles, int(count), nil } +// DropDatabase drop eiblog database +func (db *mongodb) DropDatabase(ctx context.Context) error { + return db.Database(mongoDBName).Drop(ctx) +} + // counter counter type counter struct { Name string diff --git a/pkg/cache/store/mongodb_test.go b/pkg/cache/store/mongodb_test.go index 0bbe04c..d596805 100644 --- a/pkg/cache/store/mongodb_test.go +++ b/pkg/cache/store/mongodb_test.go @@ -13,7 +13,7 @@ var ( store Store acct *model.Account blogger *model.Blogger - series *model.Series + series *model.Serie article *model.Article ) @@ -25,12 +25,12 @@ func init() { } // account acct = &model.Account{ - Username: "deepzz", - Password: "deepzz", - Email: "deepzz@example.com", - PhoneN: "12345678900", - Address: "address", - CreateTime: time.Now(), + Username: "deepzz", + Password: "deepzz", + Email: "deepzz@example.com", + PhoneN: "12345678900", + Address: "address", + CreatedAt: time.Now(), } // blogger blogger = &model.Blogger{ @@ -41,11 +41,11 @@ func init() { Copyright: "Copyright", } // series - series = &model.Series{ - Slug: "slug", - Name: "series name", - Desc: "series desc", - CreateTime: time.Now(), + series = &model.Serie{ + Slug: "slug", + Name: "series name", + Desc: "series desc", + CreatedAt: time.Now(), } // article article = &model.Article{ @@ -55,21 +55,20 @@ func init() { Count: 0, Content: "### count", SerieID: 0, - Tags: "", + Tags: nil, IsDraft: false, - UpdateTime: time.Now(), - CreateTime: time.Now(), + UpdatedAt: time.Now(), + CreatedAt: time.Now(), } } func TestLoadInsertAccount(t *testing.T) { - acct2, err := store.LoadInsertAccount(context.Background(), acct) + ok, err := store.LoadInsertAccount(context.Background(), acct) if err != nil { t.Fatal(err) } - t.Log(acct2) - t.Log(acct == acct2) + t.Log(ok) } func TestUpdateAccount(t *testing.T) { @@ -86,12 +85,11 @@ func TestUpdateAccount(t *testing.T) { } func TestLoadInsertBlogger(t *testing.T) { - blogger2, err := store.LoadInsertBlogger(context.Background(), blogger) + ok, err := store.LoadInsertBlogger(context.Background(), blogger) if err != nil { t.Fatal(err) } - t.Log(blogger2) - t.Log(blogger == blogger2) + t.Log(ok) } func TestUpdateBlogger(t *testing.T) { @@ -104,21 +102,21 @@ func TestUpdateBlogger(t *testing.T) { } func TestInsertSeries(t *testing.T) { - err := store.InsertSeries(context.Background(), series) + err := store.InsertSerie(context.Background(), series) if err != nil { t.Fatal(err) } } func TestRemoveSeries(t *testing.T) { - err := store.RemoveSeries(context.Background(), 1) + err := store.RemoveSerie(context.Background(), 1) if err != nil { t.Fatal(err) } } func TestUpdateSeries(t *testing.T) { - err := store.UpdateSeries(context.Background(), 2, map[string]interface{}{ + err := store.UpdateSerie(context.Background(), 2, map[string]interface{}{ "desc": "update desc", }) if err != nil { @@ -127,7 +125,7 @@ func TestUpdateSeries(t *testing.T) { } func TestLoadAllSeries(t *testing.T) { - series, err := store.LoadAllSeries(context.Background()) + series, err := store.LoadAllSerie(context.Background()) if err != nil { t.Fatal(err) } @@ -136,7 +134,7 @@ func TestLoadAllSeries(t *testing.T) { func TestInsertArticle(t *testing.T) { article.ID = 12 - err := store.InsertArticle(context.Background(), article) + err := store.InsertArticle(context.Background(), article, 10) if err != nil { t.Fatal(err) } @@ -150,14 +148,14 @@ func TestRemoveArticle(t *testing.T) { } func TestDeleteArticle(t *testing.T) { - err := store.DeleteArticle(context.Background(), 12) + err := store.RemoveArticle(context.Background(), 12) if err != nil { t.Fatal(err) } } func TestCleanArticles(t *testing.T) { - err := store.CleanArticles(context.Background()) + err := store.CleanArticles(context.Background(), time.Now()) if err != nil { t.Fatal(err) } @@ -173,33 +171,13 @@ func TestUpdateArticle(t *testing.T) { } } -func TestRecoverArticle(t *testing.T) { - err := store.RecoverArticle(context.Background(), 12) - if err != nil { - t.Fatal(err) - } -} - func TestLoadAllArticle(t *testing.T) { - articles, err := store.LoadAllArticle(context.Background()) + _, total, err := store.LoadArticleList(context.Background(), SearchArticles{ + Page: 1, + Limit: 1000, + }) if err != nil { t.Fatal(err) } - t.Logf("load all articles: %d", len(articles)) -} - -func TestLoadTrashArticles(t *testing.T) { - articles, err := store.LoadTrashArticles(context.Background()) - if err != nil { - t.Fatal(err) - } - t.Logf("load trash articles: %d", len(articles)) -} - -func TestLoadDraftArticles(t *testing.T) { - articles, err := store.LoadDraftArticles(context.Background()) - if err != nil { - t.Fatal(err) - } - t.Logf("load draft articles: %d", len(articles)) + t.Logf("load all articles: %d", total) } diff --git a/pkg/cache/store/rdbms.go b/pkg/cache/store/rdbms.go index 2335f4d..848a5ec 100644 --- a/pkg/cache/store/rdbms.go +++ b/pkg/cache/store/rdbms.go @@ -3,6 +3,7 @@ package store import ( "context" + "errors" "time" "github.com/eiblog/eiblog/pkg/model" @@ -129,7 +130,7 @@ func (db *rdbms) InsertArticle(ctx context.Context, article *model.Article, star if id < startID { id = startID } else { - id += 1 + id++ } article.ID = id } @@ -190,6 +191,11 @@ func (db *rdbms) LoadArticleList(ctx context.Context, search SearchArticles) (mo return articles, int(count), err } +// DropDatabase drop eiblog database +func (db *rdbms) DropDatabase(ctx context.Context) error { + return errors.New("can not drop eiblog database in rdbms") +} + // register store func init() { Register("mysql", &rdbms{}) diff --git a/pkg/cache/store/store.go b/pkg/cache/store/store.go index bd943be..16a77c8 100644 --- a/pkg/cache/store/store.go +++ b/pkg/cache/store/store.go @@ -64,6 +64,9 @@ type Store interface { LoadArticle(ctx context.Context, id int) (*model.Article, error) // LoadArticleList 查找文章列表 LoadArticleList(ctx context.Context, search SearchArticles) (model.SortedArticles, int, error) + + // 危险操作 + DropDatabase(ctx context.Context) error } // Driver 存储驱动 diff --git a/pkg/core/backup/timer/qiniu/qiniu.go b/pkg/core/backup/timer/qiniu/qiniu.go index e75d28f..92afdc6 100644 --- a/pkg/core/backup/timer/qiniu/qiniu.go +++ b/pkg/core/backup/timer/qiniu/qiniu.go @@ -11,6 +11,7 @@ import ( "path/filepath" "time" + "github.com/eiblog/eiblog/pkg/cache/store" "github.com/eiblog/eiblog/pkg/config" "github.com/eiblog/eiblog/pkg/internal" ) @@ -97,6 +98,7 @@ func backupFromMongoDB(now time.Time) error { } func restoreToMongoDB() error { + // backup file params := internal.ContentParams{ Prefix: "blog/", @@ -115,6 +117,16 @@ func restoreToMongoDB() error { ctx, cancel := context.WithTimeout(context.Background(), time.Minute*20) defer cancel() + // drop database + store, err := store.NewStore(config.Conf.Database.Driver, + config.Conf.Database.Source) + if err != nil { + return err + } + err = store.DropDatabase(ctx) + if err != nil { + return err + } // unarchive arg := fmt.Sprintf("tar xzf /tmp/eiblog.tar.gz -C /tmp") cmd := exec.CommandContext(ctx, "sh", "-c", arg) @@ -123,7 +135,11 @@ func restoreToMongoDB() error { return err } // restore - arg = fmt.Sprintf("mongorestore -h %s -d eiblog /tmp/eiblog", config.Conf.Database.Source) + u, err := url.Parse(config.Conf.Database.Source) + if err != nil { + return err + } + arg = fmt.Sprintf("mongorestore -h %s -d eiblog /tmp/eiblog", u.Host) cmd = exec.CommandContext(ctx, "sh", "-c", arg) return cmd.Run() } diff --git a/pkg/core/backup/timer/timer.go b/pkg/core/backup/timer/timer.go index 7f6808a..e701d3f 100644 --- a/pkg/core/backup/timer/timer.go +++ b/pkg/core/backup/timer/timer.go @@ -29,6 +29,7 @@ func Start(restore bool) (err error) { if err != nil { return err } + logrus.Info("timer: RestoreData success") } // parse duration interval, err := ParseDuration(config.Conf.BackupApp.Interval)