Coder Social home page Coder Social logo

backend-plus's Introduction

backend-plus

Backend for typed-controls

stable npm-version downloads build coverage dependencies

language: English also available in: Spanish

It's a framework for developing web applications based on PostgreSQL database. It's main features are:

  1. It is based on centralized metadata that defines:
    1. The data structure (tables and views structure)
    2. The procedures structure (param definition, permissions, encoding)
    3. The menus structure
  2. It provides:
    1. Editable grids (orderable and filterable), with support for edit data using XLSX format files
    2. Login mechanism
    3. Menus
    4. Skins definition

API

Menus definition

menuType use
menu menu or submenu
table grid or table
proc procedures
property type default value menuType use
menuType T menu Type
name T option name (id)
menuContent A menu menu content
table T name table table name
label T name if you don't want to use default value to display in menu
selectedByDefault B is the selected by default option

Integrating example:

    getMenu(context){
        return {menu:[
            {menuType:'menu', name:'periodic table', menuContent:[
                {menuType:'table', name:'ptable'  , label:'elements'},
                {menuType:'table', name:'pgroups' , label:'groups'  },
                {menuType:'table', name:'isotopes', label:'isotopes'},
                {menuType:'proc' , name:'count_without_isotopes', label:'count'}
            ]},
            {menuType:'table', name:'images', table:'element_images'},
            {menuType:'menu', name:'test', menuContent:[
                {menuType:'table', name:'bigint'},
            ]},
            {menuType:'menu', name:'config', menuContent:[
                {name:'users', menuType:'table'},
            ]},
        ]}
    }

Procedures definition

procDef:

property type default value use
action T Name that will be invoked the procedure
bitacora BO { error:false, always:false } Bitacora Object for core functions register
parameters POA [] Param Objects Array
cacheable Bool false The result can be cached
coreFunction F Function that implements the procedure

bitacoraDef:

propiedad tipo default value uso
error B false If true, bitacora saves data of error ocurred during core function execution
always B false If true, bitacora saves all data ocurred during core function execution (overrides error)
targetTable T null Tablename for update result of execution data (must to exists a record for update) (see targetTableBitacoraFields). Use null for ignore option
targetTableBitacoraFields O { init_date: 'init_date', end_date: 'end_date', has_error: 'has_error', end_status: 'end_status'} Objects who defines the fields where 'targetTable' will reply bitacora fields (If targetTable is null it's ommited)
targetTableUpdateFieldsCondition A null Fields array to define update condition (each value must to be passed as parameter with the same field name)

paramDef:

property type default value use
name T name of the parameter that is sent to the procedure
defaultValue según typeName parameter default value
typeName T to define the data type
label T name if you don't want to use default value to display on screen

coreFunction(context, parameters)

context uso
be backendApp object
username username

Process definition example:

    {
        action:'count_without_isotopes',
        bitacora:{
                   error:true,
                   always:true,
                   targetTable:'other_table',
                   targetTableBitacoraFields: {
                                                init_date: 'fecha_hora_inicio',
                                                end_date: 'fecha_hora_final',
                                                has_error: 'hubo_error',
                                                end_status: 'resultado'
                                              },
                   targetTableUpdateFieldsCondition: ['id']
                 },
        parameters:[
            {name:'first_atomic_number', defaultValue:10, typeName:'integer'},
            {name:'last_atomic_number' , defaultValue:99, typeName:'integer'},
        ],
        coreFunction:function(context, parameters){
            return context.client.query(
                `SELECT count(*) as number_of_elements
                   FROM ptable p left join isotopes i on p.atomic_number=i.atomic_number
                   WHERE i.atomic_number IS NULL
                     AND p.atomic_number between coalesce($1,0) and coalesce($2,999)`,
                [parameters.first_atomic_number, parameters.last_atomic_number]
            ).fetchUniqueRow().then(function(result){
                return result.row.number_of_elements;
            });
        }
    },

def-config

/// def-config.ts
export defConfig=`
server:
  port: 3000
  base-url: /my-app
db:
  motor: postgresql
  host: localhost
  database: my_app_db
  user: my_app_user
install:
  dump:
    db:
      owner: my_app_owner
client-setup:
  title: My app
  lang: es
`;

/// main.ts
import {defConfig} from "./def-config"

export function emergeMyApp<T extends Constructor<AppBackend>>(Base:T){
    /// ...
    configStaticConfig(){
        super.configStaticConfig();
        this.setStaticConfig(defConfig);
    }
    ///...
}

The general application config is setted with setStaticConfig. Any option can be overwrited in local-config.yaml file.

BACKEND_PLUS_LOCAL_CONFIG enviroment variable can be a filename.yaml with more config options.

config format:

entry usage
server
.port port where is listening
.base-rul base url added to domain name
.module-store
install (see Spanish)
.dump (see Spanish)
..db.owner (see Spanish)
..scripts.post-adapt (see Spanish)
..scripts.parts-order (see Spanish)
devel (see Spanish)
.delay (see Spanish)
.cache-content (see Spanish)
.forceShowAsEditable (see Spanish)
login (see Spanish)
.plus (see Spanish)
..allowHttpLogin (see Spanish)
log (see Spanish)
.req (see Spanish)
.session (see Spanish)
client-setup (see Spanish)
.cursors (see Spanish)
.skin (see Spanish)
.menu (see Spanish)
.title (see Spanish)
.lang (see Spanish)
install:
  dump:
    db:
      owner: user_owner
    scripts:
      post-adapt: [special_triggers.sql, other_constraints.sql]
login:
  plus:
    allowHttpLogin: true
    store:
      module-name: file
log:
  req: true
  session: true
devel:
  cache-content: true

Install

$ npm install backend-plus

License

MIT


backend-plus's People

Contributors

diegoefe avatar ebtonini avatar emilioplatzer avatar estefi-capece avatar euginio avatar julilvicente avatar manueldelapenna avatar raquelsalva avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.