* @copyright 2018, Maxence Lange * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ namespace OCA\Social\Db; use DateTime; use OCA\Social\Exceptions\CacheDocumentDoesNotExistException; use OCA\Social\Model\ActivityPub\Document; use OCP\DB\QueryBuilder\IQueryBuilder; class CacheDocumentsRequest extends CacheDocumentsRequestBuilder { /** * insert cache about an Actor in database. * * @param Document $document */ public function save(Document $document) { $qb = $this->getCacheDocumentsInsertSql(); $qb->setValue('id', $qb->createNamedParameter($document->getId())) ->setValue('type', $qb->createNamedParameter($document->getType())) ->setValue('url', $qb->createNamedParameter($document->getUrl())) ->setValue('media_type', $qb->createNamedParameter($document->getMediaType())) ->setValue('local_copy', $qb->createNamedParameter($document->getLocalCopy())) ->setValue('public', $qb->createNamedParameter(($document->isPublic()) ? '1' : '0')) ->setValue( 'creation', $qb->createNamedParameter(new DateTime('now'), IQueryBuilder::PARAM_DATE) ); $qb->execute(); } /** * @param Document $document */ public function initCaching(Document $document) { $qb = $this->getCacheDocumentsUpdateSql(); $this->limitToIdString($qb, $document->getId()); $qb->set( 'caching', $qb->createNamedParameter(new DateTime('now'), IQueryBuilder::PARAM_DATE) ); $qb->execute(); } /** * @param Document $document */ public function endCaching(Document $document) { $qb = $this->getCacheDocumentsUpdateSql(); $this->limitToIdString($qb, $document->getId()); $qb->set('local_copy', $qb->createNamedParameter($document->getLocalCopy())); $qb->set('error', $qb->createNamedParameter($document->getError())); $qb->execute(); } /** * @param string $url * * @return Document * @throws CacheDocumentDoesNotExistException */ public function getBySource(string $url) { $qb = $this->getCacheDocumentsSelectSql(); $this->limitToUrl($qb, $url); $cursor = $qb->execute(); $data = $cursor->fetch(); $cursor->closeCursor(); if ($data === false) { throw new CacheDocumentDoesNotExistException(); } return $this->parseCacheDocumentsSelectSql($data); } /** * @param string $id * * @param bool $public * * @return Document * @throws CacheDocumentDoesNotExistException */ public function getById(string $id, bool $public = false) { $qb = $this->getCacheDocumentsSelectSql(); $this->limitToIdString($qb, $id); if ($public === true) { $this->limitToPublic($qb); } $cursor = $qb->execute(); $data = $cursor->fetch(); $cursor->closeCursor(); if ($data === false) { throw new CacheDocumentDoesNotExistException(); } return $this->parseCacheDocumentsSelectSql($data); } }