?? GreyFile — Mystic File Browser

Current path: home/webdevt/cryptoimpot.fr/module/Application/src/Service/



?? Go up: /home/webdevt/cryptoimpot.fr/module/Application/src

?? Viewing: ExchangeRateService.php

<?php

namespace Application\Service;

use Application\Entity\CoursDevise;
use Application\Entity\Devise;
use Application\Entity\Source;
use Application\Mapper\CoursDeviseMapper;
use Application\Mapper\SourceMapper;
use Application\Service\ApiHistorical\APINomicsService;
use Application\Service\ApiHistorical\CMCService;
use Application\Service\ApiHistorical\CoinAPIService;
use Application\Service\ApiHistorical\ExchangeRatesAPIService;
use Application\Service\ApiHistorical\MinAPICryptoCompareService;
use Doctrine\ORM\EntityManager;

/**
 * Description of ExchangeRateService
 *
 * @author jimmy
 */
class ExchangeRateService
{
    public function __construct(EntityManager $entityManager, $mapperCoursDevise=null)
    {
        if (empty($mapperCoursDevise)) {
            $mapperCoursDevise = new CoursDeviseMapper($entityManager);
        }
        $this->entityManager = $entityManager;
        $this->mapperCoursDevise = $mapperCoursDevise;
        $this->sourceMapper = new SourceMapper($this->entityManager);
        $this->CMCService = new CMCService();
        $this->CoinAPIService = new CoinAPIService();
        $this->APINomicsService = new APINomicsService();

        $this->MinAPICryptoCompareService = new MinAPICryptoCompareService($this->entityManager, $this->mapperCoursDevise,$this->sourceMapper);
        $this->ExchangeRatesAPIService = new ExchangeRatesAPIService($this->entityManager, $this->mapperCoursDevise,$this->sourceMapper);
        $this->sourceManuel = $this->sourceMapper->findById(2);
        $this->sourceNonTrouve = $this->sourceMapper->findById(5);
    }

    public function insertCoursDevise(Devise $devise, \DateTime $dateTime, $prixUnitaireEuro, Source $source)
    {
        $insertCoursDevise = new CoursDevise();
        $insertCoursDevise->setDateCours($dateTime);
        $insertCoursDevise->setDevise($devise);
        $insertCoursDevise->setCoursEuro($prixUnitaireEuro);
        $insertCoursDevise->setSource($source);
        $this->mapperCoursDevise->insert($insertCoursDevise);
    }




    public function getPriceInEuroFromDevise(Devise $devise, \DateTime $dateTime)
    {

        $dateTimeMinuit = new \DateTime($dateTime->format('Y-m-d'). '00:00:00');


        //@todo call data market

        // on récupère le prix approximatif de la journée
        //@todo récupérer le prix à l'heure précise

//        $coursDevise = $this->mapperCoursDevise->findByDeviseAndDate($devise, $datetimeclone->setTime(0, 0, 0));
        $coursDevise = $this->mapperCoursDevise->findByDeviseAndDate($devise, $dateTime);








        if (!empty($coursDevise)) {
//            var_dump($coursDevise->coursEuro);
//            exit;
//           if ($devise->getCode() == 'PRL') {
//               echo $coursDevise->coursEuro; exit;
//           }
            //echo 'cours';
            return $coursDevise->coursEuro;
        }










        // On essaie avec coinMarketCap Pro
        try {
            $this->CMCService->getUnitPriceInEur($devise, $dateTime);
        } catch (\Exception $e) {
            //echo $e->getMessage();
        }
//
//        try {
//            $this->CoinAPIService->getUnitPriceInEur($devise, $dateTime);
//        } catch (\Exception $e) {
//            echo 'ok';
//
//        }
//
//        try {
//            $this->APINomicsService->getUnitPriceInEur($devise, $dateTime);
//        } catch (\Exception $e) {
//            echo 'ok';
//
//        }


        try {
            $unitPrice = $this->MinAPICryptoCompareService->getUnitPriceInEur($devise, $dateTime);
            return $unitPrice;
        } catch (\Exception $e) {
            //$unitPrice = null;
            //echo $e->getMessage();

        }

        try {
            $unitPrice = $this->ExchangeRatesAPIService->getUnitPriceInEur($devise, $dateTime);
            return $unitPrice;
        } catch (\Exception $e) {
           // echo $e->getMessage();
        }

        $coursDevise2 = $this->mapperCoursDevise->findByDeviseAndDate($devise, $dateTimeMinuit);

        if (!empty($coursDevise2)) {


            $this->insertCoursDevise($devise, $dateTime, $coursDevise2->coursEuro, $this->sourceManuel);

            return $coursDevise2->coursEuro;
        } else {

            if ($devise->getCode() == 'PRL' && $dateTime > new \DateTime('2019-01-01')) {
                $this->insertCoursDevise($devise, $dateTime, 0, $this->sourceManuel);
                return 0;
            }

            if ($devise->getCode() == 'STR') {
                $this->insertCoursDevise($devise, $dateTime, 0, $this->sourceNonTrouve);
                return 0;
            }

            $this->insertCoursDevise($devise, $dateTime, 0, $this->sourceNonTrouve);
return 0;

        }
        // on essaye avec la valeur moyenne
        //echo 'tutu';



//
//        if (!empty($coursDevise)) {
//
//            echo 'tata';
//
//            $this->insertCoursDevise($devise, $dateTime, $coursDevise->coursEuro, $this->sourceManuel);
////            var_dump($coursDevise->coursEuro);
////            exit;
////           if ($devise->getCode() == 'PRL') {
////               echo $coursDevise->coursEuro; exit;
////           }
//            return $coursDevise->coursEuro;
//        }

        echo '------------------------------------'; exit;

//echo 'toto';
//        $urlApi = 'https://api.exchangeratesapi.io/';
//        // asset fsym
//
//        $urlApi .= $dateTime->format('Y-m-d');
//        $urlApi .= '?base=EUR';
//        $urlApi .= '&symbols=' . $currency;
//
//
//        // fetch data
//        $curl = curl_init();
//        curl_setopt($curl, CURLOPT_URL, $urlApi);
//        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//        $rawData = curl_exec($curl);
//        curl_close($curl);
//
//// decode to array
//        $data = json_decode($rawData, true);
//        //var_dump($data); exit;
//        if (!isset($data['rates'][$currency])) {
//            goto api2;
//            //throw new Exception('Market value not found');
//            //var_dump($data['rates']);
//            //echo $dateTime->format('Y-m-d');
//            $price = 0;
//        } else {
//            return $data['rates'][$currency];
//        }

//        api2:
//
//        $urlApi = 'https://free.currconv.com/api/v7/convert?q=' . $currency . '_EUR&compact=ultra&date=' . $dateTime->format('Y-m-d') . '&apiKey=29fd6d6377feb3c18f3e';
//        // asset fsym
//
////        $urlApi .= $dateTime->format('Y-m-d');
////        $urlApi .= '?base=EUR';
////        $urlApi .= '&symbols=' . $currency;
//
//
//        // fetch data
//        $curl = curl_init();
//        curl_setopt($curl, CURLOPT_URL, $urlApi);
//        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//        $rawData = curl_exec($curl);
//        curl_close($curl);
//
//// decode to array
//        $data = json_decode($rawData, true);
////        var_dump($data); exit;
//        //var_dump($data); exit;
//        if (!isset($data['rates'][$currency])) {
//            throw new \Exception('Taux de change currconv non trouvé.');
//            //throw new Exception('Market value not found');
//            //var_dump($data['rates']);
//            //echo $dateTime->format('Y-m-d');
//            $price = 0;
//        } else {
//
//            return $data['rates'][$currency];
//        }


    }


