func newUser(c *gin.Context) *Error { var user model.User err := c.Bind(&user) if err != nil { return NewError(http.StatusBadRequest, "Bad Request", &err) } log.Printf("User : %v\n", user) if !user.IsValidUserName() { return NewError(http.StatusBadRequest, "user_name is not valid.", nil) } // ユーザーの存在チェック exist, err := database.IsUserNameExist(user.UserName) if err != nil { return NewError(http.StatusInternalServerError, "Can not read users.", &err) } if exist { return NewError(http.StatusConflict, "user_name is already exists.", nil) } if !user.CheckPassword() { return NewError(http.StatusBadRequest, "Password is not match.", nil) } user.SetPasswordHash() // 他の書き込みを待機 writeSemaphore <- 0 defer func() { <-writeSemaphore }() err = database.WriteUser(&user) if err != nil { return NewError(http.StatusInternalServerError, "User can not be written.", &err) } c.JSON(http.StatusCreated, user.Id) return nil }
func newPost(c *gin.Context) *Error { var post model.Post err := c.Bind(&post) if err != nil { return NewError(http.StatusBadRequest, "Bad Request", &err) } log.Printf("Post : %v\n", post) var user *model.User if post.SessionId != "" { user = GetUserBySessionId(post.SessionId) } if user == nil { user = &model.User{UserName: post.UserName} } if !user.IsValidUserName() { return NewError(http.StatusBadRequest, "user_name is not valid.", nil) } post.UserId = user.Id post.UserName = user.UserName log.Printf("Post (got user) : %v\n", post) // 他の書き込みを待機 writeSemaphore <- 0 defer func() { <-writeSemaphore }() err = database.WritePost(&post) if err != nil { return NewError(http.StatusInternalServerError, "Post can not be written.", &err) } c.JSON(http.StatusCreated, post.Id) return nil }