package mail import ( "dove/database" "dove/models/mail" "dove/utils/meta" "gorm.io/gorm" ) func FindUserByID(userID uint) *mail.User { var user mail.User result := database.DB.First(&user, userID) if result.Error == gorm.ErrRecordNotFound { return nil } return &user } func FindUserByUsername(username string) *mail.User { var user mail.User result := database.DB.Where("username = ?", username).First(&user) if result.Error == gorm.ErrRecordNotFound { return nil } return &user } func CreateUser(user *mail.User) error { return database.DB.Create(user).Error } func ListUsers(pagination meta.Pagination, sorting meta.Sorting, search string) ([]mail.User, int64) { var users []mail.User var total int64 query := database.DB.Model(&mail.User{}) if search != "" { like := "%" + search + "%" query = query.Where("username LIKE ? OR display_name LIKE ?", like, like) } query.Count(&total) pagination.Apply(sorting.Apply(query)).Preload("Mailboxes").Find(&users) return users, total } func AllUsers() []mail.User { var users []mail.User database.DB.Order("username ASC").Find(&users) return users } func UpdateUser(user *mail.User) error { return database.DB.Save(user).Error } func DeleteUser(user *mail.User) error { return database.DB.Delete(user).Error } func CountMailboxesByUserID(userID uint) int64 { var count int64 database.DB.Model(&mail.Mailbox{}).Where("user_id = ?", userID).Count(&count) return count } func CountUsers() int64 { var count int64 database.DB.Model(&mail.User{}).Count(&count) return count }