feat: list & block online users

This commit is contained in:
naiba
2024-12-22 01:08:07 +08:00
parent 653d0cf2e9
commit 4af7e83004
10 changed files with 167 additions and 12 deletions

View File

@@ -2,6 +2,7 @@ package controller
import (
"slices"
"strconv"
"github.com/gin-gonic/gin"
"golang.org/x/crypto/bcrypt"
@@ -76,7 +77,7 @@ func updateProfile(c *gin.Context) (any, error) {
// @Security BearerAuth
// @Schemes
// @Description List user
// @Tags auth required
// @Tags admin required
// @Produce json
// @Success 200 {object} model.CommonResponse[[]model.User]
// @Router /user [get]
@@ -93,7 +94,7 @@ func listUser(c *gin.Context) ([]model.User, error) {
// @Security BearerAuth
// @Schemes
// @Description Create user
// @Tags auth required
// @Tags admin required
// @Accept json
// @param request body model.UserForm true "User Request"
// @Produce json
@@ -135,7 +136,7 @@ func createUser(c *gin.Context) (uint64, error) {
// @Security BearerAuth
// @Schemes
// @Description Batch delete users
// @Tags auth required
// @Tags admin required
// @Accept json
// @param request body []uint true "id list"
// @Produce json
@@ -154,3 +155,59 @@ func batchDeleteUser(c *gin.Context) (any, error) {
err := singleton.OnUserDelete(ids, newGormError)
return nil, err
}
// List online users
// @Summary List online users
// @Security BearerAuth
// @Schemes
// @Description List online users
// @Tags auth required
// @Param limit query uint false "Page limit"
// @Param offset query uint false "Page offset"
// @Produce json
// @Success 200 {object} model.PaginatedResponse[[]model.OnlineUser, model.OnlineUser]
// @Router /online-user [get]
func listOnlineUser(c *gin.Context) (*model.Value[[]*model.OnlineUser], error) {
limit, err := strconv.Atoi(c.Query("limit"))
if err != nil || limit < 1 {
limit = 25
}
offset, err := strconv.Atoi(c.Query("offset"))
if err != nil || offset < 0 {
offset = 0
}
return &model.Value[[]*model.OnlineUser]{
Value: singleton.GetOnlineUsers(limit, offset),
Pagination: model.Pagination{
Offset: offset,
Limit: limit,
Total: int64(singleton.GetOnlineUserCount()),
},
}, nil
}
// Batch block online user
// @Summary Batch block online user
// @Security BearerAuth
// @Schemes
// @Description Batch block online user
// @Tags admin required
// @Accept json
// @Param request body []string true "block list"
// @Produce json
// @Success 200 {object} model.CommonResponse[any]
// @Router /online-user/batch-block [patch]
func batchBlockOnlineUser(c *gin.Context) (any, error) {
var list []string
if err := c.ShouldBindJSON(&list); err != nil {
return nil, err
}
if err := singleton.BlockByIPs(list); err != nil {
return nil, newGormError("%v", err)
}
return nil, nil
}