aboutsummaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-07 19:11:59 +0530
committerBobby <[email protected]>2026-03-07 19:11:59 +0530
commit547384c41181c034a5eaf340c5e569d36eb013be (patch)
tree345341ac0df478fe51d11eeb6c45f2265afd7619 /services
parent96c136f046d78c51210927e61483a36a220fedcb (diff)
downloaddove-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.go42
-rw-r--r--services/user.go38
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()
+}