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) {