setModel($mediaFile); } private function queryBuilderGetLimit(Builder $queryBuilder, $limit = null) { if($limit) { return $queryBuilder->limit($limit)->get(); } return $queryBuilder->get(); } private function queryBuilderWhereCategory(Builder $queryBuilder, $category = '') { if($category == 'uncategorized') { $queryBuilder = $queryBuilder->uncategorized(); } else if(is_numeric($category)) { $queryBuilder = $queryBuilder->category($category); } return $queryBuilder; } /** * @param $id * @return \App\MediaFile|null */ public function getMedia($id) { return $this->findModel($id); } public function hasMedia($id) { return $this->hasModel($id); } /** * @param $fileName * @param $ext * @param $diskId * @param $mediaSourceId * @param $mimeType * @param null $userId * @param null $width * @param null $height * @param bool $isAppMedia * @param $size * @return MediaFile|\Illuminate\Database\Eloquent\Model|boolean */ public function addMedia($fileName, $ext, $diskId, $mediaSourceId, $size, $mimeType, $userId, $path = null, $width = null, $height = null, $isAppMedia = false) { $mediaFile = $this->createModel(); $mediaFile->fill([ 'path' => $path, 'file_name' => $fileName, 'ext' => $ext, 'disk_id' => $diskId, 'media_source_id' => $mediaSourceId, 'size' => $size, 'mime_type' => $mimeType, 'width' => $width, 'height' => $height, 'is_app_media' => $isAppMedia, 'user_id' => $userId, ]); $saved = $mediaFile->save(); return $saved ? $mediaFile : $saved; } /** * @param $fileName * @param $ext * @param $size * @param $mimeType * @param $userId * @param null $width * @param null $height * @return MediaFile|\Illuminate\Database\Eloquent\Model */ public function addAppMedia($fileName, $ext, $size, $mimeType, $userId, $path = null, $width = null, $height = null) { return $this->addMedia($fileName, $ext, 1, null, $size, $mimeType, $userId, $path, $width, $height, true); } /** * @param $fileName * @param $ext * @param $size * @param $mimeType * @param $userId * @param null $width * @param null $height * @return MediaFile|\Illuminate\Database\Eloquent\Model */ public function addUserMedia($fileName, $ext, $size, $mimeType, $userId, $path = null, $width = null, $height = null) { return $this->addMedia($fileName, $ext, 2, null, $size, $mimeType, $userId, $path, $width, $height); } /** * @param null $limit * @return MediaFile[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection */ public function getAppMedias($limit = null) { $queryBuilder = $this->getModel() ->isAppMedia() ->orderByDesc('id'); return $this->queryBuilderGetLimit($queryBuilder, $limit); } public function getAppMediasWithCategory($category, $limit = null) { $queryBuilder = $this->getModel() ->isAppMedia() ->orderByDesc('id'); $queryBuilder = $this->queryBuilderWhereCategory($queryBuilder, $category); return $this->queryBuilderGetLimit($queryBuilder, $limit); } /** * @param $lastQueryId * @param null $limit * @return MediaFile[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection */ public function getAppMediasWithLastQueryId($lastQueryId, $limit = null) { $queryBuilder = $this->getModel() ->isAppMedia() ->where('id', '<', $lastQueryId) ->orderByDesc('id'); return $this->queryBuilderGetLimit($queryBuilder, $limit); } /** * @param $lastQueryId * @param null $limit * @return MediaFile[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection */ public function getAppMediasWithLastQueryIdAndCategory($lastQueryId, $category, $limit = null) { $queryBuilder = $this->getModel() ->where('is_app_media', true) ->where('id', '<', $lastQueryId) ->orderByDesc('id'); $queryBuilder = $this->queryBuilderWhereCategory($queryBuilder, $category); return $this->queryBuilderGetLimit($queryBuilder, $limit); } /** * @param $userId * @param null $limit * @return Builder[]|\Illuminate\Database\Eloquent\Collection */ public function getUserMedias($userId, $limit = null) { $queryBuilder = $this->getModel() ->userMedia($userId) ->orderByDesc('id'); return $this->queryBuilderGetLimit($queryBuilder, $limit); } public function getUserMediasWithCategory($userId, $category, $limit = null) { $queryBuilder = $this->getModel() ->userMedia($userId) ->orderByDesc('id'); $queryBuilder = $this->queryBuilderWhereCategory($queryBuilder, $category); return $this->queryBuilderGetLimit($queryBuilder, $limit); } /** * @param $userId * @param $lastQueryId * @param null $limit * @return MediaFile[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection */ public function getUserMediasWithLastQueryId($userId, $lastQueryId, $limit = null) { $queryBuilder = $this->getModel() ->userMedia($userId) ->where('id', '<', $lastQueryId) ->orderByDesc('id'); return $this->queryBuilderGetLimit($queryBuilder, $limit); } public function getUserMediasWithLastQueryIdAndCategory($userId, $lastQueryId, $category, $limit = null) { $queryBuilder = $this->getModel() ->userMedia($userId) ->where('id', '<', $lastQueryId) ->orderByDesc('id'); $queryBuilder = $this->queryBuilderWhereCategory($queryBuilder, $category); return $this->queryBuilderGetLimit($queryBuilder, $limit); } public function getAppUncategorizedMediasCount() { return $this->getAppMediasWithCategory('uncategorized')->count(); } public function getUserUncategorizedMediasCount($userId) { return $this->getUserMediasWithCategory($userId, 'uncategorized')->count(); } public function getAppMediasCount() { return $this->getModel()->isAppMedia()->count(); } public function getUserMediasCount($userId) { return $this->getModel()->userMedia($userId)->count(); } }