Browse Source

feat(article): 新增文章分类管理功能

- 新增文章分类控制器ArticleCategoryController
- 实现文章分类的增删改查接口
- 添加文章分类验证规则ArticleCategoryValidate
- 配置文章分类相关路由
- 提供文章分类服务层逻辑ArticleCategoryService
- 支持文章分类列表筛选和分页查询
- 实现软删除和事务处理机制
master
zhangf@suq.cn 1 week ago
parent
commit
73aa1af7fb
  1. 53
      app/controller/ArticleCategoryController.php
  2. 15
      app/route/route.php
  3. 114
      app/service/ArticleCategoryService.php
  4. 22
      app/validate/ArticleCategoryValidate.php

53
app/controller/ArticleCategoryController.php

@ -0,0 +1,53 @@
<?php
namespace app\controller;
use app\service\ArticleCategoryService;
use app\validate\ArticleCategoryValidate;
use plugin\piadmin\app\utils\ArrayUtils;
use support\Response;
class ArticleCategoryController
{
public function save(ArticleCategoryService $service): Response
{
$params = requestOnly([
'name' => '',
]);
validate(ArticleCategoryValidate::class)->check($params, 'save');
return success($service->saveData($params));
}
public function update(ArticleCategoryService $service): Response
{
$params = requestOnly([
'id' => '',
'name' => '',
]);
validate(ArticleCategoryValidate::class)->check($params, 'update');
return success($service->updateData(ArrayUtils::filterNotEmpty($params)));
}
public function index(ArticleCategoryService $service): Response
{
$params = requestOnly([
'name' => '',
'begin_time' => '',
'end_time' => ''
]);
return success($service->listData($params));
}
public function read(ArticleCategoryService $service): Response
{
$id = input('id');
return success($service->readData($id));
}
public function delete(ArticleCategoryService $service): Response
{
$id = input('id');
return success($service->deleteData($id));
}
}

15
app/route/route.php

@ -1,6 +1,7 @@
<?php
use app\controller\AiCommandController;
use app\controller\ArticleCategoryController;
use app\controller\CreationTaskController;
use app\controller\DistillationQuestionsController;
use app\controller\EnterprisePortraitCategoryController;
@ -107,6 +108,20 @@ Route::group('/service/v1', function () {
//删除
Route::post('/delete', [CreationTaskController::class, 'delete'])->setParams(['perm' => ['creationTaskDelete']]);
});
//文章发呢类
Route::group('/articleCategory', function () {
//新增
Route::post('/save', [ArticleCategoryController::class, 'save'])->setParams(['perm' => ['articleCategorySave']]);
//修改
Route::post('/update', [ArticleCategoryController::class, 'update'])->setParams(['perm' => ['articleCategoryUpdate']]);
//列表
Route::get('/index', [ArticleCategoryController::class, 'index'])->setParams(['perm' => ['articleCategoryIndex']]);
//详情
Route::get('/read', [ArticleCategoryController::class, 'read'])->setParams(['perm' => ['articleCategoryRead']]);
//删除
Route::post('/delete', [ArticleCategoryController::class, 'delete'])->setParams(['perm' => ['articleCategoryDelete']]);
});
});
})->middleware([
AdminAuthorizationMiddleware::class,

114
app/service/ArticleCategoryService.php

@ -0,0 +1,114 @@
<?php
namespace app\service;
use app\dao\ArticleCategoryDao;
use plugin\piadmin\app\base\BaseService;
use plugin\piadmin\app\exception\ApiException;
use support\think\Db;
class ArticleCategoryService extends BaseService
{
protected $dao;
public function __construct(ArticleCategoryDao $dao)
{
$this->dao = $dao;
}
/**
* 保存信息
* @param array $params
* @return array
*/
public function saveData(array $params): array
{
Db::startTrans();
try {
$data = $this->dao->save($params);
Db::commit();
} catch (\Exception $exception) {
Db::rollback();
throw new ApiException($exception->getMessage());
}
return $data->toArray();
}
/**
* 修改信息
* @param array $params
* @return array
*/
public function updateData(array $params): array
{
// 落库
Db::startTrans();
try {
$this->dao->update(['id' => $params['id']], $params);
Db::commit();
} catch (\Exception $exception) {
Db::rollback();
throw new ApiException($exception->getMessage());
}
return $params;
}
/**
* 获取列表
* @param array $params
* @return array
*/
public function listData(array $params): array
{
$query = [
'delete_time' => 0
];
if (isNotBlank($params['name'])) {
$query[] = ['name', 'like', '%' . $params['name'] . '%'];
}
if (isNotBlank($params['begin_time'])) {
$query[] = ['create_time', '>=', strtotime($params['begin_time'])];
}
if (isNotBlank($params['end_time'])) {
$query[] = ['create_time', '<=', strtotime($params['end_time'] . ' 23:59:59')];
}
$list = $this->dao->getList($query);
$count = $this->dao->getCount($query);
return compact('list', 'count');
}
/**
* 获取信息
* @param mixed $id
* @return array
*/
public function readData(mixed $id): array
{
$category = $this->dao->get(['id' => $id]);
if (empty($category)) {
throw new ApiException('数据不存在');
}
return $category->toArray();
}
/**
* 删除信息
* @param mixed $id
* @return array
*/
public function deleteData(mixed $id): array
{
// 落库
Db::startTrans();
try {
$this->dao->update($id, ['delete_time' => time()]);
Db::commit();
} catch (\Exception $exception) {
Db::rollback();
throw new ApiException($exception->getMessage());
}
return ['id' => $id];
}
}

22
app/validate/ArticleCategoryValidate.php

@ -0,0 +1,22 @@
<?php
namespace app\validate;
use plugin\piadmin\app\base\BaseValidate;
class ArticleCategoryValidate extends BaseValidate
{
protected $group = [
'save' => [
'name' => 'require',
],
'update' => [
'id' => 'require',
'name' => 'require',
],
];
protected $message = [
'id.require' => 'ID不能为空',
'name.require' => '文章分类不能为空',
];
}
Loading…
Cancel
Save