diff options
Diffstat (limited to 'services/mail/mailboxes.go')
| -rw-r--r-- | services/mail/mailboxes.go | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/services/mail/mailboxes.go b/services/mail/mailboxes.go index 89af4c4..041c64b 100644 --- a/services/mail/mailboxes.go +++ b/services/mail/mailboxes.go @@ -3,19 +3,24 @@ package mail import ( "strings" + domainModel "dove/models/domain" + domainRepo "dove/repositories/domain" mailModel "dove/models/mail" mailRepo "dove/repositories/mail" "dove/utils/meta" "dove/utils/shortcuts" + "dove/utils/validate" ) type CreateMailboxRequest struct { - Address string `form:"address"` - UserID uint `form:"user_id"` + LocalPart string `form:"local_part"` + DomainID uint `form:"domain_id"` + UserID uint `form:"user_id"` } type MailboxFormResponse struct { - Users []mailModel.User `json:"users"` + Users []mailModel.User `json:"users"` + Domains []domainModel.Domain `json:"domains"` } type MailboxView struct { @@ -29,16 +34,21 @@ func ListMailboxes(pagination meta.Pagination, sorting meta.Sorting, search stri func MailboxFormData() MailboxFormResponse { return MailboxFormResponse{ - Users: mailRepo.AllUsers(), + Users: mailRepo.AllUsers(), + Domains: domainRepo.AllDomains(), } } func CreateMailbox(request CreateMailboxRequest) *shortcuts.Error { - address := strings.TrimSpace(request.Address) + localPart := strings.TrimSpace(request.LocalPart) switch { - case address == "": - return shortcuts.ServiceError(shortcuts.BadRequest, AddressRequired) + case localPart == "": + return shortcuts.ServiceError(shortcuts.BadRequest, LocalPartRequired) + case !validate.EmailLocalPart(localPart): + return shortcuts.ServiceError(shortcuts.BadRequest, LocalPartInvalid) + case request.DomainID == 0: + return shortcuts.ServiceError(shortcuts.BadRequest, DomainRequired) case request.UserID == 0: return shortcuts.ServiceError(shortcuts.BadRequest, UserRequired) } @@ -47,13 +57,21 @@ func CreateMailbox(request CreateMailboxRequest) *shortcuts.Error { return shortcuts.ServiceError(shortcuts.Unprocessable, UserNotFound) } + foundDomain := domainRepo.FindDomainByID(request.DomainID) + if foundDomain == nil { + return shortcuts.ServiceError(shortcuts.Unprocessable, DomainNotFound) + } + + address := localPart + "@" + foundDomain.Name + "." + foundDomain.TLD.Name + if mailRepo.FindMailboxByAddress(address) != nil { return shortcuts.ServiceError(shortcuts.Unprocessable, AlreadyExists) } mailbox := &mailModel.Mailbox{ - Address: address, - UserID: request.UserID, + Address: address, + UserID: request.UserID, + DomainID: request.DomainID, } if createError := mailRepo.CreateMailbox(mailbox); createError != nil { |
