Download Kukulkan VS Code Extension

Comandos básicos

Nota:
Kukulkan Shell cuenta con función de autocompletado de los comandos al presionar la tecla TAB.
Por ejemplo, sta + TAB completará el comando stacktrace en la línea de comandos.

Comandos de navegación

NAME
    create-project - Generate a Project from an Archetype Catalog

SYNOPSYS
    create-project [--app-name] string  [--packaging] string  [[--database-type] database-type]  

OPTIONS
    --app-name  string

        [Mandatory]
        [no puede ser null]

    --packaging  string

        [Mandatory]
        [no puede ser null]

    --database-type  database-type

        [Optional, default = NO_SQL_MONGODB]

Ejemplo:

create-project --app-name demo  --packaging mx.infotec.dads.demo --database-type SQL_MYSQL

Nota: Si se encuentra git instalado se realizan las siguientes acciones luego de crear el nuevo proyecto:

Prompt

Cuando se navega a un directorio que contiene a la raíz de un proyecto generado con Kukulkán, el prompt se muestra diferente:

kukulkan @app @git/develop
NAME
    config - Configurate the project

SYNOPSYS
    config [[--type] configuration-type]  

OPTIONS
    --type  configuration-type

        [Optional, default = FRONT_END]

Este comando es un wrapper de los siguientes comandos:

NAME
    run - Run a Spring-Boot App

SYNOPSYS
    run [[--profile] profile]  

OPTIONS
    --profile  profile

        [Optional, default = DEV]

El DSL de Kukulkan se utiliza para definir un modelo de dominio, con entidades y relaciones.

Declaración de entidades

Sintaxis:

entity <entity-name> [entity-table-name] {
    [<attribute-name> : <data-type> [<validator>*]
}

Declarar una entidad sin atributos

entity Person

Declarar una entidad con atributos

entity Person {
    name: String required,
    lastName: String
}

Todas las entidades contienen un atributo id por defecto.

Tipos de dato:

Guía de relaciones con JPA

Sintaxis:

entity <entity-name> (entity-table-name) {
    <relationship-type> [to-source-attribute-name] <attribute-name> : <entity>
}

Tipos de relación:

Relación Unidireccional

entity Person {
    name: String,
    OneToOne address: Address
}
entity Address {
    street: String
}

Relación Bidireccional

entity Person {
    name: String,
    OneToOne (person) address: Address
}
entity Address {
    street: String required
}

Nótese que en las relaciones bidireccionales se define un elemento extra (person), esto significa que:

Display field

El display field es el atributo de la entidad que se muestra en la interfaz gráfica cuando es referenciada mediante una relación con otra entidad. Por defecto es el atributo id pero se puede cambiar usando el símbolo de flecha -> en la declaración de la entidad. Por ejemplo:

entity Person {
    name: String,
    OneToOne address: Address
}
entity Address {
    -> street: String required
}

Se usará street, en lugar de id, como display field en el formulario de creación/edición de la entidad Person.

Relación con CoreUser

En el DSL de Kukulkan, CoreUser es una palabra reservada para representar a la entidad User que se crea junto con el arquetipo. Esta entidad se puede asociar con cualquier otra definida por el usuario pero solo tiene soporte para los tipos de relación unidireccional OneToOne, ManyToOne y ManyToMany. Por ejemplo:

entity Person {
    OneToOne user: CoreUser
}

Nótese que no es necesario declarar ni importar a CoreUser en el modelo de dominio.

NAME
    add-entities-from-language - Generate all the entities that come from a file with .3k or .kukulkan extension

SYNOPSYS
    add-entities-from-language [--file-name] string  [[--exclude-layers] string]  

OPTIONS
    --file-name  string

        [Mandatory]

    --exclude-layers  string

        [Optional, default = @all]

Nota:
Luego de la adición de entidades al proyecto Kukulkán Shell ejecuta el comando config --type FRONT_END para asegurarse que los archivos generados en el front-end sean inyectados al index.html, entre otras acciones.

Cliente (Front-end, AngularJS)

app/entities/person/person.service.js

Este servicio consume la API REST del servidor

app/entities/person/person.controller.js

Controlador: está enlazado a la vista

app/entities/person/persons.html

Vista: Muestra todas las personas existentes

app/entities/person/person.state.js

Estado (o ruta): Define el estado ‘person' y la url de la vista

Servidor (Back-end, Spring Boot)

mx.infotec.dads.demo.domain.Person

Entidad de dominio (POJO)

mx.infotec.dads.demo.repository.PersonRepository

Aquí van los queries a la BD

mx.infotec.dads.demo.service.PersonService

Aquí se definen los métodos del servicio

mx.infotec.dads.demo.service.impl.PersonServiceImpl

Implementación de la interfaz PersonService (utiliza a PersonRepository)

mx.infotec.dads.demo.web.rest.PersonResource

Servicio REST (utiliza a PersonService)