完善功能
This commit is contained in:
@ -11,6 +11,8 @@ import (
|
||||
"server/utility/encrypt"
|
||||
"server/utility/jwt"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
)
|
||||
|
||||
type sUser struct{}
|
||||
@ -37,7 +39,13 @@ func (s *sUser) Login(ctx context.Context, in *model.UserLoginIn) (out *model.Us
|
||||
if !encrypt.ComparePassword(entityUser.PasswordHash, in.Password) {
|
||||
return nil, ecode.Password // 密码不正确
|
||||
}
|
||||
token, err := jwt.GenerateToken(&jwt.TokenIn{UserId: entityUser.Id, Role: "user"})
|
||||
// 判断是否为作者
|
||||
author, _ := dao.Authors.Ctx(ctx).Where(do.Authors{UserId: entityUser.Id, Status: 1}).One()
|
||||
role := "user"
|
||||
if author != nil && !author.IsEmpty() {
|
||||
role = "author"
|
||||
}
|
||||
token, err := jwt.GenerateToken(&jwt.TokenIn{UserId: entityUser.Id, Role: role})
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("token_generation_failed")
|
||||
}
|
||||
@ -92,7 +100,111 @@ func (s *sUser) Info(ctx context.Context, in *model.UserInfoIn) (out *model.User
|
||||
}
|
||||
|
||||
func (s *sUser) Delete(ctx context.Context, in *model.UserDeleteIn) (out *model.UserDeleteOut, err error) {
|
||||
// FIXME
|
||||
// 查询用户信息
|
||||
user, err := dao.Users.Ctx(ctx).Where(do.Users{Id: in.UserId}).One()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("database_query_failed")
|
||||
}
|
||||
if user == nil {
|
||||
return nil, ecode.Auth.Sub("user_not_found")
|
||||
}
|
||||
|
||||
var entityUser entity.Users
|
||||
if err = user.Struct(&entityUser); err != nil {
|
||||
return nil, ecode.Fail.Sub("data_conversion_failed")
|
||||
}
|
||||
|
||||
// 验证密码
|
||||
if !encrypt.ComparePassword(entityUser.PasswordHash, in.Password) {
|
||||
return nil, ecode.Password.Sub("password_incorrect")
|
||||
}
|
||||
|
||||
// 开启事务,删除用户及相关数据
|
||||
err = dao.Users.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
// 1. 删除用户阅读记录
|
||||
_, err := dao.UserReadRecords.Ctx(ctx).TX(tx).
|
||||
Where(dao.UserReadRecords.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("read_record_delete_failed")
|
||||
}
|
||||
|
||||
// 2. 删除用户阅读历史
|
||||
_, err = dao.UserReadHistory.Ctx(ctx).TX(tx).
|
||||
Where(dao.UserReadHistory.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("history_delete_failed")
|
||||
}
|
||||
|
||||
// 3. 删除用户书架
|
||||
_, err = dao.Bookshelves.Ctx(ctx).TX(tx).
|
||||
Where(dao.Bookshelves.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("bookshelf_delete_failed")
|
||||
}
|
||||
|
||||
// 4. 删除用户关注作者记录
|
||||
_, err = dao.UserFollowAuthors.Ctx(ctx).TX(tx).
|
||||
Where(dao.UserFollowAuthors.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("follow_author_delete_failed")
|
||||
}
|
||||
|
||||
// 5. 删除用户评分记录
|
||||
_, err = dao.BookRatings.Ctx(ctx).TX(tx).
|
||||
Where(dao.BookRatings.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("rating_delete_failed")
|
||||
}
|
||||
|
||||
// 6. 删除用户章节购买记录
|
||||
_, err = dao.UserChapterPurchases.Ctx(ctx).TX(tx).
|
||||
Where(dao.UserChapterPurchases.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("purchase_delete_failed")
|
||||
}
|
||||
|
||||
// 7. 删除用户积分日志
|
||||
_, err = dao.UserPointsLogs.Ctx(ctx).TX(tx).
|
||||
Where(dao.UserPointsLogs.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("points_log_delete_failed")
|
||||
}
|
||||
|
||||
// 8. 删除用户反馈
|
||||
_, err = dao.Feedbacks.Ctx(ctx).TX(tx).
|
||||
Where(dao.Feedbacks.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("feedback_delete_failed")
|
||||
}
|
||||
|
||||
// 9. 删除作者信息(如果用户是作者)
|
||||
_, err = dao.Authors.Ctx(ctx).TX(tx).
|
||||
Where(dao.Authors.Columns().UserId, in.UserId).
|
||||
Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("author_delete_failed")
|
||||
}
|
||||
|
||||
// 10. 最后删除用户(软删除)
|
||||
_, err = dao.Users.Ctx(ctx).TX(tx).Where(do.Users{Id: in.UserId}).Delete()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("user_delete_failed")
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &model.UserDeleteOut{Success: true}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user