Skip to content

Commit 0cd3f10

Browse files
committed
feat(动态): 增加动态话题列表返回关注状态功能
1 parent 9cc3d91 commit 0cd3f10

File tree

4 files changed

+20
-75
lines changed

4 files changed

+20
-75
lines changed

app/API2/Controllers/Feed/Topic.php

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
namespace Zhiyi\Plus\API2\Controllers\Feed;
2222

23+
use Illuminate\Http\Request;
2324
use Illuminate\Http\Response;
2425
use Illuminate\Support\Carbon;
2526
use function Zhiyi\Plus\setting;
@@ -35,7 +36,6 @@
3536
use Zhiyi\Plus\Models\FeedTopicUserLink as FeedTopicUserLinkModel;
3637
use Zhiyi\Plus\API2\Requests\Feed\CreateTopic as CreateTopicRequest;
3738
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
38-
use Zhiyi\Plus\API2\Resources\Feed\TopicCollection as TopicCollectionResource;
3939

4040
class Topic extends Controller
4141
{
@@ -55,8 +55,9 @@ public function __construct()
5555
->only(['create', 'update']);
5656
}
5757

58-
public function listTopicsOnlyHot(FeedTopicModel $model): JsonResponse
58+
public function listTopicsOnlyHot(Request $request, FeedTopicModel $model): JsonResponse
5959
{
60+
$user = $request->user('api');
6061
$topics = $model
6162
->query()
6263
->whereNotNull('hot_at')
@@ -75,8 +76,14 @@ public function listTopicsOnlyHot(FeedTopicModel $model): JsonResponse
7576
->all()
7677
)->values();
7778
}
79+
if ($user) {
80+
dd($user);
81+
$result->load(['users' => function ($query) use ($user) {
82+
return $query->wherePivot('user_id', $user->id);
83+
}]);
84+
}
7885

79-
return (new TopicCollectionResource($topics))
86+
return TopicResource::collection($result)
8087
->response()
8188
->setStatusCode(Response::HTTP_OK /* 200 */);
8289
}
@@ -91,8 +98,9 @@ public function listTopicsOnlyHot(FeedTopicModel $model): JsonResponse
9198
public function index(IndexRequest $request, FeedTopicModel $model): JsonResponse
9299
{
93100
if ($request->query('only') === 'hot') {
94-
return $this->listTopicsOnlyHot($model);
101+
return $this->listTopicsOnlyHot($request, $model);
95102
}
103+
$user = $request->user('api');
96104

97105
// Get query data `id` order direction.
98106
// Value: `asc` or `desc`
@@ -124,15 +132,17 @@ public function index(IndexRequest $request, FeedTopicModel $model): JsonRespons
124132
// the `$direction` enum `asc` or `desc`.
125133
->orderBy('id', $direction)
126134

127-
// Set only query table column name.
128-
->select('id', 'name', 'logo', Model::CREATED_AT)
129-
130135
// Run the SQL query, return a collection.
131136
// instanceof \Illuminate\Support\Collection
132137
->get();
138+
if ($user) {
139+
$result->load(['users' => function ($query) use ($user) {
140+
return $query->wherePivot('user_id', $user->id);
141+
}]);
142+
}
133143

134144
// Create the action response.
135-
$response = (new TopicCollectionResource($result))
145+
$response = TopicResource::collection($result)
136146
->response()
137147
->setStatusCode(Response::HTTP_OK /* 200 */);
138148

app/API2/Resources/Feed/Topic.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ public function toArray($request): array
4545
'feeds_count' => $this->feeds_count,
4646
'followers_count' => $this->followers_count,
4747
'has_followed' => $this->when($user, function () use ($user) {
48-
$link = $this->users()->newPivotStatementForId($user->id)->first();
49-
48+
$link = $this->users->firstWhere('id', $user->id)->pivot ?? null;
5049
if ($link && $link->following_at) {
5150
return true;
5251
}

app/API2/Resources/Feed/TopicCollection.php

Lines changed: 0 additions & 64 deletions
This file was deleted.

app/Models/FeedTopic.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public function users(): BelongsToMany
7878

7979
return $this
8080
->belongsToMany(User::class, $table, 'topic_id', 'user_id')
81-
->withPivot('index', Model::CREATED_AT)
81+
->withPivot('index', Model::CREATED_AT, 'following_at')
8282
->using(FeedTopicUserLink::class);
8383
}
8484

0 commit comments

Comments
 (0)