Hi.
I am building a small restful API with 2 gets and 1 put. I am following the guide there is for a restful API with Phalcon and i don't get it all.
In the guide does it create a model, without using the functions in it and then it is needed to do SQL calls.
So what is best to do it? do all the code in the bootstrap/index file or move SQL calls to a model?
Here is my bootstrap/index file index.php
<?php
$loader = new \Phalcon\Loader();
$loader->registerDirs(array(
    __DIR__ . '/models/'
))->register();
$di = new \Phalcon\DI\FactoryDefault();
$app = new \Phalcon\Mvc\Micro($di);
$di->set('db', function() {
    return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
        "host" => "localhost",
        "username" => "patteguf",
        "password" => "xxxxxxxxxxxx",
        "dbname" => "pattegufv3"
    ));
});
$app->get('/pictures', function() use ($app)
{
    $limit = $app['request']->getQuery('limit', 'int', 10);
    $offset = $app['request']->getQuery('offset', 'int', 0);
    if($limit > 50) {
        $response = new Phalcon\Http\Response();
        $response->setStatusCode(403, 'Forbidden');
    }
    $phql = "SELECT p.id, p.filename, p.likes FROM pictures p WHERE p.status = 'Active' ORDER BY p.id DESC LIMIT :limit:,:offset:";
    $pictures = $app->modelsManager->executeQuery(
        $phql,
        array(
            'limit' => $limit,
            'offset' => $offset
        ),
        array(
            'limit' => \Phalcon\Db\Column::BIND_PARAM_INT,
            'offset' => \Phalcon\Db\Column::BIND_PARAM_INT
        )
    );
    $data = array();
    foreach ($pictures as $picture) {
        $data[] = array(
            'id' => $picture->id,
            'filename' => $picture->filename,
            'likes' => $picture->likes
        );
    }
    echo json_encode($data);
});
$app->get('/pictures/{id:[0-9]+}', function($id) use ($app)
{
    $phql = "SELECT p.id, p.filename, p.likes FROM pictures p WHERE p.status = 'Active' AND p.id = :id:";
    $picture = $app->modelsManager->executeQuery($phql,
        array(
        'id' => $id
        ),
        array('id' => \Phalcon\Db\Column::BIND_PARAM_INT))->getFirst();
    $response = new Phalcon\Http\Response();
    if($picture == false) {
        $response->setStatusCode(404, 'Not found');
    } else {
        $response->setJsonContent(array(
            'id' => $picture->id,
            'filename' => $picture->filename,
            'likes' => $picture->likes
        ));
    }
    return $response;
});
$app->put('/pictures/{id:[0-9]+}', function($id) use ($app)
{
    $query = "SELECT p.likes FROM pictures p WHERE p.status = 'Active' AND p.id = :id:";
    $like = $app->modelsManager->executeQuery($query,
    array(
        'id' => $id
    ),
    array('id' => \Phalcon\Db\Column::BIND_PARAM_INT))->getFirst();
    $amountLikes = $like->likes + 1;
    $phql = "UPDATE pictures SET pictures.likes = pictures.likes + 1 WHERE pictures.id = :id:";
    #$phql = "UPDATE pictures p SET `p.likes` = " . $amountLikes ." WHERE `p.id` = :id:";
    $customHash = $app['security']->hash('*patte.!guf#');
    $ipAddress = $app['request']->getClientAddress();
    $userAgent = $app['request']->getUserAgent();
    $response = new Phalcon\Http\Response();
    $app->modelsManager->executeQuery($phql,
        array(
            'id' => $id
        ),
        array(
            'id' => \Phalcon\Db\Column::BIND_PARAM_INT
        ));
        #$app['cookies']->set($customHash, $app['security']->hash("*patte." . $ipAddress . $userAgent . time() . "!guf#"),time() + 30 * 86400); // sets cookie for 1 month
    /*
    } else {
        $response->setStatusCode(403, 'Forbidden');
    }
    */
    return $response;
});
$app->notFound(function () use ($app) {
    $app->response->setStatusCode(404, "Not Found")->sendHeaders();
    echo 'This is crazy, but this page was not found!';
});
$app->handle();And this is my model i am creating. /models/Pictures.php
<?php
use Phalcon\Mvc\Model,
    Phalcon\Mvc\Model\Query,
    Phalcon\Db,
    Phalcon\Http\Response;
class Pictures extends Model
{
    public function select($id = null, $limit = 10, $offset = 0)
    {
        if(is_null($id))
        {
            if($limit > 50) {
                $response = new Phalcon\Http\Response();
                $response->setStatusCode(403, 'Forbidden');
            }
            $phql = "SELECT p.id, p.filename, p.likes FROM pictures p WHERE p.status = 'Active' ORDER BY p.id DESC LIMIT :limit:,:offset:";
            $pictures = $this->getModelsManager()->executeQuery(
                $phql,
                array(
                    'limit' => $limit,
                    'offset' => $offset
                ),
                array(
                    'limit' => Db\Column::BIND_PARAM_INT,
                    'offset' => Db\Column::BIND_PARAM_INT
                )
            );
            $data = array();
            foreach ($pictures as $picture) {
                $data[] = array(
                    'id' => $picture->id,
                    'filename' => $picture->filename,
                    'likes' => $picture->likes
                );
            }
            return json_encode($data);
        }
        if(!is_null($id))
        {
            $phql = "SELECT p.id, p.filename, p.likes FROM pictures p WHERE p.status = 'Active' AND p.id = :id:";
            $picture = $this->getModelsManager()->executeQuery($phql,
                array(
                    'id' => $id
                ),
                array('id' => Db\Column::BIND_PARAM_INT))->getFirst();
            $response = new Response();
            if($picture == false) {
                $response->setStatusCode(404, 'Not found');
            } else {
                $response->setJsonContent(array(
                    'id' => $picture->id,
                    'filename' => $picture->filename,
                    'likes' => $picture->likes
                ));
            }
            return $response;
        }
    }
}I haven't figured out how to use it completely. FYI, i do have some errors in the code above i am working on.
I need suggestions how to do this the best/smatest way and easy scalable