@@ -176,45 +176,65 @@ func (us *UserAdminService) AddUsers(ctx context.Context, req *schema.AddUsersRe
176176 if err != nil {
177177 return resp , err
178178 }
179-
180- users , resp , err := us .formatBulkAddUsers (ctx , req )
179+ errData := us .checkUserDuplicateInner (ctx , req .Users )
180+ if errData != nil {
181+ return errData .GetErrField (ctx ), errors .BadRequest (reason .RequestFormatError )
182+ }
183+ users , errData , err := us .formatBulkAddUsers (ctx , req )
181184 if err != nil {
182185 return resp , err
183186 }
184- err = us .userRepo .AddUsers (ctx , users )
185- return nil , err
187+ if errData != nil {
188+ return errData .GetErrField (ctx ), errors .BadRequest (reason .RequestFormatError )
189+ }
190+ return nil , us .userRepo .AddUsers (ctx , users )
186191}
187192
188- func (us * UserAdminService ) formatBulkAddUsers (ctx context.Context , req * schema.AddUsersReq ) (
189- users [] * entity. User , errFields [] * validator. FormErrorField , err error ) {
193+ func (us * UserAdminService ) checkUserDuplicateInner (ctx context.Context , users [] * schema.AddUserReq ) (
194+ errorData * schema. AddUsersErrorData ) {
190195 lang := handler .GetLangByCtx (ctx )
191196 val := validator .GetValidatorByLang (lang )
192- errorData := & schema.AddUsersErrorData {Line : - 1 }
193- existEmails := make (map [string ]bool )
194- existDisplayNames := make (map [string ]bool )
195- for line , user := range req .Users {
196- if existEmails [user .Email ] {
197- errorData .Field = "email"
198- errorData .Line = line + 1
199- errorData .Content = user .Email
200- errorData .ExtraMessage = translator .Tr (lang , reason .EmailDuplicate )
201- break
202- }
203- if existDisplayNames [user .DisplayName ] {
204- errorData .Field = "name"
205- errorData .Line = line + 1
206- errorData .Content = user .DisplayName
207- errorData .ExtraMessage = translator .Tr (lang , reason .UsernameDuplicate )
208- break
209- }
210197
211- if fields , e := val .Check (user ); e != nil {
212- errorData .SetErrField (fields )
198+ emails := make (map [string ]bool )
199+ displayNames := make (map [string ]bool )
200+ for line , user := range users {
201+ if errFields , e := val .Check (user ); e != nil {
202+ errorData = & schema.AddUsersErrorData {}
203+ if len (errFields ) > 0 {
204+ errorData .Field = errFields [0 ].ErrorField
205+ errorData .ExtraMessage = errFields [0 ].ErrorMsg
206+ }
213207 errorData .Line = line + 1
214208 errorData .Content = fmt .Sprintf ("%s, %s, %s" , user .DisplayName , user .Email , user .Password )
215- break
209+ return errorData
210+ }
211+ if emails [user .Email ] {
212+ return & schema.AddUsersErrorData {
213+ Field : "email" ,
214+ Line : line + 1 ,
215+ Content : user .Email ,
216+ ExtraMessage : translator .Tr (lang , reason .EmailDuplicate ),
217+ }
216218 }
219+ if displayNames [user .DisplayName ] {
220+ return & schema.AddUsersErrorData {
221+ Field : "name" ,
222+ Line : line + 1 ,
223+ Content : user .DisplayName ,
224+ ExtraMessage : translator .Tr (lang , reason .UsernameDuplicate ),
225+ }
226+ }
227+ emails [user .Email ] = true
228+ displayNames [user .DisplayName ] = true
229+ }
230+ return nil
231+ }
217232
233+ func (us * UserAdminService ) formatBulkAddUsers (ctx context.Context , req * schema.AddUsersReq ) (
234+ users []* entity.User , errorData * schema.AddUsersErrorData , err error ) {
235+ lang := handler .GetLangByCtx (ctx )
236+ errorData = & schema.AddUsersErrorData {Line : - 1 }
237+ for line , user := range req .Users {
218238 _ , has , e := us .userRepo .GetUserInfoByEmail (ctx , user .Email )
219239 if e != nil {
220240 return nil , nil , e
@@ -224,7 +244,7 @@ func (us *UserAdminService) formatBulkAddUsers(ctx context.Context, req *schema.
224244 errorData .Line = line + 1
225245 errorData .Content = user .Email
226246 errorData .ExtraMessage = translator .Tr (lang , reason .EmailDuplicate )
227- break
247+ return nil , errorData , nil
228248 }
229249
230250 userInfo := & entity.User {}
@@ -238,22 +258,12 @@ func (us *UserAdminService) formatBulkAddUsers(ctx context.Context, req *schema.
238258 errorData .Line = line + 1
239259 errorData .Content = user .DisplayName
240260 errorData .ExtraMessage = translator .Tr (lang , reason .UsernameInvalid )
241- break
261+ return nil , errorData , nil
242262 }
243263 userInfo .MailStatus = entity .EmailStatusAvailable
244264 userInfo .Status = entity .UserStatusAvailable
245265 userInfo .Rank = 1
246266 users = append (users , userInfo )
247- existEmails [user .Email ] = true
248- existDisplayNames [user .DisplayName ] = true
249- }
250-
251- if errorData .Line != - 1 {
252- errFields = append ([]* validator.FormErrorField {}, & validator.FormErrorField {
253- ErrorField : "users" ,
254- ErrorMsg : translator .TrWithData (handler .GetLangByCtx (ctx ), reason .AddBulkUsersFormatError , errorData ),
255- })
256- return nil , errFields , errors .BadRequest (reason .RequestFormatError )
257267 }
258268 return users , nil , nil
259269}
0 commit comments