. * */ namespace OCA\Passman\Db; use OCA\Passman\Utility\Utils; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\Entity; use OCP\AppFramework\Db\MultipleObjectsReturnedException; use OCP\AppFramework\Db\QBMapper; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; class FileMapper extends QBMapper { const TABLE_NAME = 'passman_files'; public function __construct( IDBConnection $db, private Utils $utils, ) { parent::__construct($db, self::TABLE_NAME); } /** * @param int $file_id * @param string|null $user_id * @return Entity * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function getFile(int $file_id, string $user_id = null) { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from(self::TABLE_NAME) ->where($qb->expr()->eq('id', $qb->createNamedParameter($file_id, IQueryBuilder::PARAM_INT))); if ($user_id !== null) { $qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR))); } return $this->findEntity($qb); } /** * @param string $file_guid * @param string|null $user_id * @return Entity * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function getFileByGuid(string $file_guid, string $user_id = null) { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from(self::TABLE_NAME) ->where($qb->expr()->eq('guid', $qb->createNamedParameter($file_guid, IQueryBuilder::PARAM_STR))); if ($user_id !== null) { $qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR))); } return $this->findEntity($qb); } /** * @param $file_raw * @param $userId * @return File */ public function create($file_raw, $userId) { $file = new File(); $file->setGuid($this->utils->GUID()); $file->setUserId($userId); $file->setFilename($file_raw['filename']); $file->setSize($file_raw['size']); $file->setCreated($this->utils->getTime()); $file->setFileData($file_raw['file_data']); $file->setMimetype($file_raw['mimetype']); return $this->insert($file); } /** * Delete a file by file_id and user id * * @param int $file_id * @param string $userId * @return File|Entity */ public function deleteFile(int $file_id, string $userId) { $file = new File(); $file->setId($file_id); $file->setUserId($userId); return $this->delete($file); } /** * Uodate file * @param File $file * @return File */ public function updateFile(File $file) { return $this->update($file); } /** * @param string $user_id * @return Entity[] */ public function getFileGuidsFromUser(string $user_id) { $qb = $this->db->getQueryBuilder(); $qb->select('guid') ->from(self::TABLE_NAME) ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR))); return $this->findEntities($qb); } }