SearchController.php 1.2 KB

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