robodocxs/laravel-erp-middleware

为 Robodocxs 提供ERP功能的中间件包

dev-main 2024-07-29 15:13 UTC

This package is not auto-updated.

Last update: 2024-09-23 16:31:08 UTC


README

本包为 Laravel 应用程序提供 ERP 集成中间件,包括基本的 DTOs、一次性的基本认证自定义中间件、自定义异常处理以及 SFTP 文件系统操作和 CSV 处理的额外功能。

安装

您可以通过 composer 安装此包

composer require robodocxs/laravel-erp-middleware

安装后,您应该发布配置文件

php artisan vendor:publish --provider="Robodocxs\LaravelErpMiddleware\LaravelErpMiddlewareServiceProvider" --tag="config"

这将发布 robodocxs-erp-middleware.php 配置文件到您的配置目录。

配置

如果您需要 SFTP 访问,请在 config/filesystems.php 文件中直接添加以下磁盘

'fileshare' => [
    'driver' => 'sftp',
    'host' => env('SFTP_HOST'),
    'username' => env('SFTP_USERNAME'),
    'password' => env('SFTP_PASSWORD'),
    'privateKey' => env('SFTP_PRIVATE_KEY'),
    'passphrase' => env('SFTP_PASSPHRASE'),
    'root' => env('SFTP_ROOT'),
    'visibility' => 'private', // `private` = 0600, `public` = 0644
    'directory_visibility' => 'private', // `private` = 0700, `public` = 0755
    // 'hostFingerprint' => env('SFTP_HOST_FINGERPRINT'),
    // 'maxTries' => 4,
    // 'passphrase' => env('SFTP_PASSPHRASE'),
    // 'port' => env('SFTP_PORT', 22),
    // 'root' => env('SFTP_ROOT', ''),
    // 'timeout' => 30,
    // 'useAgent' => true,
    // Setting for the environment
]

然后添加以下键到您的 env 文件中以使用该磁盘

SFTP_HOST=your_sftp_host
SFTP_USERNAME=your_username
SFTP_PASSWORD=your_password
SFTP_PRIVATE_KEY=path_to_your_private_key
SFTP_PASSPHRASE=your_passphrase
SFTP_ROOT=/home/someuser

功能

  • 使用 spatie/laravel-data 的基本 DTOs
  • 一次性的基本认证自定义中间件
  • 针对 API 友好响应的自定义异常处理
  • 使用 league/flysystem-sftp-v3 的 SFTP 文件系统操作
  • 使用 league/csv 的 CSV 处理能力

API 路由和中间件控制器

本包提供预定义的 API 路由和中间件控制器来处理它们。所有路由都由 AuthenticateOnceWithBasicAuth 中间件保护,该中间件实现了一次性基本认证。

以下路由可用

1. 列出产品

  • 端点: GET /api/products
  • 查询参数: search(可选)
  • 响应: ProductDTOs 集合

2. 列出账户

  • 端点: GET /api/accounts
  • 查询参数: namevat_id(均可选)
  • 响应: AccountDTOs 集合

3. 列出账户联系人

  • 端点: GET /api/accounts/{account_id}/contacts
  • 响应: ContactDTOs 集合

4. 列出账户地址

  • 端点: GET /api/accounts/{account_id}/addresses
  • 响应: AddressDTOs 集合

5. 列出账户自定义产品

  • 端点: GET /api/accounts/{account_id}/products
  • 响应: CustomOrderCodeDTOs 集合

6. 检查价格和可用性

  • 端点: POST /api/products/price-and-availability
  • 请求体: PARequestDTO 对象数组
  • 响应: PAResponseDTO 对象数组

所有这些路由都需要认证。AuthenticateOnceWithBasicAuth 中间件将在第一次请求时提示凭证,然后允许后续请求在有限的时间内无需重新认证。

用法

DTOs

本包为处理各种数据结构提供了几个数据传输对象(DTOs)

ProductDTO

use Robodocxs\LaravelErpMiddleware\DTOs\ProductDTO;

$productData = [
    'id' => '1',
    'product_code' => 'ABC123',
    'product_code_2' => 'XYZ-001',
    'name' => 'Sample Product',
    'description' => 'This is a sample product',
    'base_unit_id' => 1,
    'ean' => '1234567890123'
];

$productDTO = ProductDTO::from($productData);

AccountDTO

use Robodocxs\LaravelErpMiddleware\DTOs\AccountDTO;

$accountData = [
    'id' => '1',
    'erp_id' => 'ERP001',
    'vat_id' => 'VAT001',
    'name' => 'Sample Company',
    'address' => [
        'street' => 'Main St',
        'zip' => '12345',
        'city' => 'Sampleville'
    ],
    'delivery_addresses' => [],
    'invoice_addresses' => []
];

$accountDTO = AccountDTO::from($accountData);

自定义中间件

本包包含一个用于一次性基本认证的中间件。它将自动应用于本包提供的所有 API 路由。如果您想在您自己的路由中使用它,可以这样做

Route::get('/api/example', function () {
    // Your protected route logic here
})->middleware('auth.basic.once');

SFTP 操作

本包为 SFTP 操作配置了一个新的 'fileshare' 磁盘。发布并配置 sftp.php 配置文件后,您可以使用它

use Illuminate\Support\Facades\Storage;

$disk = Storage::disk('fileshare');

// Now you can use $disk to perform SFTP operations
$contents = $disk->get('file.txt');
$disk->put('file.txt', 'Contents');

CSV 处理

本包包含用于 CSV 操作的 league/csv 包。以下是一个读取 CSV 文件的示例

use League\Csv\Reader;

$csv = Reader::createFromPath('/path/to/your/csv/file.csv', 'r');
$csv->setHeaderOffset(0);

foreach ($csv as $record) {
    // Process each record
}

有关 SFTP 和 CSV 操作的更详细使用说明,请参阅相应的包文档

测试

要运行包测试,使用

composer test

贡献

欢迎贡献!请随时提交拉取请求。

许可证

MIT 许可证(MIT)。