diff --git a/api/v1/errors.go b/api/v1/errors.go
index 29e687a..5e13b2c 100644
--- a/api/v1/errors.go
+++ b/api/v1/errors.go
@@ -10,5 +10,6 @@ var (
var (
ErrorUserNameAndPassword = newError(100, "用户名和密码错误")
+ ErrorUserOldPassword = newError(100, "原密码错误")
ErrorTokenGeneration = newError(101, "令牌生成错误")
)
diff --git a/internal/dal/repository/repository.go b/internal/dal/repository/repository.go
index 5546f12..fc3e95d 100644
--- a/internal/dal/repository/repository.go
+++ b/internal/dal/repository/repository.go
@@ -12,6 +12,7 @@ import (
"go.uber.org/zap"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
+ "gorm.io/gen/field"
"gorm.io/gorm"
"github.com/ch3nnn/webstack-go/internal/dal/model"
@@ -91,7 +92,18 @@ func NewDB(conf *viper.Viper, l *log.Logger) *gorm.DB {
}
func autoMigrateAndInitialize(db *gorm.DB) {
- err := db.AutoMigrate(
+ ctx := context.Background()
+
+ err := db.Migrator().DropTable(
+ &model.SysUserMenu{},
+ &model.SysMenu{},
+ )
+ if err != nil {
+ fmt.Println("migrate drop table error")
+ os.Exit(0)
+ }
+
+ err = db.AutoMigrate(
&model.SysConfig{},
&model.SysUser{},
&model.SysUserMenu{},
@@ -104,34 +116,24 @@ func autoMigrateAndInitialize(db *gorm.DB) {
os.Exit(0)
}
- ctx := context.Background()
-
- umCtn, err := query.SysUserMenu.WithContext(ctx).Count()
- if err != nil {
- os.Exit(0)
- }
-
- uCtn, err := query.SysUser.WithContext(ctx).Count()
- if err != nil {
- os.Exit(0)
- }
-
- mCtn, err := query.SysMenu.WithContext(ctx).Count()
+ _, err = query.SysUser.WithContext(ctx).
+ Where(
+ query.SysUser.ID.Eq(1),
+ query.SysUser.Username.Eq(DefaultUname),
+ ).
+ Attrs(
+ field.Attrs(&model.SysUser{
+ Password: cryptor.Md5String(DefaultUPassword)},
+ ),
+ ).
+ FirstOrCreate()
if err != nil {
+ fmt.Println("user migrate error")
os.Exit(0)
}
- if umCtn == 0 && uCtn == 0 && mCtn == 0 {
- err := query.SysUser.WithContext(ctx).Create(&model.SysUser{
- ID: 1,
- Username: "admin",
- Password: cryptor.Md5String("admin"),
- })
- if err != nil {
- os.Exit(0)
- }
-
- err = query.SysMenu.WithContext(ctx).Create(
+ err = query.SysMenu.WithContext(ctx).
+ Create(
&model.SysMenu{
ID: 1,
Pid: 0,
@@ -177,11 +179,13 @@ func autoMigrateAndInitialize(db *gorm.DB) {
IsUsed: true,
},
)
- if err != nil {
- os.Exit(0)
- }
+ if err != nil {
+ fmt.Println("menu migrate error")
+ os.Exit(0)
+ }
- err = query.SysUserMenu.WithContext(ctx).Create(
+ err = query.SysUserMenu.WithContext(ctx).
+ Create(
&model.SysUserMenu{
UserID: 1,
MenuID: 1,
@@ -203,54 +207,30 @@ func autoMigrateAndInitialize(db *gorm.DB) {
MenuID: 5,
},
)
- if err != nil {
- os.Exit(0)
- }
-
- err = query.SysConfig.WithContext(ctx).Create(
- &model.SysConfig{
- ID: 1,
- AboutSite: "> ❤️ 基于 Golang 开源的网址导航网站项目,具备完整的前后台,您可以拿来制作自己平日收藏的网址导航。\n\n\n> 如果你也是开发者,如果你也正好喜欢折腾,那希望这个网站能给你带来一些作用。",
- AboutAuthor: `
-
+ if err != nil {
+ fmt.Println("user menu migrate error")
+ os.Exit(0)
+ }
-
-
-
-
-
-
- 这是一个公益项目,而且是 开源 的。你也可以拿来制作自己的网址导航。如果你有更好的想法,可以通过个人网站ch3nnn.cn中的联系方式找到我,欢迎与我交流分享。
-
-
-
-
-
-
-`,
- IsAbout: false,
- SiteTitle: "WebStack-Go - 网址导航",
- SiteKeyword: "网址导航",
- SiteDesc: "WebStack-Go - 基于 Golang 开源的网址导航网站",
- })
- if err != nil {
- os.Exit(0)
- }
+ _, err = query.SysConfig.WithContext(ctx).
+ Where(
+ query.SysConfig.ID.Eq(1),
+ ).
+ Attrs(
+ field.Attrs(&model.SysConfig{
+ AboutSite: DefaultAboutSite,
+ AboutAuthor: DefaultAuthor,
+ SiteTitle: DefaultSiteTitle,
+ SiteKeyword: DefaultSiteKeyword,
+ SiteDesc: DefaultSiteDesc,
+ }),
+ ).
+ FirstOrCreate()
- fmt.Println("success initialize")
+ if err != nil {
+ fmt.Println("config migrate error")
+ os.Exit(0)
}
+
+ fmt.Println("success initialize")
}
diff --git a/internal/dal/repository/sys_config.go b/internal/dal/repository/sys_config.go
index a762e11..972b348 100644
--- a/internal/dal/repository/sys_config.go
+++ b/internal/dal/repository/sys_config.go
@@ -6,6 +6,44 @@ import (
"github.com/ch3nnn/webstack-go/internal/dal/query"
)
+const (
+ DefaultAboutSite = "> ❤️ 基于 Golang 开源的网址导航网站项目,具备完整的前后台,您可以拿来制作自己平日收藏的网址导航。\n\n\n> 如果你也是开发者,如果你也正好喜欢折腾,那希望这个网站能给你带来一些作用。"
+ DefaultAuthor = `
+
+
+
+
+
+
+
+
+ 这是一个公益项目,而且是 开源 的。你也可以拿来制作自己的网址导航。如果你有更好的想法,可以通过个人网站ch3nnn.cn中的联系方式找到我,欢迎与我交流分享。
+
+
+
+
+
+
+`
+ DefaultSiteTitle = "WebStack-Go - 网址导航"
+ DefaultSiteKeyword = "网址导航"
+ DefaultSiteDesc = "WebStack-Go - 基于 Golang 开源的网址导航网站"
+)
+
var _ iCustomGenSysConfigFunc = (*customSysConfigDao)(nil)
type (
diff --git a/internal/dal/repository/sys_user.go b/internal/dal/repository/sys_user.go
index d37a227..6c2917e 100644
--- a/internal/dal/repository/sys_user.go
+++ b/internal/dal/repository/sys_user.go
@@ -6,6 +6,11 @@ import (
"github.com/ch3nnn/webstack-go/internal/dal/query"
)
+const (
+ DefaultUname = "admin"
+ DefaultUPassword = "admin"
+)
+
var _ iCustomGenSysUserFunc = (*customSysUserDao)(nil)
type (
diff --git a/internal/service/config/config.go b/internal/service/config/config.go
index b4b5e47..d5b06ab 100644
--- a/internal/service/config/config.go
+++ b/internal/service/config/config.go
@@ -12,7 +12,7 @@ import (
)
func (s *service) GetConfig(ctx context.Context) (*v1.ConfigResp, error) {
- conf, err := s.configRepo.WithContext(ctx).FindOne(s.configRepo.WhereByID(1))
+ conf, err := s.configRepo.WithContext(ctx).FindOne()
if err != nil {
return nil, err
}
diff --git a/internal/service/user/updatepassword.go b/internal/service/user/updatepassword.go
index ce668d0..5d1ebe0 100644
--- a/internal/service/user/updatepassword.go
+++ b/internal/service/user/updatepassword.go
@@ -20,7 +20,6 @@ func (s *service) UpdatePassword(ctx *gin.Context, req *v1.UpdatePasswordReq) (*
user, err := s.userRepo.WithContext(ctx).
FindOne(
s.userRepo.WhereByID(ctx.GetInt(middleware.UserID)),
- s.userRepo.WhereByPassword(req.OldPassword),
)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
@@ -29,10 +28,14 @@ func (s *service) UpdatePassword(ctx *gin.Context, req *v1.UpdatePasswordReq) (*
return nil, err
}
+ if user.Password != req.OldPassword {
+ return nil, v1.ErrorUserOldPassword
+ }
+
_, err = s.userRepo.WithContext(ctx).Update(&model.SysUser{Password: req.NewPassword}, s.userRepo.WhereByID(user.ID))
if err != nil {
return nil, err
}
- return &v1.UpdatePasswordResp{}, nil
+ return nil, nil
}
折腾不息 · 乐此不疲.
-