init: 初始化 AssetX 项目仓库
包含 webapp(Next.js 用户端)、webapp-back(Go 后端)、 antdesign(管理后台)、landingpage(营销落地页)、 数据库 SQL 和配置文件。
This commit is contained in:
137
webapp-back/users/routers.go
Normal file
137
webapp-back/users/routers.go
Normal file
@@ -0,0 +1,137 @@
|
||||
package users
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gothinkster/golang-gin-realworld-example-app/common"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func UsersRegister(router *gin.RouterGroup) {
|
||||
router.POST("", UsersRegistration)
|
||||
router.POST("/", UsersRegistration)
|
||||
router.POST("/login", UsersLogin)
|
||||
}
|
||||
|
||||
func UserRegister(router *gin.RouterGroup) {
|
||||
router.GET("", UserRetrieve)
|
||||
router.GET("/", UserRetrieve)
|
||||
router.PUT("", UserUpdate)
|
||||
router.PUT("/", UserUpdate)
|
||||
}
|
||||
|
||||
func ProfileRetrieveRegister(router *gin.RouterGroup) {
|
||||
router.GET("/:username", ProfileRetrieve)
|
||||
}
|
||||
|
||||
func ProfileRegister(router *gin.RouterGroup) {
|
||||
router.POST("/:username/follow", ProfileFollow)
|
||||
router.DELETE("/:username/follow", ProfileUnfollow)
|
||||
}
|
||||
|
||||
func ProfileRetrieve(c *gin.Context) {
|
||||
username := c.Param("username")
|
||||
userModel, err := FindOneUser(&UserModel{Username: username})
|
||||
if err != nil {
|
||||
c.JSON(http.StatusNotFound, common.NewError("profile", errors.New("Invalid username")))
|
||||
return
|
||||
}
|
||||
profileSerializer := ProfileSerializer{c, userModel}
|
||||
c.JSON(http.StatusOK, gin.H{"profile": profileSerializer.Response()})
|
||||
}
|
||||
|
||||
func ProfileFollow(c *gin.Context) {
|
||||
username := c.Param("username")
|
||||
userModel, err := FindOneUser(&UserModel{Username: username})
|
||||
if err != nil {
|
||||
c.JSON(http.StatusNotFound, common.NewError("profile", errors.New("Invalid username")))
|
||||
return
|
||||
}
|
||||
myUserModel := c.MustGet("my_user_model").(UserModel)
|
||||
err = myUserModel.following(userModel)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("database", err))
|
||||
return
|
||||
}
|
||||
serializer := ProfileSerializer{c, userModel}
|
||||
c.JSON(http.StatusOK, gin.H{"profile": serializer.Response()})
|
||||
}
|
||||
|
||||
func ProfileUnfollow(c *gin.Context) {
|
||||
username := c.Param("username")
|
||||
userModel, err := FindOneUser(&UserModel{Username: username})
|
||||
if err != nil {
|
||||
c.JSON(http.StatusNotFound, common.NewError("profile", errors.New("Invalid username")))
|
||||
return
|
||||
}
|
||||
myUserModel := c.MustGet("my_user_model").(UserModel)
|
||||
|
||||
err = myUserModel.unFollowing(userModel)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("database", err))
|
||||
return
|
||||
}
|
||||
serializer := ProfileSerializer{c, userModel}
|
||||
c.JSON(http.StatusOK, gin.H{"profile": serializer.Response()})
|
||||
}
|
||||
|
||||
func UsersRegistration(c *gin.Context) {
|
||||
userModelValidator := NewUserModelValidator()
|
||||
if err := userModelValidator.Bind(c); err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewValidatorError(err))
|
||||
return
|
||||
}
|
||||
|
||||
if err := SaveOne(&userModelValidator.userModel); err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("database", err))
|
||||
return
|
||||
}
|
||||
c.Set("my_user_model", userModelValidator.userModel)
|
||||
serializer := UserSerializer{c}
|
||||
c.JSON(http.StatusCreated, gin.H{"user": serializer.Response()})
|
||||
}
|
||||
|
||||
func UsersLogin(c *gin.Context) {
|
||||
loginValidator := NewLoginValidator()
|
||||
if err := loginValidator.Bind(c); err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewValidatorError(err))
|
||||
return
|
||||
}
|
||||
userModel, err := FindOneUser(&UserModel{Email: loginValidator.userModel.Email})
|
||||
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnauthorized, common.NewError("login", errors.New("Not Registered email or invalid password")))
|
||||
return
|
||||
}
|
||||
|
||||
if userModel.checkPassword(loginValidator.User.Password) != nil {
|
||||
c.JSON(http.StatusUnauthorized, common.NewError("login", errors.New("Not Registered email or invalid password")))
|
||||
return
|
||||
}
|
||||
UpdateContextUserModel(c, userModel.ID)
|
||||
serializer := UserSerializer{c}
|
||||
c.JSON(http.StatusOK, gin.H{"user": serializer.Response()})
|
||||
}
|
||||
|
||||
func UserRetrieve(c *gin.Context) {
|
||||
serializer := UserSerializer{c}
|
||||
c.JSON(http.StatusOK, gin.H{"user": serializer.Response()})
|
||||
}
|
||||
|
||||
func UserUpdate(c *gin.Context) {
|
||||
myUserModel := c.MustGet("my_user_model").(UserModel)
|
||||
userModelValidator := NewUserModelValidatorFillWith(myUserModel)
|
||||
if err := userModelValidator.Bind(c); err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewValidatorError(err))
|
||||
return
|
||||
}
|
||||
|
||||
userModelValidator.userModel.ID = myUserModel.ID
|
||||
if err := myUserModel.Update(userModelValidator.userModel); err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("database", err))
|
||||
return
|
||||
}
|
||||
UpdateContextUserModel(c, myUserModel.ID)
|
||||
serializer := UserSerializer{c}
|
||||
c.JSON(http.StatusOK, gin.H{"user": serializer.Response()})
|
||||
}
|
||||
Reference in New Issue
Block a user