SearchController.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Hashtag;
  4. use App\Profile;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Cache;
  7. class SearchController extends Controller
  8. {
  9. public function searchAPI(Request $request, $tag)
  10. {
  11. $res = Cache::remember('api:search:tag:'.$tag, 1440, function () use ($tag) {
  12. $res = Hashtag::where('slug', 'like', '%'.$tag.'%')->get();
  13. $tags = $res->map(function ($item, $key) {
  14. return [
  15. 'count' => $item->posts()->count(),
  16. 'url' => $item->url(),
  17. 'type' => 'hashtag',
  18. 'value' => $item->name,
  19. 'tokens' => explode('-', $item->name),
  20. 'name' => null,
  21. ];
  22. });
  23. $res = Profile::where('username', 'like', '%'.$tag.'%')->get();
  24. $profiles = $res->map(function ($item, $key) {
  25. return [
  26. 'count' => 0,
  27. 'url' => $item->url(),
  28. 'type' => 'profile',
  29. 'value' => $item->username,
  30. 'tokens' => [$item->username],
  31. 'name' => $item->name,
  32. ];
  33. });
  34. $tags = $tags->push($profiles[0]);
  35. return $tags;
  36. });
  37. return response()->json($res);
  38. }
  39. }