package repositories import ( "GoMembership/internal/database" "gorm.io/gorm" "GoMembership/internal/models" ) type SubscriptionsRepositoryInterface interface { CreateSubscription(subscription *models.Subscription) (uint, error) UpdateSubscription(subscription *models.Subscription) (*models.Subscription, error) GetSubscriptionNames() ([]string, error) GetSubscriptions(where map[string]interface{}) (*[]models.Subscription, error) // GetUsersBySubscription(id uint) (*[]models.Subscription, error) DeleteSubscription(id *uint) error } type SubscriptionsRepository struct{} func (sr *SubscriptionsRepository) CreateSubscription(subscription *models.Subscription) (uint, error) { result := database.DB.Create(subscription) if result.Error != nil { return 0, result.Error } return subscription.ID, nil } func (sr *SubscriptionsRepository) UpdateSubscription(subscription *models.Subscription) (*models.Subscription, error) { result := database.DB.Model(&models.Subscription{ID: subscription.ID}).Updates(subscription) if result.Error != nil { return nil, result.Error } return subscription, nil } func (sr *SubscriptionsRepository) DeleteSubscription(id *uint) error { result := database.DB.Delete(&models.Subscription{}, id) if result.Error != nil { return result.Error } return nil } func GetSubscriptionByName(modelname *string) (*models.Subscription, error) { var model models.Subscription result := database.DB.Where("name = ?", modelname).First(&model) if result.Error != nil { return nil, result.Error } return &model, nil } func (sr *SubscriptionsRepository) GetSubscriptionNames() ([]string, error) { var names []string if err := database.DB.Model(&models.Subscription{}).Pluck("name", &names).Error; err != nil { return []string{}, err } return names, nil } func (sr *SubscriptionsRepository) GetSubscriptions(where map[string]interface{}) (*[]models.Subscription, error) { var subscriptions []models.Subscription result := database.DB.Where(where).Find(&subscriptions) if result.Error != nil { if result.Error == gorm.ErrRecordNotFound { return nil, gorm.ErrRecordNotFound } return nil, result.Error } return &subscriptions, nil } func GetUsersBySubscription(subscriptionID uint) (*[]models.User, error) { var users []models.User err := database.DB.Preload("Membership"). Preload("Membership.Subscription"). Preload("BankAccount"). Preload("Licence"). Preload("Licence.Categories"). Joins("JOIN memberships ON users.id = memberships.user_id"). Joins("JOIN subscriptions ON memberships.subscription_id = subscriptions.id"). Where("subscriptions.id = ?", subscriptionID). Find(&users).Error if err != nil { return nil, err } return &users, nil }