Compare commits

..

9 Commits

Author SHA1 Message Date
李东云
c262d38ad0 chore(release): 1.0.0-alpha.1 2023-07-21 03:39:01 +00:00
李东云
a8ec7d8255 build(composer): 更新依赖
Signed-off-by: 李东云 <dongyu.li@luxcreo.ai>
2023-07-21 11:38:31 +08:00
李东云
f1948ab0fe build(release): 增加 alpha 标识,准备正式版
Signed-off-by: 李东云 <dongyu.li@luxcreo.ai>
2023-07-21 11:04:39 +08:00
李东云
ae8001a595 chore(release): 1.0.0-alpha.0 2023-07-21 03:01:22 +00:00
李东云
68844a6132 feat(controller): 增加了一个 Rest 风格的 trait
Signed-off-by: 李东云 <dongyu.li@luxcreo.ai>
2023-07-21 10:55:10 +08:00
李东云
fd788a7eb8 feat(trait): 增加了分页响应的统一处理方法
Signed-off-by: 李东云 <dongyu.li@luxcreo.ai>
2023-07-19 15:52:35 +08:00
李东云
7ccf36b398 docs(utils): 移除了导致编辑器出错的注解
Signed-off-by: 李东云 <dongyu.li@luxcreo.ai>
2023-07-07 10:31:31 +08:00
李东云
3d86b05fff chore(release): 0.2.23 2023-07-07 02:13:01 +00:00
李东云
722d124e1e fix(i18n): 修复获取偏好语言失败的问题
Signed-off-by: 李东云 <dongyu.li@luxcreo.ai>
2023-07-07 10:12:35 +08:00
10 changed files with 2873 additions and 2727 deletions

View File

@@ -1,4 +1,32 @@
# 版本更新日志
## [1.0.0-alpha.1](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/compare/v1.0.0-alpha.0...v1.0.0-alpha.1) (2023-07-21)
### 📦‍ Build System | 打包构建
* **composer:** 更新依赖 ([a8ec7d8](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/a8ec7d82556c2fb8fbe1e356eb6d1936401c810a))
* **release:** 增加 alpha 标识,准备正式版 ([f1948ab](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/f1948ab0fe4594140eede8e52f113963d98a8338))
## [1.0.0-alpha.0](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/compare/v0.2.23...v1.0.0-alpha.0) (2023-07-21)
### ✏️ Documentation | 文档
* **utils:** 移除了导致编辑器出错的注解 ([7ccf36b](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/7ccf36b398f86a31c7d8dde6ff24f0d9828cfb80))
### ✨ Features | 新功能
* **controller:** 增加了一个 Rest 风格的 trait ([68844a6](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/68844a6132059da89f69a34ba59229c40e5bcace))
* **trait:** 增加了分页响应的统一处理方法 ([fd788a7](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/fd788a7eb804b7fe085346d817123c04c8bd0d01))
### [0.2.23](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/compare/v0.2.22...v0.2.23) (2023-07-07)
### 🐛 Bug Fixes | Bug 修复
* **i18n:** 修复获取偏好语言失败的问题 ([722d124](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/722d124e1ed87c493dfb8841212b408717444d98))
### [0.2.22](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/compare/v0.2.21...v0.2.22) (2023-07-06)

View File

@@ -1 +1 @@
0.2.22
1.0.0-alpha.1

View File

@@ -111,5 +111,5 @@
"url": "https://mirrors.aliyun.com/composer/"
}
},
"version": "0.2.22"
"version": "1.0.0-alpha.1"
}

5466
composer.lock generated

File diff suppressed because it is too large Load Diff

12
docs/REST 控制器.md Normal file
View File

@@ -0,0 +1,12 @@
# REST 资源控制器支持
## 列表的筛选、排序
* [**RestfulList**](../src/Traits/RestfulList.php)
### RestfulList
在 AbstractController 中已经默认进行了集成
- parseParameters 用来解析请求
- responseFormatter 用来将 builder 转化成响应
- restSelect 额外的语法糖,调用了上面的两个方法

