/home/brandsfa/annurbd.com/app/Contracts/Repositories/OrderRepositoryInterface.php
<?php
namespace App\Contracts\Repositories;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Pagination\LengthAwarePaginator;


interface OrderRepositoryInterface extends RepositoryInterface
{
    /**
     * @param string $addedBy
     * @param string|null $searchValue
     * @param array $filters Filters value must be in key and value pair structure, support one level nested array, ex: Filters = ['category'=>[1,2,5,8], 'email'=>['x@x.com','test@test.com']]
     * @param array $relations
     * @param int|string $dataLimit If you need all data without pagination, you need to set dataLimit = 'all'
     * @param int|null $offset
     * @return Collection|LengthAwarePaginator
     */
    public function getDeliveryManOrderListWhere(string $addedBy, string $searchValue = null, array $filters = [] , array $relations = [], int|string $dataLimit = DEFAULT_DATA_LIMIT, int $offset = null): Collection|LengthAwarePaginator;

    /**
     * @param array $params
     * @param array $data
     * @return bool
     */
    public function updateWhere(array $params, array $data): bool;


    /**
     * @param array $orderBy
     * @param string|null $searchValue
     * @param array $filters
     * @param array $relations
     * @param array $nullFields
     * @param array $whereNotIn
     * @param int|string $dataLimit
     * @param int|null $offset
     * @return Collection|LengthAwarePaginator
     */
    public function getListWhereNotIn(array $orderBy = [], string $searchValue = null, array $filters = [], array $relations = [], array $nullFields = [], array $whereNotIn = [], int|string $dataLimit = DEFAULT_DATA_LIMIT, int $offset = null): Collection|LengthAwarePaginator;

    /**
     * @param string|null $searchValue
     * @param array $filters
     * @param array $relations
     * @return int
     */
    public function getListWhereCount(string $searchValue = null, array $filters = [], array $relations = []): int;


    /**
     * @param object $request
     * @param string|int $userId
     * @param string $userType
     * @return bool
     */
    public function updateAmountDate(object $request, string|int $userId, string $userType): bool;

    /**
     * @param array $filters
     * @param string|null $dateType
     * @param array $filterDate
     * @param array $relations
     * @param int|string $dataLimit
     * @param int|null $offset
     * @return Collection|LengthAwarePaginator
     */
    public function getListWhereDate(array $filters = [], string $dateType = null, array $filterDate = [] , array $relations = [], int|string $dataLimit = DEFAULT_DATA_LIMIT, int $offset = null): Collection|LengthAwarePaginator ;


    /**
     * @param string|int $orderId
     * @param string $status
     * @return bool
     */
    public function updateStockOnOrderStatusChange(string|int $orderId, string $status): bool;

    /**
     * @param object $order
     * @param string $receivedBy
     * @return bool
     */
    public function manageWalletOnOrderStatusChange(object $order, string $receivedBy): bool;

    /**
     * @param array $filters
     * @param array $relations
     * @param int|string $dataLimit
     * @param int|null $offset
     * @return Collection|LengthAwarePaginator
     */
    public function getTopCustomerList(array $filters = [] , array $relations = [], int|string $dataLimit = DEFAULT_DATA_LIMIT, int $offset = null): Collection|LengthAwarePaginator;
    public function getListWhereBetween(array $filters = [], string $selectColumn = null, string $whereBetween = null, array $whereBetweenFilters = [], array $relations = [], int|string $dataLimit = DEFAULT_DATA_LIMIT, int $offset = null): Collection|LengthAwarePaginator;

}