<?php declare(strict_types=1); namespace openvk\Web\Models\Repositories; use openvk\Web\Models\Entities\{Messages as M, User}; use Chandler\Database\DatabaseConnection as DB; use Nette\Database\Table\ActiveRow; class Conversations { private $context; private $convos; public function __construct() { $this->context = DB::i()->getContext(); $this->convos = $this->context->table("conversations"); } private function toConversation(?ActiveRow $ar): ?M\AbstractConversation { if (is_null($ar)) { return null; } elseif ($ar->is_pm) { return new M\PrivateConversation($ar); } else { return new M\Conversation($ar); } } public function get(int $id): ?M\AbstractConversation { return $this->toConversation($this->convos->get($id)); } public function getConversationsByUser(User $user, int $page = 1, ?int $perPage = null): \Traversable { $rels = $this->context->table("conversation_members")->where([ "deleted" => false, "user" => $user->getId(), ])->page($page, $perPage ?? OPENVK_DEFAULT_PER_PAGE); foreach ($rels as $rel) { yield $this->get($rel->conversation); } } public function getPrivateConversation(User $user, int $peer): M\PrivateConversation { ; } }