瀏覽代碼

Add /api/v1/accounts/search endpoint

Daniel Supernault 5 年之前
父節點
當前提交
b1fccf6d82
共有 2 個文件被更改,包括 37 次插入0 次删除
  1. 35 0
      app/Http/Controllers/Api/ApiV1Controller.php
  2. 2 0
      routes/web.php

+ 35 - 0
app/Http/Controllers/Api/ApiV1Controller.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Api;
 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
 use Illuminate\Support\Str;
+use App\Util\ActivityPub\Helpers;
 use App\Jobs\StatusPipeline\StatusDelete;
 use App\Jobs\FollowPipeline\FollowPipeline;
 use Laravel\Passport\Passport;
@@ -468,6 +469,40 @@ class ApiV1Controller extends Controller
         return response()->json($res);
     }
 
+    /**
+     * GET /api/v1/accounts/search
+     *
+     *
+     *
+     * @return \App\Transformer\Api\AccountTransformer
+     */
+    public function accountSearch(Request $request)
+    {
+        abort_if(!$request->user(), 403);
+
+        $this->validate($request, [
+            'q'         => 'required|string|min:1|max:255',
+            'limit'     => 'nullable|integer|min:1|max:40',
+            'resolve'   => 'nullable'
+        ]);
+
+        $user = $request->user();
+        $query = $request->input('q');
+        $limit = $request->input('limit') ?? 20;
+        $resolve = (bool) $request->input('resolve', false);
+        $q = '%' . $query . '%';
+
+        $profiles = Profile::whereNull('status')
+            ->where('username', 'like', $q)
+            ->orWhere('name', 'like', $q)
+            ->limit($limit)
+            ->get();
+        
+        $resource = new Fractal\Resource\Collection($profiles, new AccountTransformer());
+        $res = $this->fractal->createData($resource)->toArray();
+        return response()->json($res, 200, [], JSON_PRETTY_PRINT);
+    }
+
     public function statusById(Request $request, $id)
     {
         $status = Status::whereVisibility('public')->findOrFail($id);

+ 2 - 0
routes/web.php

@@ -80,6 +80,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
             Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials')->middleware('auth:api');
             Route::patch('accounts/update_credentials', 'Api\ApiV1Controller@accountUpdateCredentials')->middleware('auth:api');
             Route::get('accounts/relationships', 'Api\ApiV1Controller@accountRelationshipsById')->middleware('auth:api');
+            Route::get('accounts/search', 'Api\ApiV1Controller@accountSearch')->middleware('auth:api');
             Route::get('accounts/{id}/statuses', 'Api\ApiV1Controller@accountStatusesById')->middleware('auth:api');
             Route::get('accounts/{id}/following', 'Api\ApiV1Controller@accountFollowingById')->middleware('auth:api');
             Route::get('accounts/{id}/followers', 'Api\ApiV1Controller@accountFollowersById')->middleware('auth:api');
@@ -116,6 +117,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
             Route::group(['prefix' => 'v1'], function() {
                 Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials');
                 Route::get('accounts/relationships', 'Api\ApiV1Controller@accountRelationshipsById');
+                Route::get('accounts/search', 'Api\ApiV1Controller@accountSearch');
                 Route::get('accounts/{id}/statuses', 'PublicApiController@accountStatuses');
                 Route::get('accounts/{id}/following', 'PublicApiController@accountFollowing');
                 Route::get('accounts/{id}/followers', 'PublicApiController@accountFollowers');