aboutsummaryrefslogtreecommitdiff
path: root/services/mailbox.go
diff options
context:
space:
mode:
Diffstat (limited to 'services/mailbox.go')
-rw-r--r--services/mailbox.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/services/mailbox.go b/services/mailbox.go
index b84e19b..d1e954d 100644
--- a/services/mailbox.go
+++ b/services/mailbox.go
@@ -1,10 +1,15 @@
package services
import (
+ "strings"
+
+ "dove/enums"
+ "dove/messages"
"dove/models"
"dove/repositories"
"dove/types"
"dove/utils/meta"
+ "dove/utils/shortcuts"
)
func ListMailboxes(pagination meta.Pagination, sorting meta.Sorting, search string) types.PaginatedResponse {
@@ -12,6 +17,43 @@ func ListMailboxes(pagination meta.Pagination, sorting meta.Sorting, search stri
return pagination.Response(mailboxes, total)
}
+func MailboxFormData() types.MailboxFormResponse {
+ return types.MailboxFormResponse{
+ Users: repositories.AllUsers(),
+ }
+}
+
+func CreateMailbox(request types.CreateMailboxRequest) *types.ServiceError {
+ address := strings.TrimSpace(request.Address)
+
+ if address == "" {
+ return shortcuts.ServiceError(enums.BadRequest, messages.MailboxAddressRequired)
+ }
+
+ if request.UserID == 0 {
+ return shortcuts.ServiceError(enums.BadRequest, messages.MailboxUserRequired)
+ }
+
+ if repositories.FindUserByID(request.UserID) == nil {
+ return shortcuts.ServiceError(enums.Unprocessable, messages.MailboxUserNotFound)
+ }
+
+ if repositories.FindMailboxByAddress(address) != nil {
+ return shortcuts.ServiceError(enums.Unprocessable, messages.MailboxAlreadyExists)
+ }
+
+ mailbox := &models.Mailbox{
+ Address: address,
+ UserID: request.UserID,
+ }
+
+ if createError := repositories.CreateMailbox(mailbox); createError != nil {
+ return shortcuts.ServiceError(enums.Internal, messages.MailboxCreationFailed)
+ }
+
+ return nil
+}
+
func ResolveMailboxes(recipientAddresses []string) []models.Mailbox {
var resolvedMailboxes []models.Mailbox