diff --git a/go_fabric/api/v1/poem.go b/go_fabric/api/v1/poem.go index 5cbf3a7..5a35076 100644 --- a/go_fabric/api/v1/poem.go +++ b/go_fabric/api/v1/poem.go @@ -9,7 +9,7 @@ import ( ) func PoemGet(c *gin.Context) { - var userRegister service.UserService + var userRegister service.PoemService if err := c.ShouldBind(&userRegister); err == nil { res := userRegister.Register(c.Request.Context()) c.JSON(http.StatusOK, res) diff --git a/go_fabric/api/v1/user.go b/go_fabric/api/v1/user.go deleted file mode 100644 index d170b96..0000000 --- a/go_fabric/api/v1/user.go +++ /dev/null @@ -1,80 +0,0 @@ -package v1 - -import ( - "go_fabric/pkg/util" - "go_fabric/service" - "net/http" - - "github.com/gin-gonic/gin" -) - -func UserRegister(c *gin.Context) { - var userRegister service.UserService - if err := c.ShouldBind(&userRegister); err == nil { - res := userRegister.Register(c.Request.Context()) - c.JSON(http.StatusOK, res) - } else { - c.JSON(http.StatusBadRequest, ErrorResponse(err)) //400参数错误 - util.LoggerObj.Error(err) - } -} - -func UserLogin(c *gin.Context) { - var userLogin service.UserService - if err := c.ShouldBind(&userLogin); err == nil { - res := userLogin.Login(c.Request.Context()) - c.JSON(http.StatusOK, res) - } else { - c.JSON(http.StatusBadRequest, ErrorResponse(err)) //400参数错误 - util.LoggerObj.Error(err) - } -} - -func UserUpdate(c *gin.Context) { - var userUpdate service.UserService - claims, _ := util.ParseToken(c.GetHeader("Authorization")) - if err := c.ShouldBind(&userUpdate); err == nil { - res := userUpdate.Update(c.Request.Context(), claims.ID) - c.JSON(http.StatusOK, res) - } else { - c.JSON(http.StatusBadRequest, ErrorResponse(err)) //400参数错误 - util.LoggerObj.Error(err) - } -} - -func UpdateAvatar(c *gin.Context) { - file, fileHeader, _ := c.Request.FormFile("file") - fileSize := fileHeader.Size - var updateAvatar service.UserService - claims, _ := util.ParseToken(c.GetHeader("Authorization")) - if err := c.ShouldBind(&updateAvatar); err == nil { - res := updateAvatar.Post(c.Request.Context(), claims.ID, file, fileSize) - c.JSON(http.StatusOK, res) - } else { - c.JSON(http.StatusBadRequest, ErrorResponse(err)) //400参数错误 - util.LoggerObj.Error(err) - } -} - -func SendEmail(c *gin.Context) { - var sendEmail service.SendEmailService - claims, _ := util.ParseToken(c.GetHeader("Authorization")) - if err := c.ShouldBind(&sendEmail); err == nil { - res := sendEmail.Send(c.Request.Context(), claims.ID) - c.JSON(http.StatusOK, res) - } else { - c.JSON(http.StatusBadRequest, ErrorResponse(err)) //400参数错误 - util.LoggerObj.Error(err) - } -} - -func ValidEmail(c *gin.Context) { - var validEmail service.ValidEmailService - if err := c.ShouldBind(&validEmail); err == nil { - res := validEmail.Valid(c.Request.Context(), c.GetHeader("Authorization")) - c.JSON(http.StatusOK, res) - } else { - c.JSON(http.StatusBadRequest, ErrorResponse(err)) //400参数错误 - util.LoggerObj.Error(err) - } -} diff --git a/go_fabric/dao/poem.go b/go_fabric/dao/poem.go index e5e1eaa..92e14c3 100644 --- a/go_fabric/dao/poem.go +++ b/go_fabric/dao/poem.go @@ -7,58 +7,33 @@ import ( "gorm.io/gorm" ) -type UserDao struct { +type PoemDao struct { *gorm.DB } -func NewUserDao(ctx context.Context) *UserDao { - return &UserDao{NewDBClient(ctx)} +func NewPoemDao(ctx context.Context) *PoemDao { + return &PoemDao{NewDBClient(ctx)} } -func NewUserDaoDB(db *gorm.DB) *UserDao { - return &UserDao{db} +func NewPomeDaoDB(db *gorm.DB) *PoemDao { + return &PoemDao{db} } -// 是否存在该用户名用户 -func (dao *UserDao) ExistOrNotByUserName(userName string) (user *model.User, exist bool, err error) { - var count int64 - err = dao.DB.Model(&model.User{}).Where("user_name=?", userName).Find(&user).Count(&count).Error - if count == 0 { - return nil, false, err - } - return user, true, nil -} - -// 添加用户 -func (dao *UserDao) CreateUser(user *model.User) error { - return dao.DB.Model(&model.User{}).Create(&user).Error -} - -// 根据Id寻找用户 -func (dao *UserDao) GetUserById(id uint) (user *model.User, err error) { - err = dao.DB.Model(&model.User{}).Where("id=?", id).First(&user).Error +// 根据Id寻找诗句 +func (dao *PoemDao) GetUserById(id uint) (user *model.Poem, err error) { + err = dao.DB.Model(&model.Poem{}).Where("id=?", id).First(&user).Error return } -// 查询所有用户 列表 +// 查询所有诗句 列表 // offset表示偏移量,pageSize表示每页数据量,pageNum表示当前查询的页码数 -func (dao *UserDao) ListUser(pageNum int, pageSize int) (users []model.User, err error) { +func (dao *PoemDao) ListUser(pageNum int, pageSize int) (users []model.Poem, err error) { offset := (pageNum - 1) * pageSize - err = dao.DB.Model(&model.User{}).Offset(offset).Limit(pageSize).Find(&users).Error + err = dao.DB.Model(&model.Poem{}).Offset(offset).Limit(pageSize).Find(&users).Error return } -// 根据id修改用户信息 -func (dao *UserDao) UpdateUserById(uId uint, user *model.User) error { - return dao.DB.Model(&model.User{}).Where("id=?", uId).Updates(&user).Error -} - -// 根据用户名删除用户 -func (dao *UserDao) DeleteByUserName(user *model.User) error { +// 根据用户名删除诗句 +func (dao *PoemDao) DeleteByUserName(user *model.Poem) error { return dao.DB.Delete(&user).Error } - -// 封禁用户 -func (dao *UserDao) PassiveByUserName(uId uint) error { - return dao.DB.Model(&model.User{}).Where("id=?", uId).Update("status", "passive").Error -} diff --git a/go_fabric/service/poem.go b/go_fabric/service/poem.go index cc72525..d8fbe8c 100644 --- a/go_fabric/service/poem.go +++ b/go_fabric/service/poem.go @@ -2,288 +2,32 @@ package service import ( "context" - "fmt" "go_fabric/conf" "go_fabric/dao" "go_fabric/model" "go_fabric/pkg/e" "go_fabric/pkg/util" "go_fabric/serializer" - "mime/multipart" - "strings" - "time" "gopkg.in/mail.v2" ) -type UserService struct { - NickName string `json:"nick_name" form:"nick_name"` - UserName string `json:"user_name" form:"user_name"` - Password string `json:"password" form:"password"` - Key string `json:"key" form:"key"` //加密密钥 -} - -type SendEmailService struct { - Email string `json:"email" form:"email"` - Password string `json:"password"` - OperationType uint `json:"operation_type" form:"operation_type"` // 1.绑定邮箱 2.解绑邮箱 3.更改密码 +type PoemService struct { + Id uint64 `json:"Id" form:"Id"` + Context string `json:"Content" form:"Content"` } type ValidEmailService struct { } -// 注册 -func (service *UserService) Register(ctx context.Context) serializer.Response { - var user model.User - code := e.Success - if service.Key == "" || len(service.Key) != 6 { - code = e.Error - return serializer.Response{ - Status: code, - Data: nil, - Msg: e.GetMsg(code), - Error: "密钥长度不符", - } - } - util.Encrypt.SetKey(service.Key) - - userDao := dao.NewUserDao(ctx) - _, exist, err := userDao.ExistOrNotByUserName(service.UserName) - if err != nil { - util.LoggerObj.Error(err) - code = e.Error - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - if exist { - code = e.ErrorExistUser - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - user = model.User{ - UserName: service.UserName, - NickName: service.NickName, - Avatar: "avatar.JPG", - Status: model.Active, - Money: "1000", - Vip: 0, - } - //密码是否为空 - if service.Password == "" { - code = e.NullPassword - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - //密码加密 - if err = user.SetPassword(service.Password); err != nil { - util.LoggerObj.Error(err) - code = e.ErrorFailEncryption - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - //创建用户 - err = userDao.CreateUser(&user) - if err != nil { - util.LoggerObj.Error(err) - code = e.Error - } - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } -} - -// 登录 -func (service *UserService) Login(ctx context.Context) serializer.Response { - var user *model.User - code := e.Success - userDao := dao.NewUserDao(ctx) - //检查用户是否存在 - user, exist, err := userDao.ExistOrNotByUserName(service.UserName) - if !exist || err != nil { - util.LoggerObj.Error(err) - code = e.UserNotFind - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Data: "用户不存在,请先注册", - } - } - //验证密码是否正确 - if user.CheckPassword(service.Password) == false { - code = e.ErrorPassword - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Data: "密码错误,请重新输入", - } - } - //分发token - token, err := util.GenerateToken(user.ID, service.UserName, 0) - if err != nil { - util.LoggerObj.Error(err) - code = e.ErrorToken - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Data: "token验证失败", - } - } - return serializer.Response{ - Status: code, - Data: serializer.TokenData{User: serializer.BuildUser(user), Token: token}, - Msg: e.GetMsg(code), - } -} - -// 用户修改信息 -func (service *UserService) Update(ctx context.Context, uId uint) serializer.Response { - var user *model.User - var err error - code := e.Success - //寻找用户 - userDao := dao.NewUserDao(ctx) - user, err = userDao.GetUserById(uId) - - //检查用户状态 - if user.Status == "passive" { - code = e.ErrorNotActive - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Error: "用户没有激活,没有权限", - } - } - - //修改昵称nickname - if service.NickName != "" { - user.NickName = service.NickName - } - err = userDao.UpdateUserById(uId, user) - if err != nil { - util.LoggerObj.Error(err) - code = e.Error - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Data: serializer.BuildUser(user), - } -} - -// 头像更新 -func (service *UserService) Post(ctx context.Context, uId uint, file multipart.File, fileSize int64) serializer.Response { - code := e.Success - var user *model.User +func (service *PoemService) Update(ctx context.Context, uId uint) serializer.Response { + var Poem *model.Poem var err error - userDao := dao.NewUserDao(ctx) - user, err = userDao.GetUserById(uId) - - if user.Status == "passive" { - code = e.ErrorNotActive - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Error: "用户没有激活,没有权限", - } - } - - if err != nil { - code = e.Error - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Error: err.Error(), - } - } - //保存图片到本地 - path, err := UploadAvatarLocalStatic(file, uId, user.UserName) - if err != nil { - code = e.ErrorUploadFail - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Error: err.Error(), - } - } - user.Avatar = path - err = userDao.UpdateUserById(uId, user) - if err != nil { - util.LoggerObj.Error(err) - code = e.Error - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Error: err.Error(), - } - } - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Data: serializer.BuildUser(user), - } -} - -// 发送验证邮件 -func (service *SendEmailService) Send(ctx context.Context, uId uint) serializer.Response { code := e.Success - var address string - var notice *model.Notice // 绑定邮箱,修改密码 模板通知 + //寻找诗句 + PoemDao := dao.NewPoemDao(ctx) + Poem, err = PoemDao.GetPoemById(uId) - userDao := dao.NewUserDao(ctx) - user, err := userDao.GetUserById(uId) - //检查用户状态 - if user.Status == "passive" { - code = e.ErrorNotActive - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Error: "用户没有激活,没有权限", - } - } - - token, err := util.GenerateEmailToken(uId, service.OperationType, service.Email, service.Password) - if err != nil { - util.LoggerObj.Error(err) - code = e.ErrorToken - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Error: err.Error(), - } - } - noticeDao := dao.NewNoticeDao(ctx) - notice, err = noticeDao.GetNoticeById(service.OperationType) - if err != nil { - util.LoggerObj.Error(err) - code = e.Error - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Error: err.Error(), - } - } - address = conf.ValidEmail + token //发送者 - mailStr := notice.Text - mailText := strings.Replace(mailStr, "+", address, -1) - fmt.Println(mailText) - m := mail.NewMessage() - m.SetHeader("From", conf.SmtpEmail) //管理员邮箱 - m.SetHeader("To", service.Email) //验证者邮箱 - m.SetHeader("Subject", "fabric_mall") - m.SetBody("text/html", mailText) d := mail.NewDialer(conf.SmtpHost, 465, conf.SmtpEmail, conf.SmtpPass) d.StartTLSPolicy = mail.MandatoryStartTLS if err = d.DialAndSend(m); err != nil { @@ -300,80 +44,3 @@ func (service *SendEmailService) Send(ctx context.Context, uId uint) serializer. Msg: e.GetMsg(code), } } - -// 验证邮箱 -func (service *ValidEmailService) Valid(ctx context.Context, token string) serializer.Response { - var userId uint - var email string - var password string - var operationType uint - code := e.Success - //验证token - if token == "" { - code = e.InvalidParams - - } else { - claims, err := util.ParseEmailToken(token) - if err != nil { - util.LoggerObj.Error(err) - code = e.ErrorToken - - } else if time.Now().Unix() > claims.ExpiresAt { - code = e.ErrorCheckTokenTimeOut - - } else { - userId = claims.UserID - email = claims.Email - password = claims.Password - operationType = claims.OperationType - } - } - if code != e.Success { - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - - // token解析成功,获取用户信息 - userDao := dao.NewUserDao(ctx) - user, err := userDao.GetUserById(userId) - if err != nil { - util.LoggerObj.Error(err) - code = e.Error - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - - if operationType == 1 { //1.绑定邮箱 - user.Email = email - } else if operationType == 2 { //2.解绑邮箱 - user.Email = "" - } else if operationType == 3 { //3.修改密码 - err = user.SetPassword(password) - if err != nil { - util.LoggerObj.Error(err) - code = e.Error - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - } - err = userDao.UpdateUserById(userId, user) - if err != nil { - util.LoggerObj.Error(err) - code = e.Error - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - } - } - return serializer.Response{ - Status: code, - Msg: e.GetMsg(code), - Data: serializer.BuildUser(user), - } -}