diff options
Diffstat (limited to 'services')
| -rw-r--r-- | services/mailbox.go | 42 | ||||
| -rw-r--r-- | services/user.go | 38 |
2 files changed, 80 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 diff --git a/services/user.go b/services/user.go index 392aaa1..b2d43cf 100644 --- a/services/user.go +++ b/services/user.go @@ -1,12 +1,50 @@ package services import ( + "strings" + + "dove/enums" + "dove/messages" + "dove/models" "dove/repositories" "dove/types" "dove/utils/meta" + "dove/utils/shortcuts" ) func ListUsers(pagination meta.Pagination, sorting meta.Sorting, search string) types.PaginatedResponse { users, total := repositories.ListUsers(pagination, sorting, search) return pagination.Response(users, total) } + +func CreateUser(request types.CreateUserRequest) *types.ServiceError { + username := strings.TrimSpace(request.Username) + displayName := strings.TrimSpace(request.DisplayName) + + if username == "" { + return shortcuts.ServiceError(enums.BadRequest, messages.UserUsernameRequired) + } + + if displayName == "" { + return shortcuts.ServiceError(enums.BadRequest, messages.UserDisplayNameRequired) + } + + if repositories.FindUserByUsername(username) != nil { + return shortcuts.ServiceError(enums.Unprocessable, messages.UserAlreadyExists) + } + + user := &models.User{ + Username: username, + DisplayName: displayName, + } + + if createError := repositories.CreateUser(user); createError != nil { + return shortcuts.ServiceError(enums.Internal, messages.UserCreationFailed) + } + + return nil +} + +func AllUsers() []models.User { + return repositories.AllUsers() +} |
