package service import ( "context" "fmt" "card-to-iban/internal/card" ) type ConversionResult struct { IBAN string UpstreamHTTPStatus int RawResponse []byte } type CardToIBANClient interface { Convert( ctx context.Context, cardNumber string, ) (ConversionResult, error) } type CardService struct { client CardToIBANClient } func NewCardService(client CardToIBANClient) *CardService { return &CardService{ client: client, } } func (s *CardService) ConvertCardToIBAN( ctx context.Context, cardNumber string, ) (ConversionResult, error) { if err := card.Validate(cardNumber); err != nil { return ConversionResult{}, err } result, err := s.client.Convert(ctx, cardNumber) if err != nil { return result, fmt.Errorf("convert card to iban: %w", err) } return result, nil }