diff options
Diffstat (limited to 'services/mail/users.go')
| -rw-r--r-- | services/mail/users.go | 56 |
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 |
