delfosti/massive

1.2.12 2023-11-30 02:04 UTC

README

这是一个简单的Laravel包,它为项目添加了批量上传功能,目的是在不编写自定义服务的情况下将数据存储到一个或多个实体中。

安装

本地集成

  1. 在以下路径中克隆存储库到您的项目内 [project]/packages/[package_name]
    git clone https://gitlab.com/infra1.delfosti/package-massive-upload
  1. 在您的项目的 composer.json 文件中声明该包为依赖项和存储库。
    {
        "require": {
            "delfosti/massive": "*"
        },
        "repositories": [
            {
                "type": "path",
                "url": "packages/[package_name]"
            }
        ],
    }
  1. 使用以下命令更新项目的依赖项
    composer update
  1. 最后,您需要在 config/app.php 文件中添加包的provider。
    'providers' => [
        /*
        * Package Service Providers...
        */
        Delfosti\Massive\MassiveServiceProvider::class,
    ]

从packagist集成

  1. 执行以下命令
    composer require delfosti/massive
  1. config/app.php 文件中添加包的provider。
    'providers' => [
        /*
        * Package Service Providers...
        */
        Delfosti\Massive\MassiveServiceProvider::class,
    ]

使用

配置文件

为了实现该包,需要一个配置文件。安装后,您需要执行以下命令以自动生成该文件:

   php artisan vendor:publish

执行命令后,您将在项目目录的 config/ 文件夹中找到一个名为 massiveupload.php 的新文件,它将提供一个基础结构以帮助您更好地实现。

迁移

该包存储了系统执行批量上传功能的所有历史记录,为此,它提供了一个迁移,必须在安装后执行。

   php artisan migrate

执行命令后,您将在项目数据库中找到一个名为 massive_upload_log 的新表。

API路由

该包为系统添加了新的路由以执行其功能,以下是一些路由:

   (GET) /api/massive-upload/get-actions
  • 返回配置文件中声明的所有功能。
  (GET) /api/massive-upload/get-action
  • 返回特定的功能,也返回每个实体存储使用的字段以及哪些是必填的,为此需要发送以下参数
    {
        "action": Nombre de la funcionalidad (string),
        "entity_fields": Si requiere o no los campos de cada entidad (boolean)
    }
  (POST) /api/massive-upload/uploader
  • 执行批量上传功能,为此需要发送以下参数
    {
        "action": Nombre de la funcionalidad (string),
        "user": id del usuario que está ejecutando la acción (boolean),
        "file_name": Nombre del archivo que se está procesando (string),
        "items": Datos que van a ser procesados (array)
    }
   (GET) /api/massive-upload-log/show
  • 返回批量上传历史记录的记录,这个搜索是根据 id 字段进行的;
   (GET) /api/massive-upload-log/get
  • 返回批量上传历史记录的记录列表;
   (GET) /api/massive-upload-log/list
  • 返回批量上传历史记录的记录分页列表;

项目配置

    'application' => [
        'architecture' => '',
        'orchestrator' => '',
        'microservices' => [],
        'created_data' => [
            'table' => '',
            'primary_key' => '',
            'fields'
        ]
    ],

架构:项目遵循的架构类型,本包支持以下两种类型

  • 单体
  • 微服务

编排器:是项目的主要应用程序,如果项目的架构类型是 monolith,则应填写该应用程序的URL;如果项目是 microservices 架构,则应填写管理微服务应用程序的URL。

微服务:应填写组成项目的微服务的URL。如果应用程序的架构类型是 microservices,则必须填写,否则可以留空。

- https://microservice-one.com

注意:为了让该包正常工作,必须将其安装在项目所有组成服务中,并且所有操作都必须指向编排器或主应用程序。

创建数据:应指出该包将从何处获取执行批量上传操作的用户的用户数据。

  • table: 获取数据的数据库表
  • primary_key: 表的主键
  • fields: 要显示的用户数据

功能配置

    'functionalities' => [
        [
            'action' => '',
            'type' => '',
            'friendly_name' => '',
            'entities' => []
        ]
    ]

操作:动作标识符,这必须是唯一的,并使用snake_case表示法声明。

类型:将要执行的动作类型,该包支持3种方法

  • 创建
  • 更新
  • 删除

友好名称:面向最终用户的名称。

实体:在这个功能中将使用的系统实体。

实体配置

    'entities' => [
        'entity' => '',
        'order' => 1,
        'type' => '',
        'has_id' => true,
        'created' => '',
        'search_by' => '',
        'audit_dates' => []
        'foreign_keys' => [
            'in_flow' => [
                'Entity' => 'field',
            ],
            'out_flow' => [
                [
                    'entity' => '',
                    'search_by' => '',
                    'fk_column' => ''
                ]
            ]     
        ],
        'fields' => [],
        'validations' => [
            'create' => [],
            'update' => [],
            'delete' => []
        ]
    ]

实体:处理数据的实体,该实体的名称应与项目中创建的文件名称相同。

顺序:相关实体数据执行的顺序。

类型:这有助于识别正在执行的具体实体类型,该包支持两种实体类型

  • 父级:不依赖于在功能流中正在执行的其他任何实体。
  • 子级:依赖于在功能流中已声明并需要在执行之前先执行的其他实体,以进行正确存储。

有ID:指示实体是否有'ID'字段,这用于验证是否需要获取已注册数据的ID,该字段是可选的,默认值为true

创建者:实体中用于存储执行操作的用户的ID的字段,这是一个可选字段,默认在正在处理的实体字段中查找user_id属性,如果没有这个属性,则简单地忽略存储此字段并继续流程。

通过什么搜索:实体中用于在数据库中搜索记录的字段,这仅适用于类型为updatedelete的操作。

审计日期:是实体中存储存储或更新时的日期和时间的字段,例如created_at

外键 -> 内部流程:需要存储在子实体中的外键,这些外键来自在功能流中已处理并在该实体之前执行的父实体,此字段为array类型,因为实体可能需要多个值才能处理。

    'foreign_keys' => [
        'in_flow' => [
            'Entity' => 'field'
        ]
    ]

    * Entity: Entidad padre desde donde se obtendrá el id, esta debe estar declarada 
            dentro de la funcionalidad.
    * Field: Campo de la entidad hija que requiere el valor.  

外键 -> 外部流程:需要存储在实体中的外键,但不属于功能流。此字段为array类型,因为实体可能需要多个值才能处理。

    'foreign_keys' => [
        'out_flow' => [
            [
                'entity' => Entidad en la que se buscará el registro requerido,
                'search_by' => Campo de la entidad por el cual buscará el registro en la base de datos,
                'fk_column' => Campo de la entidad que requiere el valor, este ayuda a identificar el 
                        campo con el cual se tiene que intercambiar el valor una vez obtenido el registro
            ]
        ]
    ]

字段:将启用批量加载的表字段,如果功能需要自定义实体存储,则使用这些字段。这是一个可选字段,默认情况下,包将获取在模型配置中声明的字段。

验证:用于更严格数据存储的Laravel Validator验证,如果功能需要针对实体存储进行自定义验证,则使用这些验证。这是一个可选字段,默认情况下,包将获取在模型配置中声明的字段。

模型配置

在每个模型中添加一个新的公共变量,该变量将具有执行批量加载的选项。

    public $massiveUpload = [
        'table_name' => '',
        'fields' => [],
        'validations' => [
            'create' => [],
            'update' => [],
            'delete' => []
        ]
    ];

表名:存储发送的元素的数据库表。

字段:将启用批量加载的表字段。

验证:用于更严格数据存储的Laravel Validator验证。