Feat: room hot list

pull/21/head
zijiren233 2 years ago
parent 379ef5d85b
commit 98d51c0604

@ -51,6 +51,8 @@ func Init(e *gin.Engine) {
room.GET("/check", CheckRoom)
room.GET("/hot", RoomHotList)
room.GET("/list", RoomList)
needAuthUser.POST("/create", CreateRoom)

@ -56,7 +56,47 @@ func CreateRoom(ctx *gin.Context) {
}))
}
func RoomHotList(ctx *gin.Context) {
page, pageSize, err := GetPageAndPageSize(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
}
r := op.GetAllRoomsInCacheWithoutHidden()
rs := vec.New[*model.RoomListResp](vec.WithCmpLess[*model.RoomListResp](func(v1, v2 *model.RoomListResp) bool {
return v1.PeopleNum < v2.PeopleNum
}), vec.WithCmpEqual[*model.RoomListResp](func(v1, v2 *model.RoomListResp) bool {
return v1.PeopleNum == v2.PeopleNum
}))
for _, v := range r {
rs.Push(&model.RoomListResp{
RoomId: v.ID,
RoomName: v.Name,
PeopleNum: v.ClientNum(),
NeedPassword: v.NeedPassword(),
Creator: op.GetUserName(v.Room.CreatorID),
CreatedAt: v.Room.CreatedAt.UnixMilli(),
})
}
rs.SortStable()
if ctx.DefaultQuery("sort", "desc") == "desc" {
rs.Reverse()
}
ctx.JSON(http.StatusOK, model.NewApiDataResp(gin.H{
"total": rs.Len(),
"list": utils.GetPageItems(rs.Slice(), page, pageSize),
}))
}
func RoomList(ctx *gin.Context) {
order := ctx.Query("order")
if order == "" {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("order is required"))
return
}
page, pageSize, err := GetPageAndPageSize(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
@ -75,30 +115,7 @@ func RoomList(ctx *gin.Context) {
total := 0
switch ctx.DefaultQuery("order", "peopleNum") {
case "peopleNum":
r := op.GetAllRoomsInCacheWithoutHidden()
rs := vec.New[*model.RoomListResp](vec.WithCmpLess[*model.RoomListResp](func(v1, v2 *model.RoomListResp) bool {
return v1.PeopleNum < v2.PeopleNum
}), vec.WithCmpEqual[*model.RoomListResp](func(v1, v2 *model.RoomListResp) bool {
return v1.PeopleNum == v2.PeopleNum
}))
for _, v := range r {
rs.Push(&model.RoomListResp{
RoomId: v.ID,
RoomName: v.Name,
PeopleNum: v.ClientNum(),
NeedPassword: v.NeedPassword(),
Creator: op.GetUserName(v.Room.CreatorID),
CreatedAt: v.Room.CreatedAt.UnixMilli(),
})
}
rs.SortStable()
if desc {
rs.Reverse()
}
total = rs.Len()
resp = utils.GetPageItems(rs.Slice(), page, pageSize)
switch order {
case "createdAt":
if desc {
scopes = append(scopes, db.OrderByCreatedAtDesc)

Loading…
Cancel
Save