{
    "application": {
        "name": "MyProject"
    },
    "namespaces": {
        "entity": "MyProject.Classes",
        "data": "MyProject.DataAccess",
        "mvc": "MyProject.Controllers",
        "api": "MyProject.Api"
    },
    "data": {
        "use": "sqlite",
        "sqlite": {
            "provider": "Sqlite",
            "connection": "Filename=./MyDatabase.db"
        },
        "sqlserver": {
            "provider": "SqlServer",
            "connection": "Server=;Initial Catalog=;Persist Security Info=;User ID=;Password=;MultipleActiveResultSets=;Encrypt=;TrustServerCertificate=;Connection Timeout=;"
        }
    },
    "entities": [
        {
            "name": "Person",
            "properties": [
                { "name": "name", "type": "string", "maxlength": 100 },
                { "name": "email", "type": "string", "maxlength": 100 },
                { "name": "birthDate", "type": "date" }
            ]
        },
        {
            "name": "Pet",
            "properties": [
                { "name": "name", "type": "string", "maxlength": 100 },
                { "name": "description", "type": "string" },
                { "name": "age", "type": "int" }
            ],
            "refs": [
                { "name": "owner", "entity": "Person", "collection": "pets" }
            ]
        }
    ],
    "api": [
        {
            "name": "PetOwners",
            "commands": [
                {
                    "name": "addPet",
                    "params": [
                        { "name": "PersonID", "type": "guid" },
                        { "name": "Pet", "type": "Pet" }
                    ]
                }
            ],
            "queries": [
                {
                    "name": "PersonAndPets",
                    "params": [
                        { "name": "PersonID", "type": "guid?" }
                    ],
                    "entity": "Person",
                    "includes": [
                        "pets"
                    ],
                    "where": "PersonID == null || _.ID == PersonID"
                }
                ,
                {
                    "name": "PetAndOwner",
                    "params": [
                        { "name": "PetName", "type": "string?" }
                    ],
                    "entity": "Pet",
                    "includes": [
                        "owner"
                    ],
                    "where": "string.IsNullOrEmpty(PetName) || _.name == PetName"
                }

            ]
        }
    ]
}