add users

This commit is contained in:
Aditya Siregar
2025-08-15 22:17:01 +07:00
parent 826c5d26ad
commit e1a5e9efd3
13 changed files with 272 additions and 34 deletions
+33 -5
View File
@@ -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
}