yekonga-server

4.0.16 • Public • Published

Yekonga Server

oclif Version Downloads/week License

Yekonga Server is an open source backend that can be deployed to any infrastructure that can run Node.js.

Description

Yekonga Server works with the Express web application framework. It can be added to existing web applications, or run by itself.

Contents

Getting Started

Installing

you can install globelly

npm install -g yekonga-server 

OR direct to your project

npm install --save yekonga-server

Create server

VERSION
  yekonga-server/2.1.7 win32-x64 node-v14.15.4

USAGE
  $ yekonga [COMMAND]

COMMANDS
  create    Describe the command here
  generate  Describe the command here
  help      display help for yekonga
  

Create project command

USAGE
  $ yekonga create [PROJECT]

OPTIONS
  -d, --dirname=dirname  app directory name
  -f, --force            Force generate / overide existing
  -h, --help             show CLI help
  -n, --name=name        app name
  -p, --port=port        [default: 1093] server running port
  -p, --public=public    [default: public] generate public directory
  -t, --triggers         create triggers function
  -t, --template         generate template
  -v, --version          show CLI version

Generate triggers command

USAGE
  $ yekonga generate

OPTIONS
  -c, --config=config      App config file name
  -d, --database=database  App database structure file name
  -f, --force              Force generate / overide existing
  -h, --help               show CLI help
  -t, --trigger=trigger    Trigger name
  -t, --triggers           Force generate / overide existing
  -v, --version            show CLI version

Running Yekonga Server

require('yekonga-server');
// configation json file
const config = require('./config.json');

// database structure json file
const database = require('./database.json');

// set configarations
Yekonga.setConfig(config, database); 

// start the server
Yekonga.startServer();  

Database structure

database structure is json array of objects, Database structure sample json file with "users" collection

[
    {
        "_id": { "collection": "users" },
        "userId": { "type": "String", "default": null, "required": true },
        "firstName": { "type": "String", "default": null, "required": true },
        "lastName": { "type": "String", "default": null, "required": true },
        "email": { "type": "String", "default": null, "required": true },
        "password": { "type": "String", "default": null, "required": true },
        "role": { "type": "String", "default": null, "required": true },
        "token": { "type": "String", "default": null, "required": false },
        "status": { "type": "Number", "default": 0, "required": true },
        "isActive": { "type": "Boolean", "default": false, "required": true },
        "createdAt": { "type": "Date", "default": "now", "required": false },
        "updatedAt": { "type": "Date", "default": "now", "required": false }
    },
]

Take one field of users collection

"userId": { "type": "String", "default": null, "required": true },
  • "userId" is the field of the collection/table
  • "type" => userId.type is data type to be stored
  • "default" => userId.default is default value
  • "required" => userId.required werether the value required or not

Database structure can be accessed via

Yekonga.Schema

Configuration

Configuration value can be accessed as below

// config value can be access by 
Yekonga.Config.{key}

// example
Yekonga.Config.appName
Yekonga.Config.ports.server

Configuration is the json file with below data

Key Default Value Type Description
appName System String Option Name of the application
appId null String Option Application ID
masterKey null String Option application key
enableAppKey false boolean Option Make api access require appId or not
domain null string Option main domain that allow to access app
domainAlias [] array Option all alowed domains
address System String Option host IP address
baseUrl System String Option -
restApi System String Option -
restAuthApi System String Option -
secureOnly System String Option -
debug System String Option -
endToEndEncryption System String Option -
authPlaygroundEnable System String Option -
apiPlaygroundEnable System String Option -
enableDashboard false boolean Option -
allowCreateFrontend false boolean Option -
namingConvection camelcase String Option camelcase, underscorecase
columnNamingConvection underscorecase String Option -
namingConvectionOptions ["camelcase", "underscorecase"] array Option -
public public String Option -
cloud null String Option -
logFile null String Option -
emailTemplate null String Option -
googleApiKey null String Option -
permissions more... object Option -
graphql more... object Option -
defaultDatabase mongoDB String Option -
database more... object required -
authentication more... object Option -
ports more... object Option -
mail more... object Option -

Permissions configuration

Key Default Value Type Description
authActions [] array Option -
guestActions [] array Option -

Graphql configuration

