CoolFace
Apppublic

kenken999/php

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
ArticleController.php91 linesDownload Raw Back to Controllers
1<?php2 3namespace App\Http\Controllers;4 5use App\Http\Requests\Article\DestroyRequest;6use App\Http\Requests\Article\FeedRequest;7use App\Http\Requests\Article\IndexRequest;8use App\Http\Requests\Article\StoreRequest;9use App\Http\Requests\Article\UpdateRequest;10use App\Http\Resources\ArticleCollection;11use App\Http\Resources\ArticleResource;12use App\Models\Article;13use App\Models\User;14use App\Services\ArticleService;15 16class ArticleController extends Controller17{18    protected Article $article;19    protected ArticleService $articleService;20    protected User $user;21 22    public function __construct(Article $article, ArticleService $articleService, User $user)23    {24        $this->article = $article;25        $this->articleService = $articleService;26        $this->user = $user;27    }28 29    public function index(IndexRequest $request): ArticleCollection30    {31        return new ArticleCollection($this->article->getFiltered($request->validated()));32    }33 34    public function feed(FeedRequest $request): ArticleCollection35    {36        return new ArticleCollection($this->article->getFiltered($request->validated()));37    }38 39    public function show(Article $article): ArticleResource40    {41        return $this->articleResponse($article);42    }43 44    public function store(StoreRequest $request): ArticleResource45    {46        $article = auth()->user()->articles()->create($request->validated()['article']);47 48        $this->syncTags($article);49 50        return $this->articleResponse($article);51    }52 53    public function update(Article $article, UpdateRequest $request): ArticleResource54    {55        $article->update($request->validated()['article']);56 57        $this->syncTags($article);58 59        return $this->articleResponse($article);60    }61 62    public function destroy(Article $article, DestroyRequest $request): void63    {64        $article->delete();65    }66 67    public function favorite(Article $article): ArticleResource68    {69        $article->users()->attach(auth()->id());70 71        return $this->articleResponse($article);72    }73 74    public function unfavorite(Article $article): ArticleResource75    {76        $article->users()->detach(auth()->id());77 78        return $this->articleResponse($article);79    }80    81    protected function syncTags(Article $article): void82    {83        $this->articleService->syncTags($article, $this->request->validated()['article']['tagList'] ?? []);84    }85 86    protected function articleResponse(Article $article): ArticleResource87    {88        return new ArticleResource($article->load('user', 'users', 'tags', 'user.followers'));89    }90}91