AllPositionResource.php 14.4 KB
<?php
/**
 * Created by PhpStorm.
 * User: Alex Savenko
 * Date: 22.02.2017
 * Time: 20:29
 */

namespace App\Resources;


use App\Constants\AclRoles;
use App\Controllers\AllPositionController;
use PhalconApi\Constants\HttpMethods;
use PhalconRest\Api\ApiEndpoint;
use PhalconRest\Api\ApiResource;

class AllPositionResource extends ApiResource
{

    public function initialize() {

        $this
            ->name('All Position')
            ->expectsJsonData()
            ->itemKey('ap')
            ->collectionKey('ap')
            ->deny(AclRoles::UNAUTHORIZED)
            ->handler(AllPositionController::class)

            /** -------------------- [GET] project ------------------------------ **/
                ->endpoint(
                    ApiEndpoint::factory('/project', HttpMethods::GET, 'projectAction')
                        ->name('project')
                        ->description('Данные о проекте')
                        ->paramsDescription([
                            'required params' => [
                                'project' => "integer(ID проекта)"
                            ]
                        ])
                        ->exampleResponse([
                            "url"       => "rukzachok.com.ua(URL проекта)",
                            "cy"        => "60(тИЦ)",
                            "pr"        => "0(Google PageRank)",
                            "yaca"      => "0(Наличие сайта в Яндекс каталоге)",
                            "dmoz"      => "0(Наличие сайта в DMOZ)",
                            "yahoo"     => "0(Наличие сайта в Yahoo)",
                            "name"      => "rukzachok.com.ua",
                            "interval"  => 0
                        ])
                        ->allow(AclRoles::USER)
                )
            /** ----------------------------------------------------------------- **/

            /** -------------------- [GET] projects ----------------------------- **/
                ->endpoint(
                ApiEndpoint::factory('/projects', HttpMethods::GET, 'projectsAction')
                    ->name('projects')
                    ->description('Список проектов пользователя')
                    ->paramsDescription([
                        'required params' => [],
                        'optional params' => [
                            'id_group' => "integer(ID проекта)"
                        ]
                    ])
                    ->exampleResponse([
                        [
                            "id_project"    => "{id}(ID проекта)",
                            "id_group"      => "11111(ID группы проектов)",
                            "url"           => "8nebo.com(URL проекта)",
                            "cy"            => "20(тИЦ)",
                            "pr"            => "0(Google PageRank)",
                            "name"          => "8nebo.com",
                            "interval"      => 7,
                            "sleep"         => 1
                        ],
                        [
                            "id_project"    => "{id}(ID проекта)",
                            "id_group"      => "11111(ID группы проектов)",
                            "url"           => "a-v-z.com.ua(URL проекта)",
                            "cy"            => "10(тИЦ)",
                            "pr"            => "0(Google PageRank)",
                            "name"          => "",
                            "interval"      => 0,
                            "sleep"         => 0
                        ]
                    ])
                    ->allow(AclRoles::USER)
            )
            /** ------------------------------------------------------------------**/

            /** -------------------- [GET] projects_group ----------------------- **/
                ->endpoint(
                ApiEndpoint::factory('/projects_group', HttpMethods::GET, 'projectsGroupAction')
                    ->name('projects group')
                    ->description('Список групп проектов')
                    ->paramsDescription([
                        'required params' => []
                    ])
                    ->exampleResponse([
                        [
                            "id_group"  => "{id}(ID группы проектов)",
                            "group"     => "bkko.com.ua(Название группы)"
                        ],
                        [
                            "id_group"  => "{id}(ID группы проектов)",
                            "group"     => "Dveri(Название группы)"
                        ]
                    ])
                    ->allow(AclRoles::USER)
            )
            /** ----------------------------------------------------------------- **/

            /** -------------------- [GET] queries ------------------------------ **/
                ->endpoint(
                ApiEndpoint::factory('/queries', HttpMethods::GET, 'queriesAction')
                    ->name('queries')
                    ->description('Список запросов, по которым определяется позиция сайта')
                    ->paramsDescription([
                        'required params' => [
                            'project'   => 'integer(ID проекта)'
                        ],
                        'optional params' => [
                            'id_group' => 'integer(ID группы запросов)'
                        ]
                    ])
                    ->exampleResponse([
                        [
                            "id_query"  => "{id}(ID запроса)",
                            "id_group"  => "{id}(ID группы запросов)",
                            "query"     => "=рюкзаки переноски для детей(Запрос)",
                            "freq"      => "50(Частота запроса)",
                            "url"       => "(URL целевой страницы)"
                        ],
                        [
                            "id_query"  => "{id}(ID запроса)",
                            "id_group"  => "{id}(ID группы запросов)",
                            "query"     => "dakine кошелек(Запрос)",
                            "freq"      => "10(Частота запроса)",
                            "url"       => "(URL целевой страницы)"
                        ]
                    ])
                    ->allow(AclRoles::USER)
            )
            /** ----------------------------------------------------------------- **/

            /** -------------------- [GET] queries_group ------------------------ **/
                ->endpoint(
                ApiEndpoint::factory('/queries_group', HttpMethods::GET, 'queriesGroupAction')
                    ->name('queries group')
                    ->description('Список групп запросов')
                    ->paramsDescription([
                        'required params' => ['project' => 'integer(ID проекта)']
                    ])
                    ->exampleResponse([
                        [
                            "id_group"  => "{id}(ID группы запросов)",
                            "group"     => "head рюкзак(Название группы)"
                        ],
                        [
                            "id_group"  => "{id}(ID группы запросов)",
                            "group"     => "quiksilver рюкзак(Название группы)"
                        ]
                    ])
                    ->allow(AclRoles::USER)
            )
            /** ----------------------------------------------------------------- **/

            /** -------------------- [GET] report ------------------------------- **/
                ->endpoint(
                ApiEndpoint::factory('/report', HttpMethods::GET, 'reportAction')
                    ->name('report')
                    ->description('Отчет по позициям сайта')
                    ->paramsDescription([
                        'required params' => [
                            'project'   => 'integer(ID проекта)'
                        ],
                        'optional params' => [
                            'date'      => 'date(дата отчета в формате Y-m-d (например, 2010-12-31))',
                            'prev_date' => 'date(дата для сравнения позиции сайта в формате Y-m-d (например, 2010-12-30))'
                        ]
                    ])
                    ->exampleResponse([
                        "count"     => "526(Количество запросов)",
                        "top3"      => "50(Запросов в ТОП 3)",
                        "top10"     => "113(Запросов в ТОП 3)",
                        "top30"     => "275(Запросов в ТОП 3)",
                        "down"      => "230(Позиций улучшилось)",
                        "up"        => "205(Позиций улучшилось)",
                        "sengines"  => [
                            [
                                "id_se"         => "{id}(ID поисковой системы)",
                                "name_se"       => "Google(название поисковой системы)",
                                "name_region"   => "com.ua/Киев(название региона)"
                            ],
                            [
                                "id_se"         => "{id}(ID поисковой системы)",
                                "name_se"       => "Google(название поисковой системы)",
                                "name_region"   => "com.ua(название региона)"
                            ]
                        ],
                        "queries" => [
                            [
                                "id_query"      => "{id}(ID запроса)",
                                "query"         => "=рюкзаки переноски для детей(запрос)",
                                "wordstat"      => "50(частота запроса)"
                            ],
                            [
                                "id_query"      => "{id}(ID запроса)",
                                "query"         => "dakine кошелек(запрос)",
                                "wordstat"      => "10(частота запроса)"
                            ]
                        ],
                        "positions" => [
                            [
                                "position "         => "{id}(ID запроса)",
                                "prev_position "    => "=рюкзаки переноски для детей(запрос)",
                                "change_position"   => "50(частота запроса)",
                                "url"               => "50(частота запроса)"
                            ],
                            [
                                "position "         => "(текущая позиция сайта)",
                                "prev_position "    => "(предыдущая позиция сайта)",
                                "change_position"   => "(изменение позиции сайта)",
                                "url"               => "(найденный URL)"
                            ]
                        ]
                    ])
                    ->allow(AclRoles::USER)
            )
            /** ----------------------------------------------------------------- **/

            /** -------------------- [GET] visibility --------------------------- **/
                ->endpoint(
                ApiEndpoint::factory('/visibility', HttpMethods::GET, 'visibilityAction')
                    ->name('visibility')
                    ->description('Данные о видимости сайта за указанный период')
                    ->paramsDescription([
                        'required params' => [
                            'project'   => 'integer(ID проекта)'
                        ],
                        'optional params' => [
                            'start'     => 'date(начальная дата в формате Y-m-d (например, 2010-12-01))',
                            'end'       => 'date(конечная дата в формате Y-m-d (например, 2010-12-31))',
                            'id_se' => 'integer(ID поисковой системы)'
                        ]
                    ])
                    ->exampleResponse([
                        "2017-02-13"    => "0.2",
                        "2017-02-15"    => "0.2",
                        "2017-02-20"    => "0.3",
                        "2017-02-26"    => "0.3",
                        "2017-03-06"    => "0.3",
                        "2017-03-12"    => "0.2"
                    ])
                    ->allow(AclRoles::USER)
            )
            /** ----------------------------------------------------------------- **/

            /** -------------------- [GET] visibility --------------------------- **/
            ->endpoint(
                ApiEndpoint::factory('/report_dates', HttpMethods::GET, 'reportDatesAction')
                    ->name('report dates')
                    ->description('Список дат, когда обновлялись позиции сайта')
                    ->paramsDescription([
                        'required params' => [
                            'project'   => 'integer(ID проекта)'
                        ],
                    ])
                    ->exampleResponse([
                        "2017-02-13"    => "0.2",
                        "2017-02-15"    => "0.2",
                        "2017-02-20"    => "0.3",
                        "2017-02-26"    => "0.3",
                        "2017-03-06"    => "0.3",
                        "2017-03-12"    => "0.2"
                    ])
                    ->allow(AclRoles::USER)
            )
            /** ----------------------------------------------------------------- **/
        ;

    }

}