Files
nCovTrack-Backend/handler/user.go
2022-02-27 16:36:33 +08:00

145 lines
4.0 KiB
Go

package handler
import (
"github.com/gin-gonic/gin"
"nCovTrack-Backend/models"
"nCovTrack-Backend/service/user"
"nCovTrack-Backend/utils"
"regexp"
)
//UserRegisterHandler user register
// @Tags User
// @Accept json
// @Produce json
// @Summary user register account
// @Success 200 {object} utils.GinResponse{}
// @Router /user/register [post]
// @Param json body models.UserRegister true "json"
func UserRegisterHandler(c *gin.Context) {
jsonMap := bindJsonStruct[models.UserRegister](c)
if jsonMap == nil {
return
}
registered := user.NoDuplicatePhoneOrEmail(jsonMap["phone"].(string), jsonMap["email"].(string))
if registered {
utils.Success(c, 200, 200, "Registered", nil)
}
colMap := models.MapJ2c[models.BackUser](jsonMap, true)
user.Register(colMap)
}
//UserApproveHandler admin approve account
// @Tags User
// @Accept json
// @Produce json
// @Summary admin approve account, user can use account after approved
// @Success 200 {object} utils.GinResponse{}
// @Router /user/approve [post]
// @Param Token header string true "token"
// @Param json body models.UserApprove true "json"
func UserApproveHandler(c *gin.Context) {
//TODO: auth user is admin or not
jsonMap := bindJsonStruct[models.UserApprove](c)
if jsonMap == nil {
return
}
if !user.ApproveRegister(jsonMap["email"].(string), jsonMap["pass"].(bool)) {
RequestErr(c, "approve failed")
return
}
utils.Succ(c, nil)
}
//UserLoginHandler admin approve account
// @Tags User
// @Accept json
// @Produce json
// @Summary user login
// @Success 200 {object} utils.GinResponse{}
// @Router /user/login [post]
// @Param json body models.UserLogin true "json"
func UserLoginHandler(c *gin.Context) {
jsonMap := bindJsonStruct[models.UserLogin](c)
if jsonMap == nil {
return
}
token := user.Login(jsonMap)
if token == "" {
// TODO: change to request error
utils.Succ(c, map[string]interface{}{"msg": "failed"})
return
}
c.Writer.Header().Set("X-Token", token)
utils.Succ(c, nil)
}
//ListRegisterUserHandler list register infos
// @Tags User
// @Produce json
// @Summary list register infos, which is to be approved
// @Success 200 {object} utils.GinResponse{}
// @Router /user/registers [get]
// @Param Token header string true "token"
func ListRegisterUserHandler(c *gin.Context) {
registers := user.ListRegister()
utils.Succ(c, registers)
}
//SendEmailCodeHandler send verify code
// @Tags User
// @Produce json
// @Summary send verify code
// @Success 200 {object} utils.GinResponse{}
// @Router /user/{code} [get]
// @Param email path string true "email"
func SendEmailCodeHandler(c *gin.Context) {
email := c.Param("email")
match, _ := regexp.Match("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$", []byte(email))
if !match {
RequestErr(c, map[string]interface{}{"email": email})
return
}
if ok := user.SendEmailCode(email); !ok {
ServerErr(c, "Send Email Failed")
return
}
utils.Succ(c, nil)
}
//VerifyEmailCodeHandler verify code
// @Tags User
// @Produce json
// @Summary send verify code
// @Success 200 {object} utils.GinResponse{}
// @Router /user/code/{email}/{code} [get]
// @Param email path string true "email"
// @Param code path string true "code"
func VerifyEmailCodeHandler(c *gin.Context) {
email := c.Param("email")
code := c.Param("code")
emailMatch, _ := regexp.Match("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$", []byte(email))
codeMatch, _ := regexp.Match("^[\\w]{6}$", []byte(code))
if !codeMatch || !emailMatch {
RequestErr(c, map[string]interface{}{"email": email, "code": code})
return
}
utils.Succ(c, user.VerifyEmailCode(email, code))
}
//ChangePasswordHandler change user's password
// @Tags User
// @Accept json
// @Produce json
// @Summary change user's password
// @Success 200 {object} utils.GinResponse{}
// @Router /user/chpwd [post]
// @Param json body models.UserChangePwd true "json"
func ChangePasswordHandler(c *gin.Context) {
jsonMap := bindJsonStruct[models.UserChangePwd](c)
if jsonMap == nil {
return
}
utils.Succ(c, map[string]interface{}{"success": user.ChangePassword(jsonMap)})
}