Key Default Value Type Description
apiRoute null string Option graphql api route
apiAuthRoute null string Option graphql api route
customTypes null string Option relative path of custom graphql schema
customResolvers null string Option relative path of custom graphql resolver
customAuthTypes null string Option relative path of auth custom graphql schema
customAuthResolvers null string Option relative path of auth custom graphql resolver
enabledForClasses [] array Option -
disabledForClasses [] array Option -
authResolvers [] array Option -
authClasses [] array Option -
guestResolvers [] array Option -
guestClasses [] array Option -
authQuery more... string Option -

Graphql.authQuery configuration

Key Default Value Type Description
user [] array Option field that are to be queried on users
account [] array Option field that are to be queried on accounts

Database configuration

Key Default Value Type Description
{key} more... object Option -

Database.{key} configuration

Key Default Value Type Description
type null string Option -
host null string Option -
port null string Option -
databaseName null string Option -
username null string Option -
password null string Option -
prefix null string Option -
generateID null string Option -
generateIDLengh null string Option -

Authentication configuration

Key Default Value Type Description
saltRound 7 number Option -
algorithm HS512 string Option -
tokenSecret null string Option -
cryptojsKey null string Option -
cryptojsIv null string Option -

Ports configuration

Key Default Value Type Description
server null number Option -
secure null number Option -
socket null number Option -
redis null number Option -

Mail configuration

Key Default Value Type Description
smtp more... object Option -

Mail.smtp configuration

Key Default Value Type Description
service null string Option -
host null string Option -
port null number Option -
secure null boolean Option -
from null string Option -
domain null string Option -
username null string Option -
password null string Option -

Database Function

DataModel Functions

All DataModel method return promise

Yekonga.DataModel.{Class}.{method}(args);
Method Params Result Description
findOne filter, context, isAdmin object return object of Model class eg User
find filter, context, isAdmin array return array of object of Model class eg User
paginate filter, context, isAdmin object return object of Model class eg User
download filter, context, isAdmin object return object of Model class eg User
summary filter, context, isAdmin object return object of Model class eg User
count filter, context, isAdmin object return object of Model class eg User
sum filter, context, isAdmin object return object of Model class eg User
max filter, context, isAdmin object return object of Model class eg User
min filter, context, isAdmin object return object of Model class eg User
graph filter, context, isAdmin object return object of Model class eg User
create filter, context, isAdmin object return object of Model class eg User
update filter, context, isAdmin object return object of Model class eg User
delete filter, context, isAdmin object return object of Model class eg User

Examples

let user = await Yekonga.DataModel.User.findOne({}, null, true);

Database Functions

Examples

// single user object
let users = Yekonga.DB.table('users')
    .where('userId', 'xxx')
    .findOne();

// list of users
let users = Yekonga.DB.table('users').find();

Cloud Functions

Define Functions

Define function

Yekonga.Cloud.define('someFunction', async function(data) {

});

Run defined function

Yekonga.Cloud.run('someFunction', data);

Trigger Functions

Before Login

Yekonga.Cloud.beforeLogin(async (data) => { /* code goes here */ });

After Login

Yekonga.Cloud.afterLogin(async (data) => { /* code goes here */ });

Before OTP

Yekonga.Cloud.beforeOtp(async (data) => { /* code goes here */ });

After OTP

Yekonga.Cloud.afterOtp(async (data) => { /* code goes here */ });

Before Registration

Yekonga.Cloud.beforeRegistration(async (data) => { /* code goes here */ });

After Registration

Yekonga.Cloud.afterRegistration(async (data) => { /* code goes here */ });

Before Reset Password

Yekonga.Cloud.beforeResetPassword(async (data) => { /* code goes here */ });

After Reset Password

Yekonga.Cloud.afterResetPassword(async (data) => { /* code goes here */ });

Before Change Password

Yekonga.Cloud.beforeChangePassword(async (data) => { /* code goes here */ });

After Change Password

Yekonga.Cloud.afterChangePassword(async (data) => { /* code goes here */ });

Before Logout

Yekonga.Cloud.beforeLogout(async (data) => { /* code goes here */ });

After Logout

Yekonga.Cloud.afterLogout(async (data) => { /* code goes here */ });

Before Find

Yekonga.Cloud.beforeFind('User', async (filter, context) => { /* code goes here */ });

After Find

Yekonga.Cloud.afterFind('User', async (filter, context) => { /* code goes here */ });

Before Save

Yekonga.Cloud.beforeSave('User', async (input, filter, context) => { /* code goes here */ });

After Save

Yekonga.Cloud.afterSave('User', async (result, input, context) => { /* code goes here */ });

Before Create

