From 4ec3065f9d30de2891ddade729cac5269cbdf684 Mon Sep 17 00:00:00 2001 From: deepzz0 Date: Fri, 30 Apr 2021 13:06:16 +0800 Subject: [PATCH] fix: some bugs --- conf/app.yml | 4 ++-- pkg/cache/cache.go | 2 +- pkg/cache/store/mongodb.go | 5 +++-- pkg/cache/store/rdbms.go | 36 +++++++++++++++++++++++++++++++++--- pkg/model/account.go | 6 +++--- pkg/model/article.go | 6 +++--- 6 files changed, 45 insertions(+), 14 deletions(-) diff --git a/conf/app.yml b/conf/app.yml index 2e51b39..9939672 100644 --- a/conf/app.yml +++ b/conf/app.yml @@ -1,7 +1,7 @@ appname: eiblog database: - driver: mongodb - source: mongodb://localhost:27017 + driver: postgres + source: host=localhost port=5432 user=postgres dbname=eiblog sslmode=disable password=MTI3LjAuMC4x eshost: http://localhost:9200 eiblogapp: mode: diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index 1087ee3..18cc708 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -419,7 +419,7 @@ func (c *Cache) loadOrInit() error { Author: blogapp.Account.Username, Title: "关于", Slug: "about", - CreatedAt: time.Time{}, + CreatedAt: time.Time{}.AddDate(0, 0, 1), } err = c.InsertArticle(context.Background(), about, ArticleStartID) if err != nil { diff --git a/pkg/cache/store/mongodb.go b/pkg/cache/store/mongodb.go index 5f9444c..fc6167b 100644 --- a/pkg/cache/store/mongodb.go +++ b/pkg/cache/store/mongodb.go @@ -14,8 +14,9 @@ import ( "go.mongodb.org/mongo-driver/mongo/readpref" ) -// driver: mongodb -// source: mongodb://localhost:27017 +// example: +// driver: mongodb +// source: mongodb://localhost:27017 const ( mongoDBName = "eiblog" diff --git a/pkg/cache/store/rdbms.go b/pkg/cache/store/rdbms.go index 175455a..2335f4d 100644 --- a/pkg/cache/store/rdbms.go +++ b/pkg/cache/store/rdbms.go @@ -15,6 +15,22 @@ import ( "gorm.io/gorm" ) +// example: +// driver: mysql +// source: user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local +// +// driver: postgres +// source: host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable +// +// driver: sqlite +// source: /path/gorm.db +// +// driver: sqlserver +// source: sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm +// +// driver: clickhouse +// source: tcp://localhost:9000?database=gorm&username=gorm&password=gorm&read_timeout=10&write_timeout=20 + type rdbms struct { *gorm.DB } @@ -64,7 +80,8 @@ func (db *rdbms) LoadInsertBlogger(ctx context.Context, blogger *model.Blogger) // UpdateBlogger 更新博客 func (db *rdbms) UpdateBlogger(ctx context.Context, fields map[string]interface{}) error { - return db.Model(model.Blogger{}).Updates(fields).Error + return db.Model(model.Blogger{}).Session(&gorm.Session{AllowGlobalUpdate: true}). + Updates(fields).Error } // LoadInsertAccount 读取或创建账户 @@ -102,7 +119,20 @@ func (db *rdbms) LoadAllSerie(ctx context.Context) (model.SortedSeries, error) { // InsertArticle 创建文章 func (db *rdbms) InsertArticle(ctx context.Context, article *model.Article, startID int) error { - // TODO id stting + if article.ID == 0 { + // auto generate id + var id int + err := db.Model(model.Article{}).Select("MAX(id)").Row().Scan(&id) + if err != nil { + return err + } + if id < startID { + id = startID + } else { + id += 1 + } + article.ID = id + } return db.Create(article).Error } @@ -154,7 +184,7 @@ func (db *rdbms) LoadArticleList(ctx context.Context, search SearchArticles) (mo return nil, 0, err } var articles model.SortedArticles - err = db.Limit(search.Limit). + err = gormDB.Limit(search.Limit). Offset((search.Page - 1) * search.Limit). Order("created_at DESC").Find(&articles).Error return articles, int(count), err diff --git a/pkg/model/account.go b/pkg/model/account.go index 15a2fb5..e627194 100644 --- a/pkg/model/account.go +++ b/pkg/model/account.go @@ -13,9 +13,9 @@ type Account struct { PhoneN string `gorm:"column:phone_n;not null" bson:"phone_n"` // 手机号 Address string `gorm:"column:address;not null" bson:"address"` // 地址信息 - LogoutAt time.Time `gorm:"column:logout_at;default:null" bson:"logout_at"` // 登出时间 - LoginIP string `gorm:"column:login_ip;default:null" bson:"login_ip"` // 最近登录IP - LoginUA string `gorm:"column:login_ua;default:null" bson:"login_ua"` // 最近登录IP + LogoutAt time.Time `gorm:"column:logout_at;not null" bson:"logout_at"` // 登出时间 + LoginIP string `gorm:"column:login_ip;not null" bson:"login_ip"` // 最近登录IP + LoginUA string `gorm:"column:login_ua;not null" bson:"login_ua"` // 最近登录IP LoginAt time.Time `gorm:"column:login_at;default:now()" bson:"login_at"` // 最近登录时间 CreatedAt time.Time `gorm:"column:created_at;default:now()" bson:"created_at"` // 创建时间 } diff --git a/pkg/model/article.go b/pkg/model/article.go index 745b960..e4a2a51 100644 --- a/pkg/model/article.go +++ b/pkg/model/article.go @@ -11,17 +11,17 @@ import ( // Article 文章 type Article struct { - ID int `gorm:"column:id;primaryKey" bson:"id"` // 自增ID + ID int `gorm:"column:id;primaryKey" bson:"id"` // ID, store自行控制 Author string `gorm:"column:author;not null" bson:"author"` // 作者名 Slug string `gorm:"column:slug;not null;uniqueIndex" bson:"slug"` // 文章缩略名 Title string `gorm:"column:title;not null" bson:"title"` // 标题 Count int `gorm:"column:count;not null" bson:"count"` // 评论数量 Content string `gorm:"column:content;not null" bson:"content"` // markdown内容 SerieID int `gorm:"column:serie_id;not null" bson:"serie_id"` // 专题ID - Tags pq.StringArray `gorm:"column:tags;type:text[];not null" bson:"tags"` // tags + Tags pq.StringArray `gorm:"column:tags;type:text[]" bson:"tags"` // tags IsDraft bool `gorm:"column:is_draft;not null" bson:"is_draft"` // 是否是草稿 - DeletedAt time.Time `gorm:"column:deleted_at;default:null" bson:"deleted_at"` // 删除时间 + DeletedAt time.Time `gorm:"column:deleted_at;not null" bson:"deleted_at"` // 删除时间 UpdatedAt time.Time `gorm:"column:updated_at;default:now()" bson:"updated_at"` // 更新时间 CreatedAt time.Time `gorm:"column:created_at;default:now()" bson:"created_at"` // 创建时间