belongsTo(Release::class, 'releases_id'); } /** * Get releasefiles row by id. * * * @param $id * @return \Illuminate\Database\Eloquent\Collection|static[] */ public static function getReleaseFiles($id) { return self::query()->where('releases_id', $id)->orderBy('name')->get(); } /** * @param $guid * @return \Illuminate\Database\Eloquent\Collection|static[] */ public static function getByGuid($guid) { return self::query() ->join('releases', 'releases.id', '=', 'release_files.releases_id') ->where('releases.guid', $guid) ->orderBy('release_files.name')->get(); } /** * Add new files for a release ID. * * * @param $id * @param $name * @param $size * @param $createdTime * @param $hasPassword * * @param string $hash * @param string $crc * @return int * @throws \Exception */ public static function addReleaseFiles($id, $name, $size, $createdTime, $hasPassword, $hash = '', $crc = ''): int { // Check if we already have this data in table $duplicateCheck = self::query()->where('releases_id', $id)->where('name', $name)->first(); // Check if the release exists in releases table to prevent foreign key error $releaseCheck = Release::query()->where('id', $id)->first(); if (is_int($createdTime)) { if ($createdTime === 0) { $adjustedCreatedTime = now()->format('Y-m-d H:i:s'); } else { $adjustedCreatedTime = Carbon::createFromTimestamp($createdTime)->format('Y-m-d H:i:s'); } } else { $adjustedCreatedTime = $createdTime; } if ($duplicateCheck === null && $releaseCheck !== null) { try { $insert = self::insertOrIgnore([ 'releases_id' => $id, 'name' => $name, 'size' => $size, 'created_at' => $adjustedCreatedTime, 'updated_at' => now()->timestamp, 'passworded' => $hasPassword, 'crc32' => $crc, ]); } catch (\PDOException $e) { Log::alert($e->getMessage()); } if (\strlen($hash) === 32) { ParHash::insertOrIgnore(['releases_id' => $id, 'hash' => $hash]); } if (config('nntmux.elasticsearch_enabled') === true) { $new = Release::query() ->where('releases.id', $id) ->leftJoin('release_files as rf', 'releases.id', '=', 'rf.releases_id') ->select(['releases.id', 'releases.name', 'releases.searchname', 'releases.fromname', DB::raw('IFNULL(GROUP_CONCAT(rf.name SEPARATOR " "),"") filename')]) ->groupBy('releases.id') ->first(); if ($new !== null) { $data = [ 'body' => [ 'doc' => [ 'filename' => ! empty($new->filename) ? $new->filename : '', ], ], 'index' => 'releases', 'type' => 'releases', 'id' => $id, ]; \Elasticsearch::update($data); } } else { (new SphinxSearch())->updateRelease($id); } } return $insert ?? 0; } }