diff --git a/kernel/RestController.php b/kernel/RestController.php index a2c7b88..e13d436 100644 --- a/kernel/RestController.php +++ b/kernel/RestController.php @@ -38,6 +38,20 @@ class RestController $this->renderApi($res); } + #[NoReturn] public function actionDelete($id): void + { + $model = $this->model->where("id", $id)->first(); + $res = []; + if ($model){ + $res = $model->toArray(); + } + + $model->delete(); + + $this->renderApi($res); + + } + #[NoReturn] protected function renderApi(array $data): void { header("Content-Type: application/json"); diff --git a/kernel/modules/post/controllers/PostRestController.php b/kernel/modules/post/controllers/PostRestController.php index 5de4ed6..6552daf 100644 --- a/kernel/modules/post/controllers/PostRestController.php +++ b/kernel/modules/post/controllers/PostRestController.php @@ -3,6 +3,7 @@ namespace kernel\modules\post\controllers; use Illuminate\Database\Eloquent\Model; +use JetBrains\PhpStorm\NoReturn; use kernel\modules\post\models\Post; use kernel\RestController; @@ -13,7 +14,7 @@ class PostRestController extends RestController $this->model = new Post(); } - public function actionView($id): void + #[NoReturn] public function actionView($id): void { $model = $this->model->where("id", $id)->first(); $model->load("user"); @@ -24,4 +25,19 @@ class PostRestController extends RestController $this->renderApi($res); } + + #[NoReturn] public function actionDelete($id): void + { + $model = $this->model->where("id", $id)->first(); + $model->load("user"); + $res = []; + if ($model){ + $res = $model->toArray(); + } + + $model->delete(); + + $this->renderApi($res); + + } } \ No newline at end of file diff --git a/kernel/modules/post/routs/post.php b/kernel/modules/post/routs/post.php index 8253a17..e99c834 100644 --- a/kernel/modules/post/routs/post.php +++ b/kernel/modules/post/routs/post.php @@ -27,6 +27,6 @@ App::$collector->group(["prefix" => "api"], function (RouteCollector $router){ // App::$collector->get('/{id}', [\kernel\modules\post\controllers\PostController::class, 'actionView']); // App::$collector->any('/update/{id}', [\kernel\modules\post\controllers\PostController::class, 'actionUpdate']); // App::$collector->any("/edit/{id}", [\kernel\modules\post\controllers\PostController::class, 'actionEdit']); -// App::$collector->get('/delete/{id}', [\kernel\modules\post\controllers\PostController::class, 'actionDelete']); + App::$collector->get('/delete/{id}', [\kernel\modules\post\controllers\PostRestController::class, 'actionDelete']); }); }); \ No newline at end of file diff --git a/kernel/modules/post/service/PostService.php b/kernel/modules/post/service/PostService.php index 3849fff..07b93da 100644 --- a/kernel/modules/post/service/PostService.php +++ b/kernel/modules/post/service/PostService.php @@ -2,6 +2,7 @@ namespace kernel\modules\post\service; +use kernel\helpers\Debug; use kernel\helpers\Slug; use kernel\modules\post\models\Post; use kernel\FormModel; @@ -14,7 +15,7 @@ class PostService $model->content = $form_model->getItem('content'); $model->user_id = $form_model->getItem('user_id'); $model->title = $form_model->getItem('title'); - $model->slug = Slug::url_slug($form_model->getItem('title'), ['transliterate' => true, 'lowercase' => true]); + $model->slug = $this->createSlug($form_model); if ($model->save()){ return $model; } @@ -22,6 +23,26 @@ class PostService return false; } + public function createSlug(FormModel $form_model): string + { + $slug = Slug::url_slug($form_model->getItem('title'), ['transliterate' => true, 'lowercase' => true]); + if (Post::where(['slug' => $slug])->exists()) { + $id = 1; + $tmpSlug = $slug . '-' . $id++; + $slug = $this->recursiveCreateSlug($slug, $tmpSlug, $id); + } + return $slug; + } + + protected function recursiveCreateSlug($slug, $tmpSlug, $id): string + { + if (Post::where(['slug' => $tmpSlug])->exists()) { + $tmpSlug = $slug . '-' . $id++; + $tmpSlug = $this->recursiveCreateSlug($slug, $tmpSlug, $id); + } + return $tmpSlug; + } + public function update(FormModel $form_model, Post $post): false|Post { $post->content = $form_model->getItem('content');