From 52a3866bcf1c1b02dce693794e7c835431a36734 Mon Sep 17 00:00:00 2001 From: kyoya0819 <kyoya0819@gmail.com> Date: Fri, 30 Aug 2024 07:44:06 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E5=86=85=E9=83=A8=E4=BC=9A=E7=A4=BEID?= =?UTF-8?q?=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=E3=80=81PR=20TIMES?= =?UTF-8?q?=E3=81=AE=E4=BC=9A=E7=A4=BEID=E3=82=92=E8=BF=94=E5=8D=B4?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/Http/Controllers/Api/Company/ListController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/app/Http/Controllers/Api/Company/ListController.php b/backend/app/Http/Controllers/Api/Company/ListController.php index edcab12..9c8bf12 100644 --- a/backend/app/Http/Controllers/Api/Company/ListController.php +++ b/backend/app/Http/Controllers/Api/Company/ListController.php @@ -30,7 +30,7 @@ public function __invoke(Request $request): JsonResponse $companies->map(function ($company) { /* @var Company $company */ return [ - "id" => $company->id, + "id" => $company->company_id, "name" => $company->name ]; })->toArray() From 8602c7a3d80e5457da1e0100869a472c4cf1c901 Mon Sep 17 00:00:00 2001 From: kyoya0819 <kyoya0819@gmail.com> Date: Fri, 30 Aug 2024 07:44:39 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BC=9A=E7=A4=BEID=E3=81=A7=E3=83=97?= =?UTF-8?q?=E3=83=AC=E3=82=B9=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9=E3=82=92?= =?UTF-8?q?=E7=B5=9E=E3=82=8A=E8=BE=BC=E3=82=80API=E3=81=AE=E4=BD=9C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/PressRelease/CompanyController.php | 53 +++++++++++++++++++ .../PressRelease/ListFilterByCompanyId.php | 25 +++++++++ backend/routes/api.php | 1 + 3 files changed, 79 insertions(+) create mode 100644 backend/app/Http/Controllers/Api/PressRelease/CompanyController.php create mode 100644 backend/app/UseCases/PressRelease/ListFilterByCompanyId.php diff --git a/backend/app/Http/Controllers/Api/PressRelease/CompanyController.php b/backend/app/Http/Controllers/Api/PressRelease/CompanyController.php new file mode 100644 index 0000000..db01398 --- /dev/null +++ b/backend/app/Http/Controllers/Api/PressRelease/CompanyController.php @@ -0,0 +1,53 @@ +<?php + +namespace App\Http\Controllers\Api\PressRelease; + +use App\Http\Controllers\Controller; +use App\Models\PressRelease; +use App\UseCases\PressRelease\ListFilterByCompanyId as PressReleaseListFilterByCompanyId; +use Exception; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; + +class CompanyController extends Controller +{ + const PRESS_RELEASE_COUNT = 10; + + /** + * @param Request $request + * @return JsonResponse + * @throws Exception + */ + public function __invoke(Request $request): JsonResponse + { + $company_ids_raw = $request->query("company_ids"); + if ($company_ids_raw === null) + return response()->json(); + + $company_ids = is_array($company_ids_raw) + ? array_map(fn ($company_id) => (int) $company_id, $company_ids_raw) + : [(int) $company_ids_raw]; + + $releases = PressReleaseListFilterByCompanyId::run($company_ids, self::PRESS_RELEASE_COUNT); + + return response()->json( + $releases->map(function ($press_release) { + /* @var PressRelease $press_release */ + + return [ + "title" => $press_release->title, + "summary" => $press_release->summary, + "company_name" => $press_release->company->name, + "url" => route( + "press-release.redirect", + [ + "company_id" => $press_release->company_id, + "release_id" => $press_release->release_id + ] + ) + ]; + }) + ->toArray() + ); + } +} diff --git a/backend/app/UseCases/PressRelease/ListFilterByCompanyId.php b/backend/app/UseCases/PressRelease/ListFilterByCompanyId.php new file mode 100644 index 0000000..41b7415 --- /dev/null +++ b/backend/app/UseCases/PressRelease/ListFilterByCompanyId.php @@ -0,0 +1,25 @@ +<?php + +namespace App\UseCases\PressRelease; + +use App\Models\PressRelease; +use Illuminate\Database\Eloquent\Collection; + +class ListFilterByCompanyId +{ + + /** + * @param array $company_ids + * @param int $take + * @return Collection<int, PressRelease> + */ + public static function run( + array $company_ids, + int $take = 10 + ): Collection + { + return PressRelease::with("company") + ->whereIn("company_id", $company_ids) + ->inRandomOrder()->take($take)->get(); + } +} \ No newline at end of file diff --git a/backend/routes/api.php b/backend/routes/api.php index 6070154..4c41134 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -13,6 +13,7 @@ Route::middleware("auth:sanctum")->group(function () { Route::get("/press-release/recommend", PressRelease\RecommendController::class); + Route::get("/press-release/company", PressRelease\CompanyController::class); Route::get("/company/list", Company\ListController::class); }); \ No newline at end of file From 94d3f6c7c8c392b85b73bb4d4a37d96060275f34 Mon Sep 17 00:00:00 2001 From: kyoya0819 <kyoya0819@gmail.com> Date: Fri, 30 Aug 2024 07:45:04 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E3=83=AC=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=89API=E3=81=8C=E4=BC=9A=E7=A4=BE=E5=90=8D=E3=82=92?= =?UTF-8?q?=E8=BF=94=E3=81=99=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Http/Controllers/Api/PressRelease/RecommendController.php | 1 + backend/app/UseCases/PressRelease/ListFilterByViewHistory.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/app/Http/Controllers/Api/PressRelease/RecommendController.php b/backend/app/Http/Controllers/Api/PressRelease/RecommendController.php index 672e2c8..5a033ee 100644 --- a/backend/app/Http/Controllers/Api/PressRelease/RecommendController.php +++ b/backend/app/Http/Controllers/Api/PressRelease/RecommendController.php @@ -43,6 +43,7 @@ public function __invoke(Request $request): JsonResponse return [ "title" => $press_release->title, "summary" => $press_release->summary, + "company_name" => $press_release->company->name, "url" => route( "press-release.redirect", [ diff --git a/backend/app/UseCases/PressRelease/ListFilterByViewHistory.php b/backend/app/UseCases/PressRelease/ListFilterByViewHistory.php index b661893..8abed58 100644 --- a/backend/app/UseCases/PressRelease/ListFilterByViewHistory.php +++ b/backend/app/UseCases/PressRelease/ListFilterByViewHistory.php @@ -20,7 +20,7 @@ public static function run( int $take = 20 ): Collection { - return PressRelease::when($mode !== "neutral", function ($query) use ($user_id, $mode) { + return PressRelease::with("company")->when($mode !== "neutral", function ($query) use ($user_id, $mode) { $query->whereHas("keywords.view_histories", function ($query) use ($user_id, $mode) { $query->where("user_id", $user_id) ->when($mode === "love", function ($query) {