diff options
author | Joe Chen <jc@unknwon.io> | 2023-05-14 20:15:47 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-14 20:15:47 -0400 |
commit | 0721ef2399c7c0e7f01ee96530b99f883434c623 (patch) | |
tree | 8ddb3e5002ab0b7402a6339c7781d91caebd96e7 /internal/route/api/v1/user | |
parent | 9ac93067f640ca228ff218de1686ff61e8747d05 (diff) |
refactor(db): migrate off `user_email.go` to `users.go` (#7452)
Diffstat (limited to 'internal/route/api/v1/user')
-rw-r--r-- | internal/route/api/v1/user/email.go | 60 |
1 files changed, 26 insertions, 34 deletions
diff --git a/internal/route/api/v1/user/email.go b/internal/route/api/v1/user/email.go index cda2a0a4..b85d424a 100644 --- a/internal/route/api/v1/user/email.go +++ b/internal/route/api/v1/user/email.go @@ -17,7 +17,7 @@ import ( ) func ListEmails(c *context.APIContext) { - emails, err := db.GetEmailAddresses(c.User.ID) + emails, err := db.Users.ListEmails(c.Req.Context(), c.User.ID) if err != nil { c.Error(err, "get email addresses") return @@ -35,48 +35,40 @@ func AddEmail(c *context.APIContext, form api.CreateEmailOption) { return } - emails := make([]*db.EmailAddress, len(form.Emails)) - for i := range form.Emails { - emails[i] = &db.EmailAddress{ - UserID: c.User.ID, - Email: form.Emails[i], - IsActivated: !conf.Auth.RequireEmailConfirmation, + apiEmails := make([]*api.Email, 0, len(form.Emails)) + for _, email := range form.Emails { + err := db.Users.AddEmail(c.Req.Context(), c.User.ID, email, !conf.Auth.RequireEmailConfirmation) + if err != nil { + if db.IsErrEmailAlreadyUsed(err) { + c.ErrorStatus(http.StatusUnprocessableEntity, errors.Errorf("email address has been used: %s", err.(db.ErrEmailAlreadyUsed).Email())) + } else { + c.Error(err, "add email addresses") + } + return } - } - - if err := db.AddEmailAddresses(emails); err != nil { - if db.IsErrEmailAlreadyUsed(err) { - c.ErrorStatus(http.StatusUnprocessableEntity, errors.New("email address has been used: "+err.(db.ErrEmailAlreadyUsed).Email())) - } else { - c.Error(err, "add email addresses") - } - return - } - apiEmails := make([]*api.Email, len(emails)) - for i := range emails { - apiEmails[i] = convert.ToEmail(emails[i]) + apiEmails = append(apiEmails, + &api.Email{ + Email: email, + Verified: !conf.Auth.RequireEmailConfirmation, + }, + ) } c.JSON(http.StatusCreated, &apiEmails) } func DeleteEmail(c *context.APIContext, form api.CreateEmailOption) { - if len(form.Emails) == 0 { - c.NoContent() - return - } - - emails := make([]*db.EmailAddress, len(form.Emails)) - for i := range form.Emails { - emails[i] = &db.EmailAddress{ - UserID: c.User.ID, - Email: form.Emails[i], + for _, email := range form.Emails { + if email == c.User.Email { + c.ErrorStatus(http.StatusBadRequest, errors.Errorf("cannot delete primary email %q", email)) + return } - } - if err := db.DeleteEmailAddresses(emails); err != nil { - c.Error(err, "delete email addresses") - return + err := db.Users.DeleteEmail(c.Req.Context(), c.User.ID, email) + if err != nil { + c.Error(err, "delete email addresses") + return + } } c.NoContent() } |