add users
This commit is contained in:
@@ -182,13 +182,13 @@ func (r *UserRepositoryImpl) ListWithFilters(ctx context.Context, search *string
|
||||
var users []*entities.User
|
||||
var total int64
|
||||
|
||||
q := r.b.WithContext(ctx).Table("users").Model(&entities.User{})
|
||||
q := r.b.WithContext(ctx).Model(&entities.User{})
|
||||
if search != nil && *search != "" {
|
||||
like := "%" + *search + "%"
|
||||
q = q.Where("users.name ILIKE ?", like)
|
||||
q = q.Where("name ILIKE ? OR email ILIKE ?", like, like)
|
||||
}
|
||||
if isActive != nil {
|
||||
q = q.Where("users.is_active = ?", *isActive)
|
||||
q = q.Where("is_active = ?", *isActive)
|
||||
}
|
||||
if roleCode != nil && *roleCode != "" {
|
||||
q = q.Joins("JOIN user_role ur ON ur.user_id = users.id AND ur.removed_at IS NULL").
|
||||
@@ -196,12 +196,40 @@ func (r *UserRepositoryImpl) ListWithFilters(ctx context.Context, search *string
|
||||
Where("r.code = ?", *roleCode)
|
||||
}
|
||||
|
||||
if err := q.Distinct("users.id").Count(&total).Error; err != nil {
|
||||
if err := q.Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if err := q.Select("users.*").Distinct("users.id").Limit(limit).Offset(offset).Preload("Profile").Preload("Departments").Find(&users).Error; err != nil {
|
||||
if err := q.Limit(limit).Offset(offset).Preload("Profile").Preload("Departments").Find(&users).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return users, total, nil
|
||||
}
|
||||
|
||||
// BulkCreate creates multiple users in a single database transaction
|
||||
func (r *UserRepositoryImpl) BulkCreate(ctx context.Context, users []*entities.User) error {
|
||||
if len(users) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return r.b.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
|
||||
// Create all users in a single batch
|
||||
if err := tx.Create(&users).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// CreateInBatches creates users in smaller batches to avoid memory issues
|
||||
func (r *UserRepositoryImpl) CreateInBatches(ctx context.Context, users []*entities.User, batchSize int) error {
|
||||
if len(users) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if batchSize <= 0 {
|
||||
batchSize = 100 // Default batch size
|
||||
}
|
||||
|
||||
return r.b.WithContext(ctx).CreateInBatches(users, batchSize).Error
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user