Contact Manager Prototype is multi-tenant application that allows users to manage their contacts. Inspired by Eloqua and Salesforce, the application was built to allow schema to be customizable to suit the needs of different users. This application's [immature] framework aims to solve one of the problems in web development: providing platform as a service to multiple clients while fulfilling client-specific needs.
As described by the figure above - The user is able to use the application through the browser or using a mobile application. The Core Application Engine, Client Application Engine and Client DB Router are powered by NodeJS. These three pieces work together to manage the users' Application Schema and retrieve users' data from their client database.
Each user is associated with their own database which becomes available to them when the user creates an account.
The website is built using Ruby On Rails with AngularJS, this was to make the code base similar with the Mobile application which is built using Apache Cordova and Ionic Framework.
REST API Guide: Please see the live documentation here.
Create Account
POST /application/accountRequest: {}
Response: {}
Sign in to Account
POST /application/account/signinRequest: {}
Response: {}
Get Account
GET /application/account/:accountIdRequest: {}
Response: {}
Update Account
PUT /application/account/:accountIdRequest: {}
Response: {}
Create CustomObject
POST /application/account/:accountId/customObjectRequest: {}
Response: {}
Update CustomObject
PUT /application/account/:accountId/customObject/:customObjectIdRequest: {}
Response: {}
Delete CustomObject
DELETE /application/account/:accountId/customObject/:customObjectIdRequest: {}
Response: {}
Search CustomObjects
GET /application/account/:accountId/customObjects?name={name}&description={description}Request: {}
Response: {}
Get CustomObject
GET /application/account/:accountId/customObject/:customObjectIdRequest: {}
Response: {}
Get CustomObject ModelDefinitions
GET /application/account/:accountId/customObject/:customObjectId/modelDefinitionsRequest: {}
Response: {}
Get CustomObject ModelDefinition
GET /application/account/:accountId/customObject/:customObjectId/modelDefinition/:customObjectModelDefinitionIdRequest: {}
Response: {}
Create CustomObject ModelDefinitions
POST /application/account/:accountId/customObject/:customObjectId/modelDefinitionRequest: {}
Response: {}
Update CustomObject ModelDefinitions
PUT /application/account/:accountId/customObject/:customObjectId/modelDefinition/:customObjectModelDefinitionIdRequest: {}
Response: {}
Delete CustomObject ModelDefinition
DELETE /application/account/:accountId/customObject/:customObjectId/modelDefinition/:customObjectModelDefinitionIdRequest: {}
Response: {}
Create CustomObjectData
POST /application/account/:accountId/customObject/:customObjectId/dataRequest: {}
Response: {}
Search CustomObjectData
POST /application/account/:accountId/customObject/:customObjectId/data/searchRequest: {}
Response: {}
Get CustomObjectData
GET /application/account/:accountId/customObject/:customObjectId/data/:customObjectDataIdRequest: {}
Response: {}
Update CustomObjectData
PUT /application/account/:accountId/customObject/:customObjectId/data/:customObjectDataIdRequest: {}
Response: {}
Delete CustomObjectData
DELETE /application/account/:accountId/customObject/:customObjectId/data/:customObjectDataIdRequest: {}
Response: {}
Flow: AuthApp, AuthAcc, Parse Request, Map Request Object to Model, Validate, Perform CRUD
Validation: Validation at this time only exists for CustomObject and CustomObjectData mapping, but no custom validation yet.
Roadmap: Validations for models. Js library will be exposed.
Concerns: Since this is a prototype, there is no encryption of passwords or proper application level authentication. This can be added into the application source code.