package repository import ( "baron-sso-backend/internal/domain" "context" "gorm.io/gorm" ) type UserGroupRepository interface { Create(ctx context.Context, group *domain.UserGroup) error Update(ctx context.Context, group *domain.UserGroup) error Delete(ctx context.Context, id string) error FindByID(ctx context.Context, id string) (*domain.UserGroup, error) ListByTenantID(ctx context.Context, tenantID string) ([]domain.UserGroup, error) } type userGroupRepository struct { db *gorm.DB } func NewUserGroupRepository(db *gorm.DB) UserGroupRepository { return &userGroupRepository{db: db} } func (r *userGroupRepository) Create(ctx context.Context, group *domain.UserGroup) error { return r.db.WithContext(ctx).Create(group).Error } func (r *userGroupRepository) Update(ctx context.Context, group *domain.UserGroup) error { return r.db.WithContext(ctx).Save(group).Error } func (r *userGroupRepository) Delete(ctx context.Context, id string) error { return r.db.WithContext(ctx).Delete(&domain.UserGroup{}, "id = ?", id).Error } func (r *userGroupRepository) FindByID(ctx context.Context, id string) (*domain.UserGroup, error) { var group domain.UserGroup // Using Where to be more explicit and avoid issues with GORM's default primary key handling if ID is string/uuid if err := r.db.WithContext(ctx).Where("id = ?", id).First(&group).Error; err != nil { return nil, err } return &group, nil } func (r *userGroupRepository) ListByTenantID(ctx context.Context, tenantID string) ([]domain.UserGroup, error) { var groups []domain.UserGroup if err := r.db.WithContext(ctx).Where("tenant_id = ?", tenantID).Find(&groups).Error; err != nil { return nil, err } return groups, nil }