aboutsummaryrefslogtreecommitdiff
path: root/services/mail/mailboxes.go
diff options
context:
space:
mode:
Diffstat (limited to 'services/mail/mailboxes.go')
-rw-r--r--services/mail/mailboxes.go36
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 {