Model

In this guide, we'll go through the steps to create a new model in your SoapJS project. You can create models using CLI commands, interactive forms, or by defining them in a JSON file.

export type ProductJsonModel = {
  price: number,
  stock: number
}

export type ProductMongoModel = {
  price: number,
  stock: number
}

Creating new model

Using CLI Command with options

To create a new models directly via the CLI, use the following command:

soap new model -n "Product" -e "shop" -p "price:number,stock:number" -t "json, mongo" -w -f

Options explained:

  • -n: Name of the model (e.g., "product").

  • -e: Endpoint associated with the model (e.g., "shop").

  • -p: Properties of the model in "name:type" format, separated by commas.

  • -t: Types of the model, separated by commas.

  • --no-tests: Skip test generation.

  • --no-rel: Skip generating related files. You can also specify specific groups.

  • --force: Force the creation, overwrite files if necessary.

  • --patch: Add content to the files if they exists.

  • --help: display help for command

Using Interactive Form

If you prefer to use an interactive form to specify your model details, simply run:

soap new model -w -f

Follow the prompts to enter your model's details.

Using JSON Configuration

Alternatively, you can define your models in a JSON file. Here is an example structure:

{
  "models": [
    {
      "name": "Product",
      "endpoint": "shop",
      "types": [
        "json",
        "mongo"
      ],
      "props": [
        {
          "name": "price",
          "type": "number"
        },
        {
          "name": "stock",
          "type": "number"
        }
      ]
    }
  ]
}

Save this to a file, for example api.json, and run:

soap new --json "./path/to/api.json" -w -f

Options:

  • --json: Path to your JSON configuration file.

  • -w: Generate with dependencies included.

  • -f: Force the creation, overwrite files if necessary.

  • --help: display help for command

File Structure

After creating your models, your file structure (assuming default configuration settings) should look like this:

src/
  - shop/
    - data/
      - dtos/
        - product.dto.ts
        - index.ts
...

This structure helps maintain a clean separation of your domain logic, keeping your models organized within the data/dtos/ directory.

Last updated