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.go61
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
+}