From c18b740f4603666b63f7ef431214ef8a3ef70346 Mon Sep 17 00:00:00 2001 From: James Collins Date: Sun, 12 Mar 2023 15:39:43 +1000 Subject: [PATCH] cleanup --- app/Conductors/SubscriptionConductor.php | 27 +++ app/Filters/SubscriptionFilter.php | 30 +++ app/Http/Controllers/Api/EventController.php | 58 +++--- app/Http/Controllers/Api/MediaController.php | 177 +++++++++--------- app/Http/Controllers/Api/PostController.php | 69 ++++--- .../Api/SubscriptionController.php | 84 +++++---- app/Http/Controllers/Api/UserController.php | 41 ++-- app/Http/Requests/BaseRequest.php | 8 +- app/Http/Requests/EventRequest.php | 22 +-- app/Http/Requests/MediaRequest.php | 8 + app/Http/Requests/MediaStoreRequest.php | 20 -- app/Http/Requests/MediaUpdateRequest.php | 20 -- app/Http/Requests/PostRequest.php | 42 +++++ app/Http/Requests/PostStoreRequest.php | 23 --- app/Http/Requests/PostUpdateRequest.php | 28 --- app/Http/Requests/SubscriptionRequest.php | 14 +- 16 files changed, 358 insertions(+), 313 deletions(-) create mode 100644 app/Filters/SubscriptionFilter.php create mode 100644 app/Http/Requests/MediaRequest.php delete mode 100644 app/Http/Requests/MediaStoreRequest.php delete mode 100644 app/Http/Requests/MediaUpdateRequest.php create mode 100644 app/Http/Requests/PostRequest.php delete mode 100644 app/Http/Requests/PostStoreRequest.php delete mode 100644 app/Http/Requests/PostUpdateRequest.php diff --git a/app/Conductors/SubscriptionConductor.php b/app/Conductors/SubscriptionConductor.php index d121a4f..3f447d2 100644 --- a/app/Conductors/SubscriptionConductor.php +++ b/app/Conductors/SubscriptionConductor.php @@ -2,6 +2,8 @@ namespace App\Conductors; +use Illuminate\Database\Eloquent\Model; + class SubscriptionConductor extends Conductor { /** @@ -9,4 +11,29 @@ class SubscriptionConductor extends Conductor * @var string */ protected $class = '\App\Models\Subscription'; + + + /** + * Return if the current model is updatable. + * + * @param Model $model The model. + * @return boolean Allow updating model. + */ + public static function updatable(Model $model) + { + $user = auth()->user(); + return ($user !== null && ((strcasecmp($model->email, $user->email) === 0 && $user->email_verified_at !== null) || $user->has_permission('admin/subscriptions') === true)); + } + + /** + * Return if the current model is deletable. + * + * @param Model $model The model. + * @return boolean Allow deleting model. + */ + public static function deletable(Model $model) + { + $user = auth()->user(); + return ($user !== null && ((strcasecmp($model->email, $user->email) === 0 && $user->email_verified_at !== null) || $user->has_permission('admin/subscriptions') === true)); + } } diff --git a/app/Filters/SubscriptionFilter.php b/app/Filters/SubscriptionFilter.php new file mode 100644 index 0000000..04d0d8d --- /dev/null +++ b/app/Filters/SubscriptionFilter.php @@ -0,0 +1,30 @@ +hasPermission('admin/users') !== true) { + return ['id', 'email', 'confirmed_at']; + } + } +} diff --git a/app/Http/Controllers/Api/EventController.php b/app/Http/Controllers/Api/EventController.php index fbc9364..2f4febb 100644 --- a/app/Http/Controllers/Api/EventController.php +++ b/app/Http/Controllers/Api/EventController.php @@ -3,9 +3,9 @@ namespace App\Http\Controllers\Api; use App\Enum\HttpResponseCodes; -use App\Http\Requests\EventRequest; use App\Models\Event; use App\Conductors\EventConductor; +use App\Http\Requests\EventRequest; use Illuminate\Http\Request; class EventController extends ApiController @@ -22,7 +22,7 @@ class EventController extends ApiController /** * Display a listing of the resource. * - * @param Request $request The request. + * @param \Illuminate\Http\Request $request The endpoint request. * @return \Illuminate\Http\Response */ public function index(Request $request) @@ -36,14 +36,30 @@ class EventController extends ApiController } /** - * Store a newly created resource in storage. + * Display the specified resource. * - * @param Request $request The request. + * @param \Illuminate\Http\Request $request The endpoint request. + * @param \App\Models\Event $event The specified event. * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function show(Request $request, Event $event) { - if(EventConductor::creatable()) { + if (EventConductor::viewable($event) === true) { + return $this->respondAsResource(EventConductor::model($request, $event)); + } + + return $this->respondForbidden(); + } + + /** + * Store a newly created resource in storage. + * + * @param \App\Http\Requests\EventRequest $request The request. + * @return \Illuminate\Http\Response + */ + public function store(EventRequest $request) + { + if (EventConductor::creatable() === true) { $event = Event::create($request->all()); return $this->respondAsResource( EventConductor::model($request, $event), @@ -56,38 +72,22 @@ class EventController extends ApiController } /** - * Display the specified resource. + * Update the specified resource in storage. * - * @param Request $request The request. - * @param \App\Models\Event $event The specified event. + * @param \App\Http\Requests\EventRequest $request The endpoint request. + * @param \App\Models\Event $event The specified event. * @return \Illuminate\Http\Response */ - public function show(Request $request, Event $event) + public function update(EventRequest $request, Event $event) { - if(EventConductor::viewable($event)) { + if (EventConductor::updatable($event) === true) { + $event->update($request->all()); return $this->respondAsResource(EventConductor::model($request, $event)); } return $this->respondForbidden(); } - /** - * Update the specified resource in storage. - * - * @param Request $request The request. - * @param \App\Models\Event $event The specified event. - * @return \Illuminate\Http\Response - */ - public function update(Request $request, Event $event) - { - if(EventConductor::updatable($event)) { - $event->update($request->all()); - return $this->respondAsResource(EventConductor::model($request, $event)); - } else { - return $this->respondForbidden(); - } - } - /** * Remove the specified resource from storage. * @@ -96,7 +96,7 @@ class EventController extends ApiController */ public function destroy(Event $event) { - if(EventConductor::destroyable($event)) { + if (EventConductor::destroyable($event) === true) { $event->delete(); return $this->respondNoContent(); } else { diff --git a/app/Http/Controllers/Api/MediaController.php b/app/Http/Controllers/Api/MediaController.php index 9fdf11fa..5fde469 100644 --- a/app/Http/Controllers/Api/MediaController.php +++ b/app/Http/Controllers/Api/MediaController.php @@ -2,14 +2,12 @@ namespace App\Http\Controllers\Api; +use App\Conductors\MediaConductor; use App\Enum\HttpResponseCodes; -use App\Filters\MediaFilter; -use App\Http\Requests\MediaStoreRequest; -use App\Http\Requests\MediaUpdateRequest; +use App\Http\Requests\MediaRequest; use App\Models\Media; use Illuminate\Http\Request; use Illuminate\Support\Carbon; -use Illuminate\Support\Facades\Storage; use Laravel\Sanctum\PersonalAccessToken; class MediaController extends ApiController @@ -26,99 +24,67 @@ class MediaController extends ApiController /** * Display a listing of the resource. * - * @param \App\Filters\MediaFilter $filter Created filter object. + * @param \Illuminate\Http\Request $request The endpoint request. * @return \Illuminate\Http\Response */ - public function index(MediaFilter $filter) + public function index(Request $request) { + list($collection, $total) = MediaConductor::request($request); + return $this->respondAsResource( - $filter->filter(), - ['total' => $filter->foundTotal()] + $collection, + ['total' => $total] ); } /** * Display the specified resource. * - * @param MediaFilter $filter The request filter. - * @param Media $medium The request media. + * @param \Illuminate\Http\Request $request The endpoint request. + * @param \App\Models\Media $medium The request media. * @return \Illuminate\Http\Response */ - public function show(MediaFilter $filter, Media $medium) + public function show(Request $request, Media $medium) { - return $this->respondAsResource($filter->filter($medium)); + if (MediaConductor::viewable($medium) === true) { + return $this->respondAsResource(MediaConductor::model($request, $medium)); + } + + return $this->respondForbidden(); } /** * Store a new media resource * - * @param MediaStoreRequest $request The uploaded media. + * @param \App\Http\Requests\MediaRequest $request The uploaded media. * @return \Illuminate\Http\Response */ - public function store(MediaStoreRequest $request) + public function store(MediaRequest $request) { - $file = $request->file('file'); - if ($file === null) { - return $this->respondWithErrors(['file' => 'The browser did not upload the file correctly to the server.']); - } - - if ($file->isValid() !== true) { - switch ($file->getError()) { - case UPLOAD_ERR_INI_SIZE: - case UPLOAD_ERR_FORM_SIZE: - return $this->respondTooLarge(); - case UPLOAD_ERR_PARTIAL: - return $this->respondWithErrors(['file' => 'The file upload was interrupted.']); - default: - return $this->respondWithErrors(['file' => 'An error occurred uploading the file to the server.']); + if (MediaConductor::creatable() === true) { + $file = $request->file('file'); + if ($file === null) { + return $this->respondWithErrors(['file' => 'The browser did not upload the file correctly to the server.']); } - } - if ($file->getSize() > Media::maxUploadSize()) { - return $this->respondTooLarge(); - } + if ($file->isValid() !== true) { + switch ($file->getError()) { + case UPLOAD_ERR_INI_SIZE: + case UPLOAD_ERR_FORM_SIZE: + return $this->respondTooLarge(); + case UPLOAD_ERR_PARTIAL: + return $this->respondWithErrors(['file' => 'The file upload was interrupted.']); + default: + return $this->respondWithErrors(['file' => 'An error occurred uploading the file to the server.']); + } + } - $title = $file->getClientOriginalName(); - $mime = $file->getMimeType(); - $fileInfo = Media::store($file, empty($request->input('permission'))); - if ($fileInfo === null) { - return $this->respondWithErrors( - ['file' => 'The file could not be stored on the server'], - HttpResponseCodes::HTTP_INTERNAL_SERVER_ERROR - ); - } - - $request->merge([ - 'title' => $title, - 'mime' => $mime, - 'name' => $fileInfo['name'], - 'size' => filesize($fileInfo['path']) - ]); - - $media = $request->user()->media()->create($request->all()); - return $this->respondAsResource((new MediaFilter($request))->filter($media)); - } - - /** - * Update the media resource in storage. - * - * @param MediaUpdateRequest $request The update request. - * @param \App\Models\Media $medium The specified media. - * @return \Illuminate\Http\Response - */ - public function update(MediaUpdateRequest $request, Media $medium) - { - if ((new MediaFilter($request))->filter($medium) === null) { - return $this->respondNotFound(); - } - - $file = $request->file('file'); - if ($file !== null) { if ($file->getSize() > Media::maxUploadSize()) { return $this->respondTooLarge(); } - $oldPath = $medium->path(); + $title = $file->getClientOriginalName(); + $mime = $file->getMimeType(); $fileInfo = Media::store($file, empty($request->input('permission'))); if ($fileInfo === null) { return $this->respondWithErrors( @@ -127,34 +93,77 @@ class MediaController extends ApiController ); } - if (file_exists($oldPath) === true) { - unlink($oldPath); - } - $request->merge([ - 'title' => $file->getClientOriginalName(), - 'mime' => $file->getMimeType(), + 'title' => $title, + 'mime' => $mime, 'name' => $fileInfo['name'], 'size' => filesize($fileInfo['path']) ]); + + $media = $request->user()->media()->create($request->all()); + return $this->respondAsResource( + MediaConductor::model($request, $media), + null, + HttpResponseCodes::HTTP_CREATED + ); }//end if - $medium->update($request->all()); - return $this->respondWithTransformer($file); + return $this->respondForbidden(); } + /** + * Update the media resource in storage. + * + * @param \App\Http\Requests\MediaRequest $request The update request. + * @param \App\Models\Media $medium The specified media. + * @return \Illuminate\Http\Response + */ + public function update(MediaRequest $request, Media $medium) + { + if (MediaConductor::updatable($medium) === true) { + $file = $request->file('file'); + if ($file !== null) { + if ($file->getSize() > Media::maxUploadSize()) { + return $this->respondTooLarge(); + } + $oldPath = $medium->path(); + $fileInfo = Media::store($file, empty($request->input('permission'))); + if ($fileInfo === null) { + return $this->respondWithErrors( + ['file' => 'The file could not be stored on the server'], + HttpResponseCodes::HTTP_INTERNAL_SERVER_ERROR + ); + } + + if (file_exists($oldPath) === true) { + unlink($oldPath); + } + + $request->merge([ + 'title' => $file->getClientOriginalName(), + 'mime' => $file->getMimeType(), + 'name' => $fileInfo['name'], + 'size' => filesize($fileInfo['path']) + ]); + }//end if + + $medium->update($request->all()); + return $this->respondAsResource(MediaConductor::model($request, $medium)); + }//end if + + return $this->respondForbidden(); + } /** * Remove the specified resource from storage. * - * @param Request $request Request instance. - * @param \App\Models\Media $medium Specified media file. + * @param \App\Models\Media $medium Specified media file. * @return \Illuminate\Http\Response */ - public function destroy(Request $request, Media $medium) + public function destroy(Media $medium) { - if ((new MediaFilter($request))->filter($medium) !== null) { + if (MediaConductor::destroyable($medium) === true) { if (file_exists($medium->path()) === true) { unlink($medium->path()); } @@ -163,14 +172,14 @@ class MediaController extends ApiController return $this->respondNoContent(); } - return $this->respondNotFound(); + return $this->respondForbidden(); } /** * Display the specified resource. * - * @param Request $request Request instance. - * @param \App\Models\Media $medium Specified media. + * @param \Illuminate\Http\Request $request The endpoint request. + * @param \App\Models\Media $medium Specified media. * @return \Illuminate\Http\Response */ public function download(Request $request, Media $medium) diff --git a/app/Http/Controllers/Api/PostController.php b/app/Http/Controllers/Api/PostController.php index 4f092c5..717bfab 100644 --- a/app/Http/Controllers/Api/PostController.php +++ b/app/Http/Controllers/Api/PostController.php @@ -2,10 +2,9 @@ namespace App\Http\Controllers\Api; +use App\Conductors\PostConductor; use App\Enum\HttpResponseCodes; -use App\Filters\PostFilter; -use App\Http\Requests\PostStoreRequest; -use App\Http\Requests\PostUpdateRequest; +use App\Http\Requests\PostRequest; use App\Models\Post; use Illuminate\Http\Request; @@ -27,56 +26,70 @@ class PostController extends ApiController /** * Display a listing of the resource. * - * @param \App\Filters\PostFilter $filter Post filter request. + * @param \Illuminate\Http\Request $request The endpoint request. * @return \Illuminate\Http\Response */ - public function index(PostFilter $filter) + public function index(Request $request) { + list($collection, $total) = PostConductor::request($request); + return $this->respondAsResource( - $filter->filter(), - ['total' => $filter->foundTotal()] + $collection, + ['total' => $total] ); } /** * Display the specified resource. * - * @param PostFilter $filter The filter request. - * @param \App\Models\Post $post The post model. + * @param \Illuminate\Http\Request $request The endpoint request. + * @param \App\Models\Post $post The post model. * @return \Illuminate\Http\Response */ - public function show(PostFilter $filter, Post $post) + public function show(Request $request, Post $post) { - return $this->respondAsResource($filter->filter($post)); + if (PostConductor::viewable($post) === true) { + return $this->respondAsResource(PostConductor::model($request, $post)); + } + + return $this->respondForbidden(); } /** * Store a newly created resource in storage. * - * @param PostStoreRequest $request The post store request. + * @param \App\Http\Requests\PostRequest $request The user request. * @return \Illuminate\Http\Response */ - public function store(PostStoreRequest $request) + public function store(PostRequest $request) { - $post = Post::create($request->all()); - return $this->respondAsResource( - (new PostFilter($request))->filter($post), - null, - HttpResponseCodes::HTTP_CREATED - ); + if (PostConductor::creatable() === true) { + $post = Post::create($request->all()); + return $this->respondAsResource( + PostConductor::model($request, $post), + null, + HttpResponseCodes::HTTP_CREATED + ); + } else { + return $this->respondForbidden(); + } } /** * Update the specified resource in storage. * - * @param PostUpdateRequest $request The post update request. - * @param \App\Models\Post $post The specified post. + * @param \App\Http\Requests\PostRequest $request The post update request. + * @param \App\Models\Post $post The specified post. * @return \Illuminate\Http\Response */ - public function update(PostUpdateRequest $request, Post $post) + public function update(PostRequest $request, Post $post) { - $post->update($request->all()); - return $this->respondAsResource((new PostFilter($request))->filter($post)); + if (PostConductor::updatable($post) === true) { + $post->update($request->all()); + return $this->respondAsResource(PostConductor::model($request, $post)); + } + + return $this->respondForbidden(); } /** @@ -87,7 +100,11 @@ class PostController extends ApiController */ public function destroy(Post $post) { - $post->delete(); - return $this->respondNoContent(); + if (PostConductor::destroyable($post) === true) { + $post->delete(); + return $this->respondNoContent(); + } else { + return $this->respondForbidden(); + } } } diff --git a/app/Http/Controllers/Api/SubscriptionController.php b/app/Http/Controllers/Api/SubscriptionController.php index 45f138f..49451cd 100644 --- a/app/Http/Controllers/Api/SubscriptionController.php +++ b/app/Http/Controllers/Api/SubscriptionController.php @@ -2,12 +2,14 @@ namespace App\Http\Controllers\Api; +use App\Conductors\SubscriptionConductor; +use App\Enum\HttpResponseCodes; use App\Models\Subscription; -use App\Filters\SubscriptionFilter; use App\Http\Requests\SubscriptionRequest; use App\Jobs\SendEmailJob; use App\Mail\SubscriptionConfirm; use App\Mail\SubscriptionUnsubscribed; +use Illuminate\Http\Request; class SubscriptionController extends ApiController { @@ -23,58 +25,70 @@ class SubscriptionController extends ApiController /** * Display a listing of subscribers. * - * @param \App\Filters\SubscriptionFilter $filter Filter object. + * @param \Illuminate\Http\Request $request The endpoint request. * @return \Illuminate\Http\Response */ - public function index(SubscriptionFilter $filter) + public function index(Request $request) { - $collection = $filter->filter(); + list($collection, $total) = SubscriptionConductor::request($request); + return $this->respondAsResource( $collection, - ['total' => $filter->foundTotal()] + ['total' => $total] ); } + /** + * Display the specified user. + * + * @param \Illuminate\Http\Request $request The endpoint request. + * @param \App\Models\Subscription $subscription The subscription model. + * @return \Illuminate\Http\Response + */ + public function show(Request $request, Subscription $subscription) + { + if (SubscriptionConductor::viewable($subscription) === true) { + return $this->respondAsResource(SubscriptionConductor::model($request, $subscription)); + } + + return $this->respondForbidden(); + } + /** * Store a subscriber email in the database. * - * @param SubscriptionRequest $request The subscriber update request. + * @param \App\Http\Requests\SubscriptionRequest $request The subscriber update request. * @return \Illuminate\Http\Response */ public function store(SubscriptionRequest $request) { - if (Subscription::where('email', $request->email)->first() !== null) { - return $this->respondWithErrors(['email' => 'This email address has already subscribed']); + if (SubscriptionConductor::creatable() === true) { + Subscription::create($request->all()); + dispatch((new SendEmailJob($request->email, new SubscriptionConfirm($request->email))))->onQueue('mail'); + + return $this->respondCreated(); + } else { + return $this->respondForbidden(); } - - Subscription::create($request->all()); - dispatch((new SendEmailJob($request->email, new SubscriptionConfirm($request->email))))->onQueue('mail'); - - return $this->respondCreated(); - } - - - /** - * Display the specified user. - * - * @param SubscriptionFilter $filter The subscription filter. - * @param Subscription $subscription The subscription model. - * @return \Illuminate\Http\Response - */ - public function show(SubscriptionFilter $filter, Subscription $subscription) - { - return $this->respondAsResource($filter->filter($subscription)); } /** * Update the specified resource in storage. * - * @param SubscriptionRequest $request The subscription update request. - * @param Subscription $subscription The specified subscription. + * @param \App\Http\Requests\SubscriptionRequest $request The subscription update request. + * @param \App\Models\Subscription $subscription The specified subscription. * @return \Illuminate\Http\Response */ public function update(SubscriptionRequest $request, Subscription $subscription) { + // if (EventConductor::updatable($event) === true) { + // $event->update($request->all()); + // return $this->respondAsResource(EventConductor::model($request, $event)); + // } + + // return $this->respondForbidden(); + + // $input = []; // $updatable = ['username', 'first_name', 'last_name', 'email', 'phone', 'password']; @@ -103,14 +117,12 @@ class SubscriptionController extends ApiController */ public function destroy(Subscription $subscription) { - // if ($user->hasPermission('admin/user') === false) { - // return $this->respondForbidden(); - // } - - $email = $subscription->email; - - $subscription->delete(); - return $this->respondNoContent(); + if (SubscriptionConductor::destroyable($subscription) === true) { + $subscription->delete(); + return $this->respondNoContent(); + } else { + return $this->respondForbidden(); + } } /** diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index a163d9b..ef08a3b 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -49,7 +49,7 @@ class UserController extends ApiController /** * Display a listing of the resource. * - * @param Request $request The request. + * @param \Illuminate\Http\Request $request The endpoint request. * @return \Illuminate\Http\Response */ public function index(Request $request) @@ -65,12 +65,12 @@ class UserController extends ApiController /** * Store a newly created user in the database. * - * @param Request $request The request. + * @param \App\Http\Requests\UserStoreRequest $request The endpoint request. * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(UserStoreRequest $request) { - if(UserConductor::creatable()) { + if (UserConductor::creatable() === true) { $user = User::create($request->all()); return $this->respondAsResource(UserConductor::model($request, $user), [], HttpResponseCodes::HTTP_CREATED); } else { @@ -78,18 +78,16 @@ class UserController extends ApiController } } - /** * Display the specified user. * - * @param UserFilter $filter The user filter. - * @param User $user The user model. + * @param \Illuminate\Http\Request $request The endpoint request. + * @param \App\Models\User $user The user model. * @return \Illuminate\Http\Response */ - // public function show(UserFilter $filter, User $user) public function show(Request $request, User $user) { - if(UserConductor::viewable($user)) { + if (UserConductor::viewable($user) === true) { return $this->respondAsResource(UserConductor::model($request, $user)); } @@ -99,13 +97,13 @@ class UserController extends ApiController /** * Update the specified resource in storage. * - * @param UserUpdateRequest $request The user update request. - * @param User $user The specified user. + * @param \App\Http\Requests\UserUpdateRequest $request The user update request. + * @param \App\Models\User $user The specified user. * @return \Illuminate\Http\Response */ public function update(UserUpdateRequest $request, User $user) { - if(UserConductor::updatable($user)) { + if (UserConductor::updatable($user) === true) { $input = []; $updatable = ['username', 'first_name', 'last_name', 'email', 'phone', 'password']; @@ -124,16 +122,15 @@ class UserController extends ApiController } } - /** * Remove the user from the database. * - * @param User $user The specified user. + * @param \App\Models\User $user The specified user. * @return \Illuminate\Http\Response */ public function destroy(User $user) { - if(UserConductor::destroyable($user)) { + if (UserConductor::destroyable($user) === true) { $user->delete(); return $this->respondNoContent(); } @@ -144,7 +141,7 @@ class UserController extends ApiController /** * Register a new user * - * @param UserRegisterRequest $request The register user request. + * @param \App\Http\Requests\UserRegisterRequest $request The register user request. * @return \Illuminate\Http\Response */ public function register(UserRegisterRequest $request) @@ -178,7 +175,7 @@ class UserController extends ApiController /** * Sends an email with all the usernames registered at that address * - * @param UserForgotUsernameRequest $request The forgot username request. + * @param \App\Http\Requests\UserForgotUsernameRequest $request The forgot username request. * @return \Illuminate\Http\Response */ public function forgotUsername(UserForgotUsernameRequest $request) @@ -198,7 +195,7 @@ class UserController extends ApiController /** * Generates a new reset password code * - * @param UserForgotPasswordRequest $request The reset password request. + * @param \App\Http\Requests\UserForgotPasswordRequest $request The reset password request. * @return \Illuminate\Http\Response */ public function forgotPassword(UserForgotPasswordRequest $request) @@ -220,7 +217,7 @@ class UserController extends ApiController /** * Resets a user password * - * @param UserResetPasswordRequest $request The reset password request. + * @param \App\Http\Requests\UserResetPasswordRequest $request The reset password request. * @return \Illuminate\Http\Response */ public function resetPassword(UserResetPasswordRequest $request) @@ -254,7 +251,7 @@ class UserController extends ApiController /** * Verify an email code * - * @param UserVerifyEmailRequest $request The verify email request. + * @param \App\Http\Requests\UserVerifyEmailRequest $request The verify email request. * @return \Illuminate\Http\Response */ public function verifyEmail(UserVerifyEmailRequest $request) @@ -292,7 +289,7 @@ class UserController extends ApiController /** * Resend a new verify email * - * @param UserResendVerifyEmailRequest $request The resend verify email request. + * @param \App\Http\Requests\UserResendVerifyEmailRequest $request The resend verify email request. * @return \Illuminate\Http\Response */ public function resendVerifyEmail(UserResendVerifyEmailRequest $request) @@ -319,7 +316,7 @@ class UserController extends ApiController /** * Resend verification email * - * @param UserResendVerifyEmailRequest $request The resend user request. + * @param \App\Http\Requests\UserResendVerifyEmailRequest $request The resend user request. * @return \Illuminate\Http\Response */ public function resendVerifyEmailCode(UserResendVerifyEmailRequest $request) diff --git a/app/Http/Requests/BaseRequest.php b/app/Http/Requests/BaseRequest.php index 4d41794..aa8a5ca 100644 --- a/app/Http/Requests/BaseRequest.php +++ b/app/Http/Requests/BaseRequest.php @@ -14,10 +14,12 @@ class BaseRequest extends FormRequest */ public function authorize() { - if (method_exists($this, 'postAuthorize') === true && request()->isMethod('post') === true) { + if (request()->isMethod('post') === true && method_exists($this, 'postAuthorize') === true) { return $this->postAuthorize(); - } elseif (method_exists($this, 'putAuthorize') === true && request()->isMethod('put') === true) { + } elseif ((request()->isMethod('put') === true || request()->isMethod('patch') === true) && method_exists($this, 'putAuthorize') === true) { return $this->putAuthorize(); + } elseif (request()->isMethod('delete') === true && method_exists($this, 'destroyAuthorize') === true) { + return $this->deleteAuthorize(); } return true; @@ -38,7 +40,7 @@ class BaseRequest extends FormRequest if (method_exists($this, 'postRules') === true && request()->isMethod('post') === true) { $rules = $this->mergeRules($rules, $this->postRules()); - } elseif (method_exists($this, 'putRules') === true && request()->isMethod('put') === true) { + } elseif (method_exists($this, 'putRules') === true && (request()->isMethod('put') === true || request()->isMethod('patch') === true)) { $rules = $this->mergeRules($rules, $this->postRules()); } elseif (method_exists($this, 'destroyRules') === true && request()->isMethod('delete') === true) { $rules = $this->mergeRules($rules, $this->destroyRules()); diff --git a/app/Http/Requests/EventRequest.php b/app/Http/Requests/EventRequest.php index a591b63..537a1c6 100644 --- a/app/Http/Requests/EventRequest.php +++ b/app/Http/Requests/EventRequest.php @@ -5,28 +5,8 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; -class EventRequest extends BaseRequest +class EventStoreRequest extends BaseRequest { - /** - * Determine if the user is authorized to make this request. - * - * @return boolean - */ - public function postAuthorize() - { - return $this->user()?->hasPermission('admin/events'); - } - - /** - * Determine if the user is authorized to make this request. - * - * @return boolean - */ - public function putAuthorize() - { - return $this->user()?->hasPermission('admin/events'); - } - /** * Apply the base rules to this request * diff --git a/app/Http/Requests/MediaRequest.php b/app/Http/Requests/MediaRequest.php new file mode 100644 index 0000000..a737fce --- /dev/null +++ b/app/Http/Requests/MediaRequest.php @@ -0,0 +1,8 @@ + - */ - public function rules() - { - return [ - // - ]; - } -} diff --git a/app/Http/Requests/MediaUpdateRequest.php b/app/Http/Requests/MediaUpdateRequest.php deleted file mode 100644 index d6b61c7..0000000 --- a/app/Http/Requests/MediaUpdateRequest.php +++ /dev/null @@ -1,20 +0,0 @@ - - */ - public function rules() - { - return [ - // - ]; - } -} diff --git a/app/Http/Requests/PostRequest.php b/app/Http/Requests/PostRequest.php new file mode 100644 index 0000000..dd15f51 --- /dev/null +++ b/app/Http/Requests/PostRequest.php @@ -0,0 +1,42 @@ + + */ + public function postRules() + { + return [ + 'slug' => 'string|min:6|unique:posts', + 'title' => 'string|min:6|max:255', + 'publish_at' => 'date', + 'user_id' => 'uuid|exists:users,id', + ]; + } + + /** + * Get the validation rules that apply to PUT request. + * + * @return array + */ + public function putRules() + { + return [ + 'slug' => [ + 'string', + 'min:6', + Rule::unique('posts')->ignoreModel($this->post), + ], + 'title' => 'string|min:6|max:255', + 'publish_at' => 'date', + 'user_id' => 'uuid|exists:users,id', + ]; + } +} diff --git a/app/Http/Requests/PostStoreRequest.php b/app/Http/Requests/PostStoreRequest.php deleted file mode 100644 index 6d4d21b..0000000 --- a/app/Http/Requests/PostStoreRequest.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ - public function rules() - { - return [ - 'slug' => 'string|min:6|unique:posts', - 'title' => 'string|min:6|max:255', - 'publish_at' => 'date', - 'user_id' => 'uuid|exists:users,id', - ]; - } -} diff --git a/app/Http/Requests/PostUpdateRequest.php b/app/Http/Requests/PostUpdateRequest.php deleted file mode 100644 index c0d01c7..0000000 --- a/app/Http/Requests/PostUpdateRequest.php +++ /dev/null @@ -1,28 +0,0 @@ - - */ - public function rules() - { - return [ - 'slug' => [ - 'string', - 'min:6', - Rule::unique('posts')->ignoreModel($this->post), - ], - 'title' => 'string|min:6|max:255', - 'publish_at' => 'date', - 'user_id' => 'uuid|exists:users,id', - ]; - } -} diff --git a/app/Http/Requests/SubscriptionRequest.php b/app/Http/Requests/SubscriptionRequest.php index b34374e..fbfafff 100644 --- a/app/Http/Requests/SubscriptionRequest.php +++ b/app/Http/Requests/SubscriptionRequest.php @@ -14,7 +14,7 @@ class SubscriptionRequest extends BaseRequest public function postRules() { return [ - 'email' => 'required|email', + 'email' => 'required|email|unique:subscriptions', 'captcha_token' => [new Recaptcha()], ]; } @@ -31,4 +31,16 @@ class SubscriptionRequest extends BaseRequest 'captcha_token' => [new Recaptcha()], ]; } + + /** + * Get the custom error messages. + * + * @return array + */ + public function messages() + { + return [ + 'email.unique' => 'This email address has already subscribed', + ]; + } }