55 "fmt"
66 "github.com/answerdev/answer/internal/base/constant"
77 "github.com/answerdev/answer/internal/base/handler"
8+ "github.com/answerdev/answer/internal/base/translator"
89 "github.com/answerdev/answer/internal/base/validator"
910 "github.com/answerdev/answer/internal/service/export"
1011 "github.com/google/uuid"
@@ -169,40 +170,44 @@ func (us *UserAdminService) AddUser(ctx context.Context, req *schema.AddUserReq)
169170}
170171
171172// AddUsers add users
172- func (us * UserAdminService ) AddUsers (ctx context.Context , req * schema.AddUsersReq ) (err error ) {
173- err = req .ParseUsers (ctx )
173+ func (us * UserAdminService ) AddUsers (ctx context.Context , req * schema.AddUsersReq ) (
174+ resp []* validator.FormErrorField , err error ) {
175+ resp , err = req .ParseUsers (ctx )
174176 if err != nil {
175- return errors . BadRequest ( reason . RequestFormatError ). WithMsg ( err . Error ())
177+ return resp , err
176178 }
177- if len (req .Users ) == 0 {
178- return errors .BadRequest (reason .RequestFormatError ).WithMsg ("not found any user" )
179- }
180- if len (req .Users ) > 5000 {
181- return errors .BadRequest (reason .RequestFormatError ).WithMsg ("Add up to 5000 users at one time" )
182- }
183- users , err := us .formatBulkAddUsers (ctx , req )
179+
180+ users , resp , err := us .formatBulkAddUsers (ctx , req )
184181 if err != nil {
185- return err
182+ return resp , err
186183 }
187- return us .userRepo .AddUsers (ctx , users )
184+ err = us .userRepo .AddUsers (ctx , users )
185+ return nil , err
188186}
189187
190188func (us * UserAdminService ) formatBulkAddUsers (ctx context.Context , req * schema.AddUsersReq ) (
191- users []* entity.User , err error ) {
192-
193- val := validator .GetValidatorByLang (handler .GetLangByCtx (ctx ))
194- for _ , user := range req .Users {
195- _ , err = val .Check (user )
196- if err != nil {
197- return nil , err
189+ users []* entity.User , errFields []* validator.FormErrorField , err error ) {
190+ lang := handler .GetLangByCtx (ctx )
191+ val := validator .GetValidatorByLang (lang )
192+ errorData := & schema.AddUsersErrorData {Line : - 1 }
193+ for line , user := range req .Users {
194+ if fields , e := val .Check (user ); e != nil {
195+ errorData .SetErrField (fields )
196+ errorData .Line = line + 1
197+ errorData .Content = fmt .Sprintf ("%s, %s" , user .DisplayName , user .Email )
198+ break
198199 }
199200
200- _ , has , err := us .userRepo .GetUserInfoByEmail (ctx , user .Email )
201- if err != nil {
202- return nil , err
201+ _ , has , e := us .userRepo .GetUserInfoByEmail (ctx , user .Email )
202+ if e != nil {
203+ return nil , nil , e
203204 }
204205 if has {
205- return nil , errors .BadRequest (reason .EmailDuplicate )
206+ errorData .Field = "email"
207+ errorData .Line = line + 1
208+ errorData .Content = user .Email
209+ errorData .ExtraMessage = translator .Tr (lang , reason .EmailDuplicate )
210+ break
206211 }
207212
208213 userInfo := & entity.User {}
@@ -212,14 +217,26 @@ func (us *UserAdminService) formatBulkAddUsers(ctx context.Context, req *schema.
212217 userInfo .Pass = string (hashPwd )
213218 userInfo .Username , err = us .userCommonService .MakeUsername (ctx , userInfo .DisplayName )
214219 if err != nil {
215- return nil , err
220+ errorData .Field = "display_name"
221+ errorData .Line = line + 1
222+ errorData .Content = user .DisplayName
223+ errorData .ExtraMessage = translator .Tr (lang , reason .UsernameInvalid )
224+ break
216225 }
217226 userInfo .MailStatus = entity .EmailStatusAvailable
218227 userInfo .Status = entity .UserStatusAvailable
219228 userInfo .Rank = 1
220229 users = append (users , userInfo )
221230 }
222- return users , nil
231+
232+ if errorData .Line != - 1 {
233+ errFields = append ([]* validator.FormErrorField {}, & validator.FormErrorField {
234+ ErrorField : "users" ,
235+ ErrorMsg : translator .TrWithData (handler .GetLangByCtx (ctx ), reason .AddBulkUsersFormatError , errorData ),
236+ })
237+ return nil , errFields , errors .BadRequest (reason .RequestFormatError )
238+ }
239+ return users , nil , nil
223240}
224241
225242// UpdateUserPassword update user password
0 commit comments