Yekonga.Cloud.beforeCreate('User', async (input, filter, context) => { /* code goes here */ });

After Create

Yekonga.Cloud.afterCreate('User', async (result, input, context) => { /* code goes here */ });

Before Update

Yekonga.Cloud.beforeUpdate('User', async (input, filter, context) => { /* code goes here */ });

After Update

Yekonga.Cloud.afterUpdate('User', async (result, input, context) => { /* code goes here */ });

Before Delete

Yekonga.Cloud.beforeDelete('User', async (filter, context) => { /* code goes here */ });

After Delete

Yekonga.Cloud.afterDelete('User', async (result, context) => { /* code goes here */ });

Custom url

const app = Yekonga.route;

app.get('/custom-url', function(req, res){

    return res.send('This is custom url');
});

Helper functions

Method Params Result Description
Yekonga.Helper.execAsync (cmd, pipe, callback) String -
Yekonga.Helper.encrypt (data) String -
Yekonga.Helper.decrypt (data) String -
Yekonga.Helper.bcrypt (value) String -
Yekonga.Helper.formatPhone (value) String -
Yekonga.Helper.get, async (url, headers) String -
Yekonga.Helper.post, async (url, body, headers, multipart) String -
Yekonga.Helper.request (method, options) String -
Yekonga.Helper.saveFile (data, dir) String -
Yekonga.Helper.generateFile (template, options) String -
Yekonga.Helper.createFile (file, data, isRoot) String -
Yekonga.Helper.writeFile (file, data, isRoot) String -
Yekonga.Helper.readFile (file) String -
Yekonga.Helper.copy (source, dist, root) String -
Yekonga.Helper.rootpath (filename) String -
Yekonga.Helper.realpath (filename) String -
Yekonga.Helper.setLocation (location) String -
Yekonga.Helper.checkLocation (name, tag, parent) String -
Yekonga.Helper.storeFile (req, res) String -
Yekonga.Helper.setLocalAddress, async (content) String -
Yekonga.Helper.getSystemInfo () String -
Yekonga.Helper.textTemplate (templateString, data) String -
Yekonga.Helper.uuid () String -
Yekonga.Helper.uuid3 () String -
Yekonga.Helper.uuid4 () String -
Yekonga.Helper.uuid5 () String -
Yekonga.Helper.uniqueId (table) String -
Yekonga.Helper.getRandomString (length, type) String -
Yekonga.Helper.getRandomInt (length) String -
Yekonga.Helper.getHexString (length) String -
Yekonga.Helper.databaseUUID () String -
Yekonga.Helper.getTitle (value) String -
Yekonga.Helper.getHeading (value) String -
Yekonga.Helper.getSentence (value) String -
Yekonga.Helper.getSlug (value) String -
Yekonga.Helper.getLink (value) String -
Yekonga.Helper.getName (value) String -
Yekonga.Helper.getTable (value) String -
Yekonga.Helper.getClass (value) String -
Yekonga.Helper.getClassVariable (value, singular) String -
Yekonga.Helper.getVariable (value) String -
Yekonga.Helper.getColumn (value) String -
Yekonga.Helper.formatToVariables (value) String -
Yekonga.Helper.formatToColumn (value) String -
Yekonga.Helper.getDefaultValues (value) String -
Yekonga.Helper.getValidFields (input, validFields, isCreate, relations) String -
Yekonga.Helper.getUnderscore (value) String -
Yekonga.Helper.isRelation (value) String -
Yekonga.Helper.isBoolean (value) String -
Yekonga.Helper.toPlural (value) String -
Yekonga.Helper.toSingular (value) String -
Yekonga.Helper.getTableByName (value) String -
Yekonga.Helper.getPrimaryName (schema) String -
Yekonga.Helper.getChildren (schema) String -
Yekonga.Helper.getParents (schema) String -
Yekonga.Helper.getRelationName (table) String -
Yekonga.Helper.getAbbreviation (name) String -
Yekonga.Helper.getTimestampInt (value) String -
Yekonga.Helper.getIsoTimestamp (value) String -
Yekonga.Helper.toTimestampString (value, format = 'YYYY-MM-DD HH:mm:ss') String -
Yekonga.Helper.getTimestamp (format = 'YYYY-MM-DD HH:mm:ss') String -
Yekonga.Helper.getDate (format = 'YYYY-MM-DD') String -
Yekonga.Helper.getTime (format = 'HH:mm') String -
Yekonga.Helper.copyJson (value) String -
Yekonga.Helper.isGeneralTable (data, ignore = false) String -
Yekonga.Helper.isId (name) String -
Yekonga.Helper.isColumnUrl (name) String -
Yekonga.Helper.isColumnMultiple (name) String -
Yekonga.Helper.isLongText (name) String -
Yekonga.Helper.isTimestampColumn (name, data) String -
Yekonga.Helper.isSearchColumn (name, data) String -
Yekonga.Helper.isTypeColumn (name, data) String -
Yekonga.Helper.isMap (name) String -
Yekonga.Helper.isNumeric (value) String -
Yekonga.Helper.getGraphqlType (name, field, isInput = false) String -
Yekonga.Helper.getMongodbType (name, field) String -
Yekonga.Helper.getMongodbDefault (name, field) String -
Yekonga.Helper.getType (name, value) String -
Yekonga.Helper.getInput (name, type) String -
Yekonga.Helper.bcryptPassword (value) String -
Yekonga.Helper.attemptLogin async (key, value, password, type = "normal") String -
Yekonga.Helper.getLoginData async (user, accountId = null) String -
Yekonga.Helper.getToken (payload) String -
Yekonga.Helper.getRelatedTable (value) String -
Yekonga.Helper.getSchemaOf (name) String -
Yekonga.Helper.schemaToData (name) String -
Yekonga.Helper.getTableDataWithRelations () String -
Yekonga.Helper.translate async (content, from, to) String -
Yekonga.Helper.colorize = function colorize(color, output) String -
Yekonga.Helper.printLog (title, text, color = 'white', newLine = true) String -
Yekonga.Helper.log (title, text, color = 'white') String -
Yekonga.Helper.logInline (title, text, color = 'white') String -
Yekonga.Helper.wait async (time = 10000) String -
Yekonga.Helper.hasManyThrough (child, data) String -
Yekonga.Helper.addSlashes (value) String -
Yekonga.Helper.escape (value) String -
Yekonga.Helper.validateEmail (email) String -
Yekonga.Helper.isEmail (email) String -
Yekonga.Helper.translateProcess async (live, locale, lang, flag) String -
Yekonga.Helper.createLanguage async (db, locale, lang, flag) String -
Yekonga.Helper.saveTranslation async (db, row) String -
Yekonga.Helper.savePermission async (db, row) String -
Yekonga.Helper.translateBandle async (trans, locale, db) String -
Yekonga.Helper.encryptUrl (body) String -
Yekonga.Helper.decryptUrl (body) String -
Yekonga.Helper.isPermitted (key, defaultValue = false) String -
Yekonga.Helper.sendMail async (options) String -
Yekonga.Helper.getEmailContent (name, content) String -
Yekonga.Helper.getRegistrationEmail async (name, content) String -
Yekonga.Helper.getResetPasswordEmail async (name, content) String -

