From 688d026d75eeba1b92ad2139646e3fbde5b2a291 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Thu, 1 Aug 2024 12:11:57 +0800 Subject: [PATCH] :sparkles: Support batch get userinfo by username --- pkg/internal/server/api/userinfo_api.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/pkg/internal/server/api/userinfo_api.go b/pkg/internal/server/api/userinfo_api.go index 0b13c0e..cbfa39c 100644 --- a/pkg/internal/server/api/userinfo_api.go +++ b/pkg/internal/server/api/userinfo_api.go @@ -39,14 +39,25 @@ func getOtherUserinfo(c *fiber.Ctx) error { func getOtherUserinfoBatch(c *fiber.Ctx) error { idSet := strings.Split(c.Query("id"), ",") - if len(idSet) == 0 { - return fiber.NewError(fiber.StatusBadRequest, "id list is required") + nameSet := strings.Split(c.Query("name"), ",") + if len(idSet) == 0 && len(nameSet) == 0 { + return fiber.NewError(fiber.StatusBadRequest, "query filter is required") + } + + if len(idSet)+len(nameSet) > 100 { + return fiber.NewError(fiber.StatusBadRequest, "only support 100 users in a single batch") + } + + tx := database.C.Model(&models.Account{}).Limit(100) + if len(idSet) > 0 { + tx = tx.Where("id IN ?", idSet) + } + if len(nameSet) > 0 { + tx = tx.Where("name IN ?", nameSet) } var accounts []models.Account - if err := database.C. - Where("id IN ?", idSet). - Find(&accounts).Error; err != nil { + if err := tx.Find(&accounts).Error; err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) }