aboutsummaryrefslogtreecommitdiff
path: root/internal/route/api/v1/user
diff options
context:
space:
mode:
authorJoe Chen <jc@unknwon.io>2023-05-14 20:15:47 -0400
committerGitHub <noreply@github.com>2023-05-14 20:15:47 -0400
commit0721ef2399c7c0e7f01ee96530b99f883434c623 (patch)
tree8ddb3e5002ab0b7402a6339c7781d91caebd96e7 /internal/route/api/v1/user
parent9ac93067f640ca228ff218de1686ff61e8747d05 (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.go60
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()
}