From d132b6d08969af73ccd481c43194581440d26ae7 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Sat, 12 Oct 2024 23:29:42 +0800 Subject: [PATCH] feat: exit room --- server/handlers/init.go | 2 ++ server/handlers/user.go | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/server/handlers/init.go b/server/handlers/init.go index cf315b2..0199480 100644 --- a/server/handlers/init.go +++ b/server/handlers/init.go @@ -296,6 +296,8 @@ func initUser(user *gin.RouterGroup, needAuthUser *gin.RouterGroup) { needAuthRoom.POST("/delete", UserDeleteRoom) + needAuthRoom.POST("/exit", UserExitRoom) + needAuthRoom.GET("/joined", UserCheckJoinedRoom) } } diff --git a/server/handlers/user.go b/server/handlers/user.go index 8bdb059..f025fce 100644 --- a/server/handlers/user.go +++ b/server/handlers/user.go @@ -788,3 +788,29 @@ func UserSignupPassword(ctx *gin.Context) { handleUserToken(ctx, user.Value()) } + +func UserExitRoom(ctx *gin.Context) { + user := ctx.MustGet("user").(*op.UserEntry).Value() + log := ctx.MustGet("log").(*logrus.Entry) + + var req model.IdReq + if err := model.Decode(ctx, &req); err != nil { + log.Errorf("failed to decode request: %v", err) + ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err)) + return + } + + roomE, err := op.LoadOrInitRoomByID(req.Id) + if err == nil { + err = roomE.Value().DeleteMember(user.ID) + } else { + err = db.DeleteRoomMember(req.Id, user.ID) + } + if err != nil { + log.Errorf("failed to delete room member: %v", err) + ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err)) + return + } + + ctx.Status(http.StatusNoContent) +}