Graphql

Custom Action

Action for approve user example

Yekonga.Cloud.setAction('User', 'approve', async ({params})=>{
    const {where, action, accessRole } = (params)? params: {};

    return await Yekonga.DataModel.User.update({ status: 1}, where, null, true);
})

The mutation for above will be as shown below

mutation {
    userAction(where:{userId:{equalTo:"xxx"}}, action:"approve") {
        status
        message
    }
}
  • User is class name
  • approve is action name, can be anything string

Custom Graphql

Custom graphql schema must be configued on the customTypes in Graphql Configuration in config file

Note: for auth Custom graphql resolver must be configued on the customAuthTypes in Graphql Configuration in config file

Graphql schema example

type BlockUserResponse {
    status: Boolean,
    success: Boolean
}

extend type Query {
    blockUser ( userId: String! ): BlockUserResponse,
}

Custom graphql resolver must be configued on the customResolvers in Graphql Configuration in config file

Note: for auth Custom graphql resolver must be configued on the customAuthResolvers in Graphql Configuration in config file

Graphql resolver example

module.exports = {
    Query: {
        blockUser: async function(parent, params, context) {
            // code goes here

            return  {status: false, success: false}
        }
    }
}

Authors

Contributors names and contact info ex. Robert Konga
ex. @robertkonga

Version History

License

This project is licensed under the [NAME HERE] License - see the LICENSE.md file for details

Package Sidebar

Install

npm i yekonga-server

Weekly Downloads

285

Version

4.0.16

License

MIT

Unpacked Size

6.88 MB

Total Files

294

Last publish

Collaborators

  • robertkonga