@@ -1144,3 +1144,121 @@ func (rc *RongCloud) UserProfilBatchQuery(userId string) (*UserProfileQueryRespo
11441144 }
11451145 return & userProfileQueryResponse , nil
11461146}
1147+
1148+ // UserQueryItem represents a single user record returned by /user/query.json
1149+ type UserQueryItem struct {
1150+ UserId string `json:"userId"`
1151+ UserName string `json:"userName"`
1152+ UserPortrait string `json:"userPortrait"`
1153+ RegTime string `json:"regTime"`
1154+ }
1155+
1156+ // UserQueryResponse is the response of /user/query.json (non-200 codes are raised by rc.do)
1157+ type UserQueryResponse struct {
1158+ Total int `json:"total"`
1159+ Users []UserQueryItem `json:"users"`
1160+ }
1161+
1162+ // UserQueryOrder represents sort order for user query.
1163+ type UserQueryOrder int
1164+
1165+ const (
1166+ UserQueryOrderAsc UserQueryOrder = 0
1167+ UserQueryOrderDesc UserQueryOrder = 1
1168+ )
1169+
1170+ // userQueryParams holds query params with defaults applied.
1171+ type userQueryParams struct {
1172+ page int
1173+ pageSize int
1174+ order UserQueryOrder
1175+ }
1176+
1177+ // UserQueryOption is a functional option to customize user query parameters.
1178+ type UserQueryOption func (* userQueryParams )
1179+
1180+ // WithPage sets the page number (must be > 0; otherwise default is used).
1181+ func WithPage (page int ) UserQueryOption {
1182+ return func (p * userQueryParams ) {
1183+ if page > 0 {
1184+ p .page = page
1185+ }
1186+ }
1187+ }
1188+
1189+ // WithPageSize sets page size (clamped to [1, 100]; default 20).
1190+ func WithPageSize (size int ) UserQueryOption {
1191+ return func (p * userQueryParams ) {
1192+ if size <= 0 {
1193+ return
1194+ }
1195+ if size > 100 {
1196+ size = 100
1197+ }
1198+ p .pageSize = size
1199+ }
1200+ }
1201+
1202+ // WithOrder sets sort order (0 asc, 1 desc; invalid values fallback to asc).
1203+ func WithOrder (order UserQueryOrder ) UserQueryOption {
1204+ return func (p * userQueryParams ) {
1205+ if order != UserQueryOrderAsc && order != UserQueryOrderDesc {
1206+ order = UserQueryOrderAsc
1207+ }
1208+ p .order = order
1209+ }
1210+ }
1211+
1212+ // UserQuery queries users with functional options.
1213+ // Defaults: page=1, pageSize=20, order=asc.
1214+ func (rc * RongCloud ) UserQuery (opts ... UserQueryOption ) (UserQueryResponse , error ) {
1215+ params := userQueryParams {
1216+ page : 1 ,
1217+ pageSize : 20 ,
1218+ order : UserQueryOrderAsc ,
1219+ }
1220+ for _ , opt := range opts {
1221+ opt (& params )
1222+ }
1223+
1224+ req := httplib .Post (rc .rongCloudURI + "/user/query.json" )
1225+ req .SetTimeout (time .Second * rc .timeout , time .Second * rc .timeout )
1226+ rc .fillHeader (req )
1227+ req .Param ("page" , strconv .Itoa (params .page ))
1228+ req .Param ("pageSize" , strconv .Itoa (params .pageSize ))
1229+ req .Param ("order" , strconv .Itoa (int (params .order )))
1230+
1231+ res , err := rc .do (req )
1232+ var result = UserQueryResponse {}
1233+ if err != nil {
1234+ return result , err
1235+ }
1236+ if err := json .Unmarshal (res , & result ); err != nil {
1237+ return result , err
1238+ }
1239+ return result , nil
1240+ }
1241+
1242+ // UserDelUsers deletes users (up to 100 per request).
1243+ // @param userIds User IDs to delete, length 1-100
1244+ // @return error
1245+ func (rc * RongCloud ) UserDelUsers (userIds []string ) error {
1246+ if len (userIds ) == 0 {
1247+ return RCErrorNew (1002 , "Paramer 'userIds' is required" )
1248+ }
1249+ if len (userIds ) > 100 {
1250+ return RCErrorNew (1002 , "Length of paramer 'userIds' must be less than or equal to 100" )
1251+ }
1252+
1253+ req := httplib .Post (rc .rongCloudURI + "/user/delusers.json" )
1254+ req .SetTimeout (time .Second * rc .timeout , time .Second * rc .timeout )
1255+ rc .fillHeader (req )
1256+ for _ , id := range userIds {
1257+ req .Param ("userId" , id )
1258+ }
1259+ _ , err := rc .do (req )
1260+ if err != nil {
1261+ rc .urlError (err )
1262+ }
1263+ return err
1264+ }
0 commit comments