diff options
Diffstat (limited to 'services/mail/mailboxes.go')
| -rw-r--r-- | services/mail/mailboxes.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/services/mail/mailboxes.go b/services/mail/mailboxes.go index 041c64b..811e6bc 100644 --- a/services/mail/mailboxes.go +++ b/services/mail/mailboxes.go @@ -18,11 +18,22 @@ type CreateMailboxRequest struct { UserID uint `form:"user_id"` } +type UpdateMailboxRequest struct { + UserID uint `form:"user_id"` +} + type MailboxFormResponse struct { Users []mailModel.User `json:"users"` Domains []domainModel.Domain `json:"domains"` } +type EditMailboxFormResponse struct { + Mailbox mailModel.Mailbox `json:"mailbox"` + Users []mailModel.User `json:"users"` + Aliases []mailModel.Alias `json:"aliases"` + Domains []domainModel.Domain `json:"domains"` +} + type MailboxView struct { Address string } @@ -80,3 +91,53 @@ func CreateMailbox(request CreateMailboxRequest) *shortcuts.Error { return nil } + +func EditMailboxFormData(mailboxID uint) (*EditMailboxFormResponse, *shortcuts.Error) { + mailbox := mailRepo.FindMailboxByIDWithRelations(mailboxID) + if mailbox == nil { + return nil, shortcuts.ServiceError(shortcuts.NotFound, MailboxNotFound) + } + + return &EditMailboxFormResponse{ + Mailbox: *mailbox, + Users: mailRepo.AllUsers(), + Aliases: mailRepo.FindAliasesByMailboxID(mailboxID), + Domains: domainRepo.AllDomains(), + }, nil +} + +func UpdateMailbox(mailboxID uint, request UpdateMailboxRequest) *shortcuts.Error { + mailbox := mailRepo.FindMailboxByID(mailboxID) + if mailbox == nil { + return shortcuts.ServiceError(shortcuts.NotFound, MailboxNotFound) + } + + if request.UserID == 0 { + return shortcuts.ServiceError(shortcuts.BadRequest, UserRequired) + } + + if mailRepo.FindUserByID(request.UserID) == nil { + return shortcuts.ServiceError(shortcuts.Unprocessable, UserNotFound) + } + + mailbox.UserID = request.UserID + + if updateError := mailRepo.UpdateMailbox(mailbox); updateError != nil { + return shortcuts.ServiceError(shortcuts.Internal, MailboxUpdateFailed) + } + + return nil +} + +func DeleteMailbox(mailboxID uint) *shortcuts.Error { + mailbox := mailRepo.FindMailboxByID(mailboxID) + if mailbox == nil { + return shortcuts.ServiceError(shortcuts.NotFound, MailboxNotFound) + } + + if deleteError := mailRepo.DeleteMailbox(mailbox); deleteError != nil { + return shortcuts.ServiceError(shortcuts.Internal, DeletionFailed) + } + + return nil +} |
