aboutsummaryrefslogtreecommitdiff
path: root/services/mail/users.go
diff options
context:
space:
mode:
Diffstat (limited to 'services/mail/users.go')
-rw-r--r--services/mail/users.go56
1 files changed, 55 insertions, 1 deletions
diff --git a/services/mail/users.go b/services/mail/users.go
index 9c776a1..025c411 100644
--- a/services/mail/users.go
+++ b/services/mail/users.go
@@ -14,6 +14,14 @@ type CreateUserRequest struct {
DisplayName string `form:"display_name"`
}
+type UpdateUserRequest struct {
+ DisplayName string `form:"display_name"`
+}
+
+type EditUserFormResponse struct {
+ User mailModel.User `json:"user"`
+}
+
func ListUsers(pagination meta.Pagination, sorting meta.Sorting, search string) meta.PaginatedResponse {
users, total := mailRepo.ListUsers(pagination, sorting, search)
return pagination.Response(users, total)
@@ -47,6 +55,52 @@ func CreateUser(request CreateUserRequest) *shortcuts.Error {
return nil
}
+func EditUserFormData(userID uint) (*EditUserFormResponse, *shortcuts.Error) {
+ user := mailRepo.FindUserByID(userID)
+ if user == nil {
+ return nil, shortcuts.ServiceError(shortcuts.NotFound, UserNotFound)
+ }
+
+ return &EditUserFormResponse{User: *user}, nil
+}
+
+func UpdateUser(userID uint, request UpdateUserRequest) *shortcuts.Error {
+ user := mailRepo.FindUserByID(userID)
+ if user == nil {
+ return shortcuts.ServiceError(shortcuts.NotFound, UserNotFound)
+ }
+
+ displayName := strings.TrimSpace(request.DisplayName)
+ if displayName == "" {
+ return shortcuts.ServiceError(shortcuts.BadRequest, DisplayNameRequired)
+ }
+
+ user.DisplayName = displayName
+
+ if updateError := mailRepo.UpdateUser(user); updateError != nil {
+ return shortcuts.ServiceError(shortcuts.Internal, UserUpdateFailed)
+ }
+
+ return nil
+}
+
+func DeleteUser(userID uint) *shortcuts.Error {
+ user := mailRepo.FindUserByID(userID)
+ if user == nil {
+ return shortcuts.ServiceError(shortcuts.NotFound, UserNotFound)
+ }
+
+ if mailRepo.CountMailboxesByUserID(user.ID) > 0 {
+ return shortcuts.ServiceError(shortcuts.Unprocessable, UserHasMailboxes)
+ }
+
+ if deleteError := mailRepo.DeleteUser(user); deleteError != nil {
+ return shortcuts.ServiceError(shortcuts.Internal, UserDeletionFailed)
+ }
+
+ return nil
+}
+
func AllUsers() []mailModel.User {
return mailRepo.AllUsers()
-}
+} \ No newline at end of file