View File

@@ -2,4 +2,4 @@
docker run --rm -it \
-v $(pwd):/app -e "GIT_AUTHOR_NAME=$(git config user.name)" -e "EMAIL=$(git config user.email)" \
detouched/standard-version:latest $1
detouched/standard-version:latest -p=alpha $1

View File

@@ -21,8 +21,8 @@ use Dont\DontToString;
use Hyperf\Contract\ContainerInterface;
use Hyperf\Contract\StdoutLoggerInterface;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Singularity\HDK\Core\Traits\RestfulList;
/**
* 抽象控制器基类
@@ -42,13 +42,11 @@ abstract class AbstractController
use DontSerialise;
use DontDeserialise;
use DontToString;
use RestfulList;
#[Inject]
protected ContainerInterface $container;
#[Inject]
protected RequestInterface $request;
#[Inject]
protected ResponseInterface $response;

View File

@@ -39,7 +39,7 @@ class InternationalizationMiddleware implements MiddlewareInterface
$req = (new Request());
$req->headers->set(Header::ACCEPT_LANGUAGE, $request->getHeaderLine(Header::ACCEPT_LANGUAGE));
$language = $req->getPreferredLanguage([config('translation.locale')]);
$language = $req->getPreferredLanguage();
if (!empty($language)) {
$language = match (strtolower($language)) {
'en', 'en_us', 'en-us', 'en-uk', 'en_uk' => 'en',

View File

@@ -8,7 +8,6 @@ use Closure;
use Exception;
use Generator;
use Hyperf\HttpServer\Contract\RequestInterface;
use JetBrains\PhpStorm\NoReturn;
use JetBrains\PhpStorm\Pure;
use Psr\Http\Message\ResponseInterface;
@@ -236,7 +235,6 @@ class UtilsService
*
* @return void
*/
#[NoReturn]
public function unlimitedSubCategoriesQuicklyWithLevel(
array &$list,
int $level = 1,

View File

@@ -0,0 +1,78 @@
<?php
/**
* Paginatable.php@Core
*
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
* Powered by PhpStorm
* Created on 2023/7/18
*/
namespace Singularity\HDK\Core\Traits;
use Closure;
use Hyperf\Contract\LengthAwarePaginatorInterface;
use Hyperf\Database\Model\Builder;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\Stringable\Str;
use Singularity\HDK\Core\Service\ExtendService;
trait RestfulList
{
#[Inject]
private ExtendService $extend;
#[Inject]
private RequestInterface $request;
public function restSelect(Closure $callback, ?Closure $filter = null)
{
$options = [];
$result = $this->parseParameters(function ($query, $parsedOptions) use ($callback, &$options) {
$options = $parsedOptions;
$callback($query, $parsedOptions);
});
return $this->responseFormatter($options, $result, $filter);
}
public function parseParameters(Closure $callback): mixed
{
$query = $this->request->getQueryParams();
$options = [
'size' => $this->request->query('size'),
'page' => $this->request->query('page'),
'order' => $this->request->query('order', 'created_at'),
'sort' => $this->request->query('sort', 'desc'),
'group' => $this->request->query('group'),
'extends' => $this->extend->getExtends(),
];
unset($query['sort'], $query['page'], $query['size'], $query['order'], $query['group'], $query['extends']);
return $callback(query: $query, options: $options);
}
public function responseFormatter(
array $options,
Builder $builder,
?Closure $filter = null
) {
$perPage = $options['size'] ?? null;
$order = $options['order'] ?? 'created_at';
$sort = $options['sort'] ?? 'desc';
$pagination = !!($options['page'] ?? $perPage ?? false);
// $group = $options['group'] ?? null;
$builder = $builder->orderBy(Str::snake($order), $sort);
$result = $pagination ? $builder->paginate($perPage) : $builder->get();
if (is_null($filter)) {
return $result;
}
if ($result instanceof LengthAwarePaginatorInterface) {
$collection = $result->getCollection();
$collection = $filter($collection);
return $result->setCollection($collection);
}
return $filter($result);
}
}