13451294168 1 year ago
parent 678dfa9bcd
commit 56e6281c30

@ -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)

@ -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)
}
}

@ -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
}

@ -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),
}
}

Loading…
Cancel
Save