diff options
| author | Bobby <[email protected]> | 2026-03-07 19:11:59 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-03-07 19:11:59 +0530 |
| commit | 547384c41181c034a5eaf340c5e569d36eb013be (patch) | |
| tree | 345341ac0df478fe51d11eeb6c45f2265afd7619 /services | |
| parent | 96c136f046d78c51210927e61483a36a220fedcb (diff) | |
| download | dove-547384c41181c034a5eaf340c5e569d36eb013be.tar.xz dove-547384c41181c034a5eaf340c5e569d36eb013be.zip | |
feat: implement mailbox and user creation features with validation and dropdowns
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() +} |
