Skip to content

Encapsualre BaseUri + bugfix stage intre mai multe instante #53

@andumy

Description

@andumy

Hello, am deschis un PR care abordeaza 2 probleme/optimizari:

Problema 1

Daca doresc sa creez o instanta de client stage, fie el autentificat sau nu, singura varianta este sa initializez eu manual un Client pornind de la Anaf::factory() eg:

Anaf::factory()
    ->staging()
    ->withBaseUri(...)
    ...
    ->make()  

Acum treaba asta pune responsabilitatea administrarii url-urilor pe cel care consuma library-ul. In mod normal ar trebui sa poti sa creezi o instanta de client/authClient atat in prod cat si in stage fara sa fie nevoie sa stii ce se intampla in spate.

Problema 2

Pentru ca verificarea fata de stage se face la nivel de Payload via Factory::isStaging(), care in spate foloseste un bool static, asta inseamna ca orice client nou o sa suprascrie stage-ul unui client vechi. *Edit: Problema nu e defapt ca se suprascrie, ci faptul ca $isStaging odata setat true nu se mai seteaza niciodata inapoi false. Chiar si daca ar fi o metoda care sa reseteze valoarea, problema ramane, intrucat o sa fie o singura valoare indiferent de cate instante de Client exista.

/** Prod Unauth Client */
$firstClient = $client = Anaf::client(); 

/** Stage Auth Client */
$secondClient= Anaf::factory()
    ->withApiKey($apiKey)
    ->staging()
    ->withBaseUri('https://webservicesp.anaf.ro')
    ->make(); 

/** Request-ul se va duce in stage, chiar daca $firstClient a fost initializat ca prod, pentru ca ultimul client initializat a fost $secondClient care e setat sa dea in stage */
$firstClient->efactura()->upload(...);

Solutie

  1. Metodele authorizedClient si client primesc un al doilea parametru optional $isStage care controleaza env direct din helper. $isStage e setat implicit false ca sa pastreze acelasi comportament ca pana acum pt backwards compatibility
  2. $staging din Factory nu mai e static, iar valoarea se trimite ca parametru catre HttpTransporter -> Payload::toRequest. Practic se izoleaza valoarea environmentului la instanta curenta de Client

#PR
#52

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions