ArticlesController.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace App\Http\Controllers\Api\CMS;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Enums\ModelStatusEnum;
  5. use App\Repositories\Models\CMS\Article;
  6. use App\Repositories\Models\CMS\Category;
  7. use App\Repositories\Presenters\CMS\ArticlePresenter;
  8. use Carbon\Carbon;
  9. use Illuminate\Http\Request;
  10. use Jiannei\Response\Laravel\Support\Facades\Response;
  11. use App\Contracts\Repositories\CMS\ArticleRepository;
  12. use App\Repositories\Validators\CMS\ArticleValidator;
  13. /**
  14. * Class ArticlesController.
  15. *
  16. * @package namespace App\Http\Controllers\CMS;
  17. */
  18. class ArticlesController extends Controller
  19. {
  20. /**
  21. * @var ArticleRepository
  22. */
  23. protected $repository;
  24. /**
  25. * @var ArticleValidator
  26. */
  27. protected $validator;
  28. /**
  29. * ArticlesController constructor.
  30. *
  31. * @param ArticleRepository $repository
  32. * @param ArticleValidator $validator
  33. */
  34. public function __construct(ArticleRepository $repository, ArticleValidator $validator)
  35. {
  36. $this->repository = $repository;
  37. $this->validator = $validator;
  38. }
  39. public function index()
  40. {
  41. $courses = $this->repository->paginate(request('per_page', self::PAGE_NUM));
  42. return Response::success($courses);
  43. }
  44. public function show($id)
  45. {
  46. $information = $this->repository->find($id);
  47. Article::query()->where('id', $information['id'])->increment('view_count');
  48. $last = Article::query()->where('category_id', $information['category_id'])->where('published_at', '<=', Carbon::now())->where('status', ModelStatusEnum::OK)->where('id', '<', $information['id'])->orderByDesc('sort')->latest('id')->select(['id', 'title'])->first();
  49. $next = Article::query()->where('category_id', $information['category_id'])->where('published_at', '<=', Carbon::now())->where('status', ModelStatusEnum::OK)->where('id', '>', $information['id'])->orderByDesc('sort')->oldest('id')->select(['id', 'title'])->first();
  50. return Response::success(compact('information', 'last', 'next'));
  51. }
  52. public function lists(Request $request)
  53. {
  54. $lists = Article::query()->where('category_id', $request->get('category_id'))->orderByDesc('published_at')->limit(6)->get();
  55. $lists = $this->repository->setPresenter(ArticlePresenter::class)->parserResult($lists);
  56. return Response::success($lists);
  57. }
  58. public function article(Request $request)
  59. {
  60. $id = $request->get('category_id');
  61. $category = Category::query()->where('id', $id)->where('status', ModelStatusEnum::OK)->first();
  62. if (!$category) {
  63. return Response::fail('分类id不能为空!');
  64. }
  65. if ($category->is_single == 0) {
  66. $article = Article::query()->where('category_id', $category->id)->where('published_at', '<=', Carbon::now())->where('status', ModelStatusEnum::OK)->orderByDesc('sort')->orderByDesc('published_at')->orderByDesc('id')->first();
  67. if (!$article) {
  68. return Response::success(null);
  69. }
  70. return Response::success($this->repository->parserResult($article));
  71. }
  72. $articles = Article::query()->where('category_id', $category->id)->where('published_at', '<=', Carbon::now())->where('status', ModelStatusEnum::OK)->orderByDesc('sort')->orderByDesc('published_at')->orderByDesc('id')->paginate(request('per_page', self::PAGE_NUM));
  73. return Response::success($this->repository->parserResult($articles));
  74. }
  75. }