package mail import ( "strings" mailModel "dove/models/mail" mailRepo "dove/repositories/mail" "dove/utils/meta" "dove/utils/shortcuts" ) type CreateUserRequest struct { Username string `form:"username"` 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) } func CreateUser(request CreateUserRequest) *shortcuts.Error { username := strings.TrimSpace(request.Username) displayName := strings.TrimSpace(request.DisplayName) if username == "" { return shortcuts.ServiceError(shortcuts.BadRequest, UsernameRequired) } if displayName == "" { return shortcuts.ServiceError(shortcuts.BadRequest, DisplayNameRequired) } if mailRepo.FindUserByUsername(username) != nil { return shortcuts.ServiceError(shortcuts.Unprocessable, UserAlreadyExists) } newUser := &mailModel.User{ Username: username, DisplayName: displayName, } if createError := mailRepo.CreateUser(newUser); createError != nil { return shortcuts.ServiceError(shortcuts.Internal, UserCreationFailed) } 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() }