<?php

namespace Lc\SovBundle\Repository;

use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Lc\SovBundle\Doctrine\EntityInterface;

interface RepositoryQueryInterface
{
    public function create();

    public function call(callable $fn):self;

    public function count();

    public function findOne();

    public function find(): array;

    public function limit(int $maxResults):self;

    public function paginate(int $page = 1, int $limit = 20);

    public function getRepository(): ServiceEntityRepository;

    public function orderBy(string $field, string $sort = 'ASC'):self;

    public function filterById(int $id):self;

    public function filterByDevAlias(string $devAlias):self;

    public function filterBySlug(string $slug):self;

    public function filterIsParent():self;

    public function filterIsChildren():self;

    public function filterByParent(EntityInterface $parent):self;

    public function filterIsOffline():self;

    public function filterIsOnline():self;

    public function filterIsDeleted():self;

    public function filterIsOnlineAndOffline():self;
}