*/ class EmbeddingMapper extends QBMapper { public function __construct(IDBConnection $db) { parent::__construct($db, 'educai_embeddings', Embedding::class); } /** * @return array */ public function findByBot(int $botId): array { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from($this->getTableName()) ->where($qb->expr()->eq('bot_id', $qb->createNamedParameter($botId, IQueryBuilder::PARAM_INT))); return $this->findEntities($qb); } /** * @return array */ public function findByBotAndModel(int $botId, string $embeddingModel): array { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from($this->getTableName()) ->where($qb->expr()->eq('bot_id', $qb->createNamedParameter($botId, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('embedding_model', $qb->createNamedParameter($embeddingModel, IQueryBuilder::PARAM_STR))); return $this->findEntities($qb); } /** * @return array */ public function findBySource(int $sourceId): array { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from($this->getTableName()) ->where($qb->expr()->eq('source_id', $qb->createNamedParameter($sourceId, IQueryBuilder::PARAM_INT))); return $this->findEntities($qb); } public function findOneByBotAndChunk(int $botId, string $chunkId): ?Embedding { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from($this->getTableName()) ->where($qb->expr()->eq('bot_id', $qb->createNamedParameter($botId, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('chunk_id', $qb->createNamedParameter($chunkId, IQueryBuilder::PARAM_STR))) ->setMaxResults(1); try { return $this->findEntity($qb); } catch (DoesNotExistException $e) { return null; } } public function deleteBySource(int $sourceId): void { $qb = $this->db->getQueryBuilder(); $qb->delete($this->getTableName()) ->where($qb->expr()->eq('source_id', $qb->createNamedParameter($sourceId, IQueryBuilder::PARAM_INT))); $qb->executeStatement(); } public function deleteByBot(int $botId): void { $qb = $this->db->getQueryBuilder(); $qb->delete($this->getTableName()) ->where($qb->expr()->eq('bot_id', $qb->createNamedParameter($botId, IQueryBuilder::PARAM_INT))); $qb->executeStatement(); } public function countByBot(int $botId): int { $qb = $this->db->getQueryBuilder(); $qb->select($qb->createFunction('COUNT(*)')) ->from($this->getTableName()) ->where($qb->expr()->eq('bot_id', $qb->createNamedParameter($botId, IQueryBuilder::PARAM_INT))); $result = $qb->executeQuery(); $count = (int)$result->fetchOne(); $result->closeCursor(); return $count; } public function countByBotAndModel(int $botId, string $embeddingModel): int { $qb = $this->db->getQueryBuilder(); $qb->select($qb->createFunction('COUNT(*)')) ->from($this->getTableName()) ->where($qb->expr()->eq('bot_id', $qb->createNamedParameter($botId, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('embedding_model', $qb->createNamedParameter($embeddingModel, IQueryBuilder::PARAM_STR))); $result = $qb->executeQuery(); $count = (int)$result->fetchOne(); $result->closeCursor(); return $count; } }