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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions