/** * package api * 作用:房间管理相关API处理器 */ package api import ( "xk-websocket-v2/internal/service" "xk-websocket-v2/internal/utils" "github.com/gin-gonic/gin" ) /** * CreateRoomHandler * 功能:创建房间 * 路径:POST /api/rooms */ func CreateRoomHandler(c *gin.Context) { userID, _ := c.Get("user_id") var req struct { RoomType string `json:"room_type" binding:"required,oneof=p2p group"` Members []string `json:"members" binding:"required"` RoomName string `json:"room_name"` RoomAvatar string `json:"room_avatar"` } if err := c.ShouldBindJSON(&req); err != nil { utils.BadRequest(c, "参数错误: "+err.Error()) return } room, err := service.RoomSvc.CreateRoom(req.RoomType, req.Members, userID.(string)) if err != nil { utils.BadRequest(c, err.Error()) return } // 如果提供了房间名称和头像,更新 if req.RoomName != "" || req.RoomAvatar != "" { updates := make(map[string]interface{}) if req.RoomName != "" { updates["room_name"] = req.RoomName } if req.RoomAvatar != "" { updates["room_avatar"] = req.RoomAvatar } service.RoomSvc.DB.Model(room).Updates(updates) } utils.SuccessWithData(c, room, "创建成功") } /** * GetRoomHandler * 功能:获取房间信息 * 路径:GET /api/rooms/:id */ func GetRoomHandler(c *gin.Context) { roomID := c.Param("id") room, err := service.RoomSvc.GetRoom(roomID) if err != nil { utils.NotFound(c, "房间不存在") return } utils.SuccessWithData(c, room, "获取成功") }