hitocean/crud-generator

This is my package crud-generator

Fund package maintenance!
Hitocean

1.0.3 2024-06-24 00:25 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Installation

You can install the package via composer:

composer require hitocean/crud-generator

Usage

Configuracion de modelo

php artisan make:hit-model-config

Este comando permite generar un archivo de configuracion para la generacion de un modelo. Este archivo va a estar situado en la carpeta generators/models.

El archivo generado se puede ver asi.

{
    "modelName": "Company",
    "root_folder": "src/Domain/Company/Models",
    "root_namespace": "Src\\Domain\\Company\\Models",
    "tableName": "companies",
    "crud": true,
    "attributes": [
        {
            "name": "name",
            "type": "string"
        },
        {
            "name": "email",
            "type": "string"
        },
        {
            "name": "address",
            "type": "?string"
        }
    ]
}

En este archivo se pueden modificar todos los valores que se deseen antes de generar los archivos para el modelo.

Crear Modelo

php artisan make:hit-model

Este comando permite generar un modelo con los atributos y relaciones que se definieron en el archivo de configuracion. Va a generar los siguientes archivos:

  • Modelo
  • Factory
  • Migracion

Es importante destacar que al correr el comando se van a tratar de crear todos los archivos dentro de generators/models. Por lo que si un modelo ya esta creado lo va a intentar reemplazar.

Configuracion de controlador

php artisan make:hit-controller-config

Al igual que para con los modelos, este comando crea un archivo de configuracion con el que luego se creara el controlador. Este archivo se crea en la carpeta generators/controllers.

Consideraciones

  • Es necesario que el modelo sobre el cual se va a generar el controlador ya este creado y migrado.
  • Al ejecutar el comando nos va a solicitar que elijamos que metodos de un crud queremos generar, para marcarlos hay que tocar la barra espaciadora.

El archivo generado se puede ver asi:

{
    "controller_name": "CompanyController",
    "root_folder": "src/Application/Company/Controllers",
    "root_namespace": "Src\\Application\\Company\\Controllers",
    "model_import": "Src\\Domain\\Company\\Models\\Company",
    "test_path": "tests/Application/Company/Controllers/CompanyControllerTest",
    "methods": [
        {
            "name": "index",
            "route_method": "get",
            "data_class_import": null,
            "data_class_path": null,
            "resource_class_import": "Src\\Application\\Company\\Resources\\IndexCompanyResource",
            "resource_class_path": "src/Application/Company/Resources/IndexCompanyResource",
            "inputs": [],
            "outputs": [
                {
                    "name": "id",
                    "type": "int"
                },
                {
                    "name": "name",
                    "type": "string"
                },
                {
                    "name": "email",
                    "type": "string"
                },
                {
                    "name": "address",
                    "type": "string"
                },
                {
                    "name": "created_at",
                    "type": "date"
                },
                {
                    "name": "updated_at",
                    "type": "date"
                }
            ]
        },
        {
            "name": "store",
            "route_method": "post",
            "data_class_import": "Src\\Application\\Company\\Data\\StoreCompanyData",
            "data_class_path": "src/Application/Company/Data/StoreCompanyData",
            "resource_class_import": null,
            "resource_class_path": null,
            "inputs": [
                {
                    "name": "id",
                    "type": "int"
                },
                {
                    "name": "name",
                    "type": "string"
                },
                {
                    "name": "email",
                    "type": "string"
                },
                {
                    "name": "address",
                    "type": "string"
                },
                {
                    "name": "created_at",
                    "type": "date"
                },
                {
                    "name": "updated_at",
                    "type": "date"
                }
            ],
            "outputs": []
        },
        {
            "name": "update",
            "route_method": "put",
            "data_class_import": "Src\\Application\\Company\\Data\\UpdateCompanyData",
            "data_class_path": "src/Application/Company/Data/UpdateCompanyData",
            "resource_class_import": null,
            "resource_class_path": null,
            "inputs": [
                {
                    "name": "id",
                    "type": "int"
                },
                {
                    "name": "name",
                    "type": "string"
                },
                {
                    "name": "email",
                    "type": "string"
                },
                {
                    "name": "address",
                    "type": "string"
                },
                {
                    "name": "created_at",
                    "type": "date"
                },
                {
                    "name": "updated_at",
                    "type": "date"
                }
            ],
            "outputs": []
        },
        {
            "name": "destroy",
            "route_method": "delete",
            "data_class_import": null,
            "data_class_path": null,
            "resource_class_import": null,
            "resource_class_path": null,
            "inputs": [],
            "outputs": []
        },
        {
            "name": "show",
            "route_method": "get",
            "data_class_import": null,
            "data_class_path": null,
            "resource_class_import": "Src\\Application\\Company\\Resources\\ShowCompanyResource",
            "resource_class_path": "src/Application/Company/Resources/ShowCompanyResource",
            "inputs": [],
            "outputs": [
                {
                    "name": "id",
                    "type": "int"
                },
                {
                    "name": "name",
                    "type": "string"
                },
                {
                    "name": "email",
                    "type": "string"
                },
                {
                    "name": "address",
                    "type": "string"
                },
                {
                    "name": "created_at",
                    "type": "date"
                },
                {
                    "name": "updated_at",
                    "type": "date"
                }
            ]
        }
    ]
}

Crear controlador

php artisan make:hit-controller

IMPORTANTE: Se van a crear todos los controladores que esten dentro de la carpeta generators/controllers. En caso de que ya existan los va a sobreescribir.

Al ejecutar este comando se van a crear los siguientes archivos:

  • Controller.
  • Data.
  • Resource.
  • Test.

Consideraciones

  • Es necesario registrar la ruta donde corresponda, el paquete no lo hace automaticamente.
  • Al UpdateData que se genera no tiene en cuenta que viene un route parameter hay que agregarselo manualmente. EJ: #[FromRouteParameter('company')]
  • las relaciones en los controladores no estan contempladas aun.

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.