package auth import ( "encoding/json" "io" "net/http" "gitea.konchin.com/ytshih/inp2025/middlewares" "gitea.konchin.com/ytshih/inp2025/models" "gitea.konchin.com/ytshih/inp2025/utils" "github.com/uptrace/bunrouter" ) func (self *Handlers) PostRegister( w http.ResponseWriter, req bunrouter.Request, ) error { ctx := req.Context() b, err := io.ReadAll(req.Body) if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusBadRequest, Message: "failed to read body payload", OriginError: err, } } var user models.User if err := json.Unmarshal(b, &user); err != nil { return middlewares.HTTPError{ StatusCode: http.StatusBadRequest, Message: "failed to unmarshal json into user", OriginError: err, } } res, err := self.db.NewInsert(). Model(&user). On("CONFLICT (username) DO NOTHING"). Exec(ctx) if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusInternalServerError, Message: "failed to insert user", OriginError: err, } } if cnt, err := res.RowsAffected(); err != nil || cnt == 0 { if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusInternalServerError, Message: "failed to get affected row count", OriginError: err, } } if cnt == 0 { return middlewares.HTTPError{ StatusCode: http.StatusBadRequest, Message: "username already exist", } } } return utils.Success(w) }