    public function getPrice($devise, \DateTime $datetime)
    {
        // debug sinon update le datetime ext à la fonction
        $datetimeclone = clone $datetime;
        //var_dump($devise->getCode());
        //@todo call data market
        //$value = 0;
        // on récupère le prix approximatif de la journée
        //@todo récupérer le prix à l'heure précise
        $coursDevise = $this->mapperCoursDevise->findByDeviseAndDate($devise, $datetimeclone->setTime(0, 0, 0));
        //echo 'cours';
        if (!empty($coursDevise)) {
//            var_dump($coursDevise->coursEuro); exit;
            return $coursDevise->coursEuro;
        }

        $insertCoursDevise = new CoursDevise();
        $insertCoursDevise->setDateCours($datetimeclone);
        $insertCoursDevise->setDevise($devise);

        // Si pas en base getPrice via API cryptomarketcap
        try {
            if (!empty($devise->getIdCMC())) {

                $price = $this->CMCService->getPriceByIdCMC($devise->getIdCMC(), $datetimeclone, $devise);
                if (!empty($price)) {
                    $insertCoursDevise->setCoursEuro($price);
                    $coursDevise->insert($insertCoursDevise);
                    echo 'getIdCMC';exit;
                    return $price;
                }
            }
        } catch (\Exception $e) {
            try {
                if (!empty($devise->getCode())) {
                    //echo 'coin API';
                    $price = $this->CoinAPIService->getPriceByCode($devise->getCode(), $datetimeclone);
                    $insertCoursDevise->setCoursEuro($price);
                    $coursDevise->insert($insertCoursDevise);
                    echo 'titi';exit;
                    return $price;
                }
            } catch (\Exception $e) {
                throw new \Exception('prix non trouvé : ' . $devise->getCode() . ' le : ' . $datetime->format('d-m-Y H:i:s'));
            }
        }


//$this->pdo->query('SELECT id FROM crypto WHERE code = "'.$asset.'"', PDO::FETCH_ASSOC


        /*

          $arrayMarket = array(
          '2019-04-09' => array('XXBT' => 3300, 'XETH' => 160, 'XLTC' => 290),
          '2019-04-10' => array('XXBT' => 4000, 'XETH' => 190, 'XLTC' => 295),
          '2019-04-11' => array('XXBT' => 4100, 'XETH' => 410, 'XLTC' => 300),
          '2019-04-12' => array('XXBT' => 4050, 'XETH' => 480, 'XLTC' => 300),
          '2019-04-13' => array('XXBT' => 4200, 'XETH' => 600, 'XLTC' => 320),
          '2019-04-14' => array('XXBT' => 4230, 'XETH' => 250, 'XLTC' => 400),
          '2019-04-15' => array('XXBT' => 3900, 'XETH' => 200, 'XLTC' => 500),
          '2019-04-16' => array('XXBT' => 3000, 'XETH' => 450, 'XLTC' => 510),
          '2019-04-17' => array('XXBT' => 2500, 'XETH' => 400, 'XLTC' => 520),
          );

          if (empty($arrayMarket[$datestr]) || empty($arrayMarket[$datestr][$asset])) {
          throw new Exception('Market value not found');
          }
         *   */


        //$currentTime
        /*
          BTC	ETH	LTC
          3300	160	290
          4000	190	295
          4100	410	300
          4050	480	300
          4200	600	320
          4230	250	400
          3900	200	500
          3000	450	510
          2500	400	520
         * */


//    if ($asset === 'XETH'){
//        $value = 160;
//    }

    }

}


??

??