package sql import ( "context" "errors" "tercul/internal/domain" "tercul/internal/platform/config" "gorm.io/gorm" ) type countryRepository struct { *BaseRepositoryImpl[domain.Country] db *gorm.DB } // NewCountryRepository creates a new CountryRepository. func NewCountryRepository(db *gorm.DB, cfg *config.Config) domain.CountryRepository { return &countryRepository{ BaseRepositoryImpl: NewBaseRepositoryImpl[domain.Country](db, cfg), db: db, } } // GetByCode finds a country by code func (r *countryRepository) GetByCode(ctx context.Context, code string) (*domain.Country, error) { var country domain.Country if err := r.db.WithContext(ctx).Where("code = ?", code).First(&country).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, domain.ErrEntityNotFound } return nil, err } return &country, nil } // ListByContinent finds countries by continent func (r *countryRepository) ListByContinent(ctx context.Context, continent string) ([]domain.Country, error) { var countries []domain.Country if err := r.db.WithContext(ctx).Where("continent = ?", continent).Find(&countries).Error; err != nil { return nil, err } return countries, nil }