diff options
Diffstat (limited to 'services/mailbox.go')
| -rw-r--r-- | services/mailbox.go | 42 |
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 |
