gin框架学习-controller

controller负责接收

package controller

import (
	"Gin_demo/CloudRestaurant/model"
	"Gin_demo/CloudRestaurant/param"
	service "Gin_demo/CloudRestaurant/service"
	"Gin_demo/CloudRestaurant/tool"
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"os"
	"strconv"
	"time"
)

type MemberController struct {

}

//注册的路由方法
func (mc * MemberController)Router(engine *gin.Engine)  {
	engine.GET("/api/sendcode", mc.sendSmsCode)
	engine.POST("/api/login_sms", mc.smsLogin)
	engine.GET("/api/captcha", mc.captcha)
	engine.POST("/api/vertifycga",mc.vertifyCaptcha)

	//login_pwd
	engine.POST("/api/login_pwd",mc.nameLogin)

	//上传头像
	engine.POST("/api/upload/avator", mc.uploadAvator)
}

//上传用户头像
func (mc *MemberController)uploadAvator(context *gin.Context){
	//1. 解析数据
	userId := context.PostForm("user_id")
	file, err := context.FormFile("avatar")
	if err!= nil {
		tool.Failed(context, "参数解析失败")
		return
	}

	num := "user_"+userId
	fmt.Println("num:",num)
	//2. 只有登录才能修改用户头像信息
	//sesstion := tool.Getsess(context, num)
	//fmt.Println("sesstion:",sesstion)
	//if sesstion == nil {
	//	tool.Failed(context, "参数不合法")
	//	return
	//}
	var member model.Member = model.Member{
		Id:           1,
	}
	//json.Unmarshal(sesstion.([]byte),&member)

	//2. file保存在本地
	fileName := "./uploadfile/"+strconv.FormatInt(time.Now().Unix(), 10)+file.Filename
	err = context.SaveUploadedFile(file, fileName)
	if err != nil {
		tool.Failed(context,"头像更新失败")
		return
	}

	//将文件上传到fastDFS系统
	fileId := tool.UploadFile(fileName)
	if fileId != "" {
		 //删除本地文件
		os.Remove(fileName)
		//3. 将保存后的文件本地路径, 保存到用户表中的头像字段
		memberService := service.MemberService{}
		fileN := memberService.UploadAvator(member.Id, fileId)
		if len(fileN) != 0 {
			tool.Success(context, tool.FileServerAddr()+"/" +fileN)
			return
		}
	}
	//4. 返回结果
	tool.Failed(context, "上传失败")

}

//用户名密码登录
func (mc *MemberController)nameLogin(context * gin.Context)  {
	//1. 解析参数
	var loginParam param.LoginParam
	err := tool.Decode(context.Request.Body,&loginParam)
	if err!=nil {
		tool.Failed(context,"参数解析失败")
		return
	}
	fmt.Println("loginParam:",loginParam)
	if len(loginParam.Name) == 0 ||len(loginParam.Password) == 0{
		tool.Failed(context, "用户名或者密码不能为空")
		return
	}

	//2. 验证验证码
	result := tool.VertifyCaptcha(loginParam.Id, loginParam.Value)
	if !result {
		tool.Failed(context, "验证码不正确, 请重新验证")
		return
	}

	//3. 登录 用户存在  或者  用户不存在
	ms := service.MemberService{}
	member := ms.Login(loginParam.Name, loginParam.Password)
	if member == nil {
		tool.Failed(context, "用户名或者密码错误")
		return
	}

	//登录成功
	if member.Id != 0 {
		sess, _ := json.Marshal(member)
		err := tool.Setsess(context,"user_"+strconv.FormatInt(member.Id,10),sess)
		if err!=nil {
			tool.Failed(context, "登录失败")
			return
		}
		tool.Success(context, member)
		return
	}
	tool.Failed(context, "登录失败")
}

//生成验证码
func (mc *MemberController)captcha(content *gin.Context)  {
	//todo 生成验证码 并返回客户端
	 tool.GenerateCaptcha(content)
}

//验证验证码是否正确
func (mc *MemberController)vertifyCaptcha(ctx *gin.Context)  {
	var captcha tool.CaptchaResult
	err := tool.Decode(ctx.Request.Body, &captcha)
	if err!=nil {
		tool.Failed(ctx, "参数解析失败")
		return
	}
	result := tool.VertifyCaptcha(captcha.Id, captcha.VertifyValue)
	if result {
		fmt.Println("验证通过")
	}else{
		fmt.Println("验证失败")
	}
	tool.Success(ctx, "验证成功")
}

//发送验证码
func (mc *MemberController)sendSmsCode(context * gin.Context)  {
	phone, exist := context.GetQuery("phone")
	if !exist {
		context.JSON(200, map[string]interface{}{
			"code":0,
			"msg":"参数解析失败",
		})
		return
	}
	fmt.Println("phone",phone)

	ms := service.MemberService{}
	isSend:= ms.SendCode(phone)
	if isSend{
		context.JSON(200, map[string]interface{}{
			"code":1,
			"msg":"短信发送成功",
		})
		return
	}else{
		context.JSON(200, map[string]interface{}{
			"code":0,
			"msg":"短信发送失败",
		})
		return
	}
}


//手机号 +短信 登录
func (mc *MemberController)smsLogin(context * gin.Context)  {
	var smsLoginParam param.SmsLoginParam
	err := tool.Decode(context.Request.Body,&smsLoginParam)
	if err != nil{
		fmt.Print(err)
		tool.Failed(context,"参数解析失败")
		return
	}

	//完成手机+验证码校验
	us := service.MemberService{}
	member := us.SmsLogin(smsLoginParam)

	if member != nil {
		sess, _ := json.Marshal(member)
		err := tool.Setsess(context,"user_"+string(member.Id),sess)
		if err!=nil {
			tool.Failed(context, "登录失败")
			return
		}
		tool.Success(context,member)
		return
	}
	tool.Failed(context, "登录失败")
}

路由过来的网络请求处理:

猜你喜欢

转载自blog.csdn.net/Batac_Lee/article/details/109626603