package repository import ( "baron-sso-backend/internal/domain" "errors" "gorm.io/gorm" ) // FederationRepository handles database operations for IdentityProviderConfig. type FederationRepository struct { DB *gorm.DB } // NewFederationRepository creates a new FederationRepository. func NewFederationRepository(db *gorm.DB) *FederationRepository { return &FederationRepository{DB: db} } // Create creates a new identity provider configuration. func (r *FederationRepository) Create(config *domain.IdentityProviderConfig) error { return r.DB.Create(config).Error } // GetByID retrieves an identity provider configuration by its ID. func (r *FederationRepository) GetByID(id string) (*domain.IdentityProviderConfig, error) { var config domain.IdentityProviderConfig if err := r.DB.First(&config, "id = ?", id).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil // Return nil, nil for not found } return nil, err } return &config, nil } // ListByTenantID retrieves all identity provider configurations for a given tenant. func (r *FederationRepository) ListByTenantID(tenantID string) ([]domain.IdentityProviderConfig, error) { var configs []domain.IdentityProviderConfig if err := r.DB.Where("tenant_id = ?", tenantID).Find(&configs).Error; err != nil { return nil, err } return configs, nil } // Update updates an existing identity provider configuration. func (r *FederationRepository) Update(config *domain.IdentityProviderConfig) error { return r.DB.Save(config).Error } // Delete removes an identity provider configuration by its ID. func (r *FederationRepository) Delete(id string) error { return r.DB.Delete(&domain.IdentityProviderConfig{}, "id = ?", id).Error }