| <?php
/** @noinspection PhpRedundantVariableDocTypeInspection */
/**
 *
 * @see           https://github.com/EFTEC/ApiAssemblerRuntime
 * @package       eftec
 * @author        Jorge Castro Castillo
 * @copyright (c) Jorge Castro C. Dual Licence GPL-v3 and Commercial  https://github.com/EFTEC/ApiAssemblerRuntime
 * @version       1.0 (2022-03-07T08:48:23Z)
 */
use eftec\_BasePdoOneRepo;
use eftec\apiassembler\ApiAssemblerRuntime;
use eftec\CacheOne;
use eftec\PdoOne;
use eftec\routeone\RouteOne;
use eftec\ValidationOne;
//use Exception;
include '../../vendor/autoload.php';
config();
/** @noinspection PhpConditionAlreadyCheckedInspection
 * @noinspection PhpUnhandledExceptionInspection
 * @noinspection HtmlUnknownTarget
 * @noinspection PhpUnusedParameterInspection
 * @noinspection PhpIfWithCommonPartsInspection
 */
function config()
{
// todo: edit your configurations here
    if (gethostname() === 'PCJC') {
        // developer machine configuration
        define('DATABASE_CONFIG', [
            'database' => 'mysql', // 'mysql','sqlsrv','oci'
            'server' => '127.0.0.1',
            'user' => 'root',
            'pwd' => 'abc.123',
            'db' => 'sakila',
        ]);
        $encryption = false;
        define('ENCRYPTION', [
            'password' => '',
            'salt' => '',
            'encMethod' => ''
        ]);
        $baseUrl = 'http://localhost/currentproject/ApiAssembler/tests/tmp/';
        /** @var string $templateUrl the expected url (starting from the base) */
        $templateUrl = '/{controller}/{action}/{id}/{idparent}';
        /** @var string $templateClass the class to be called when we call a controller */
        $templateClass = 'eftec\tests\tmp\{controller}ApiController';
        $debug = true;
        $cache = false;
        if ($cache) {
            define('CACHE_CONFIG', [
                'type' => '',
                'server' => '',
                'schema' => '',
                'port' => '',
                'user' => '',
                'password' => ''
            ]);
        }
    } else {
        // production machine configuration
        define('DATABASE_CONFIG', [
            'database' => 'mysql', // 'mysql','sqlsrv','oci'
            'server' => '127.0.0.1',
            'user' => 'root',
            'pwd' => 'abc.123',
            'db' => 'sakila',
        ]);
        $encryption = false;
        define('ENCRYPTION', [
            'password' => '',
            'salt' => '',
            'encMethod' => ''
        ]);
        $baseUrl = 'http://localhost/currentproject/ApiAssembler/tests/tmp/';
        /** @var string $templateUrl the expected url (starting from the base) */
        $templateUrl = '/{controller}/{action}/{id}/{idparent}';
        /** @var string $templateClass the class to be called when we call a controller */
        $templateClass = 'eftec\tests\tmp\{controller}ApiController';
        $debug = false;
        $cache = false;
        if ($cache) {
            define('CACHE_CONFIG', [
                'type' => '',
                'server' => '',
                'schema' => '',
                'port' => '',
                'user' => '',
                'password' => ''
            ]);
        }
    }
    // end configurations
    $apiAssemblerRuntime = new ApiAssemblerRuntime();
    // database connection
    $apiAssemblerRuntime->pdo = new PdoOne(...DATABASE_CONFIG);
    if ($encryption) {
        $apiAssemblerRuntime->pdo->setEncryption(...ENCRYPTION);
    }
    $apiAssemblerRuntime->pdo->logLevel = $debug === true ? 2 : 0;
    if ($cache) {
        $apiAssemblerRuntime->pdo->cacheService = new CacheOne(...CACHE_CONFIG);
    }
    if (true) {
        $apiAssemblerRuntime->setAuthService(function ($api, $action, $id = null, $idparent = null, $event = null) {
            //todo: edit your authentication here
            // Example of authentication using cache server (if any).
            /*[$class, $method] = explode('::', $action);
            if ($class === 'examples\localhost\api\UserApiController' && $method === 'tokenActionPOST') {
                // no auth required when you ask for a token
                return true;
            }
            $tokenKey = $api->routeOne->getHeader('token');
            $values = $api->pdo->getCacheService()->getCache($tokenKey, 'token');
            if ($values) {
                $api->pdo->getCacheService()->setCache($tokenKey, 'token', $values, 600); // renew by 10 minutes.
                return true;
            }
            return false;
            */
            return true;
        });
    }
    try {
        // optionally: if you have a Pdo instance, then you could use the next line:
        //             $apiAssemblerRuntime->pdo->conn1=$pdoInstance;
        $apiAssemblerRuntime->pdo->open();
    } catch (Exception $ex) {
        $apiAssemblerRuntime->errorShow(500, $ex->getMessage(), 'connecting');
    }
    // for the routing
    $apiAssemblerRuntime->routeOne = new RouteOne($baseUrl);
    $apiAssemblerRuntime->routeOne->addPath($templateUrl);
    $apiAssemblerRuntime->routeOne->fetchPath();
    // for the validation
    $apiAssemblerRuntime->validationOne = new ValidationOne();
    $apiAssemblerRuntime->validationOne->debug = $debug;
    // the routing calls the corresponding class (if any).
    if ($apiAssemblerRuntime->routeOne->controller) {
        try {
            $apiAssemblerRuntime->routeOne->callObjectEx($templateClass, true
                , '{action}Action', '{action}Action{verb}', '{action}Action{verb}', ['id', 'idparent', 'event']
                , [$apiAssemblerRuntime]);
        } catch (Exception $ex) {
            $apiAssemblerRuntime->errorShow(401, $ex->getMessage(), 'calling');
        }
    } else if ($debug) {
        echo '<ul>';
		echo '<li><b>ActorRepo</b></li>';
		echo "<li><a href='api/ActorRepo/listall'>ActorRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>Actor2Repo</b></li>';
		echo "<li><a href='api/Actor2Repo/listall'>Actor2Repo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>AddresRepo</b></li>';
		echo "<li><a href='api/AddresRepo/listall'>AddresRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>CategoryRepo</b></li>';
		echo "<li><a href='api/CategoryRepo/listall'>CategoryRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>CityRepo</b></li>';
		echo "<li><a href='api/CityRepo/listall'>CityRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>CountryRepo</b></li>';
		echo "<li><a href='api/CountryRepo/listall'>CountryRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>CustomerRepo</b></li>';
		echo "<li><a href='api/CustomerRepo/listall'>CustomerRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>DummytRepo</b></li>';
		echo "<li><a href='api/DummytRepo/listall'>DummytRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>DummytableRepo</b></li>';
		echo "<li><a href='api/DummytableRepo/listall'>DummytableRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>FilmRepo</b></li>';
		echo "<li><a href='api/FilmRepo/listall'>FilmRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>Film2Repo</b></li>';
		echo "<li><a href='api/Film2Repo/listall'>Film2Repo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>FilmActorRepo</b></li>';
		echo "<li><a href='api/FilmActorRepo/listall'>FilmActorRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>FilmCategoryRepo</b></li>';
		echo "<li><a href='api/FilmCategoryRepo/listall'>FilmCategoryRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>FilmTextRepo</b></li>';
		echo "<li><a href='api/FilmTextRepo/listall'>FilmTextRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>FumJobRepo</b></li>';
		echo "<li><a href='api/FumJobRepo/listall'>FumJobRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>FumLogRepo</b></li>';
		echo "<li><a href='api/FumLogRepo/listall'>FumLogRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>InventoryRepo</b></li>';
		echo "<li><a href='api/InventoryRepo/listall'>InventoryRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>LanguageRepo</b></li>';
		echo "<li><a href='api/LanguageRepo/listall'>LanguageRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>MysecTableRepo</b></li>';
		echo "<li><a href='api/MysecTableRepo/listall'>MysecTableRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>PaymentRepo</b></li>';
		echo "<li><a href='api/PaymentRepo/listall'>PaymentRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>ProductRepo</b></li>';
		echo "<li><a href='api/ProductRepo/listall'>ProductRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>ProducttypeRepo</b></li>';
		echo "<li><a href='api/ProducttypeRepo/listall'>ProducttypeRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>ProducttypeAutoRepo</b></li>';
		echo "<li><a href='api/ProducttypeAutoRepo/listall'>ProducttypeAutoRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>RentalRepo</b></li>';
		echo "<li><a href='api/RentalRepo/listall'>RentalRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>StaffRepo</b></li>';
		echo "<li><a href='api/StaffRepo/listall'>StaffRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>StoreRepo</b></li>';
		echo "<li><a href='api/StoreRepo/listall'>StoreRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>TablachildRepo</b></li>';
		echo "<li><a href='api/TablachildRepo/listall'>TablachildRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>TablagrandchildRepo</b></li>';
		echo "<li><a href='api/TablagrandchildRepo/listall'>TablagrandchildRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>TablaparentRepo</b></li>';
		echo "<li><a href='api/TablaparentRepo/listall'>TablaparentRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>TabletestRepo</b></li>';
		echo "<li><a href='api/TabletestRepo/listall'>TabletestRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>TestProductRepo</b></li>';
		echo "<li><a href='api/TestProductRepo/listall'>TestProductRepo/listall (ALL)</a></li>";
		echo '</ul>';
echo '<ul>';
		echo '<li><b>TypetableRepo</b></li>';
		echo "<li><a href='api/TypetableRepo/listall'>TypetableRepo/listall (ALL)</a></li>";
		echo '</ul>';
    } else {
        $apiAssemblerRuntime->errorShow(401, 'no controller', 'calling');
    }
}
 |