Full Code Example
A full example of how to use the library
Here's how you can integrate the DB
class into a web application using Google Apps Script's doGet
function.
function doGet(e) {
var Template = HtmlService.createTemplateFromFile("index").evaluate().setTitle("Test CRUD WebApp").setFaviconUrl("https://cdn-icons-png.freepik.com/512/9850/9850812.png").addMetaTag('viewport', 'width=device-width, initial-scale=1').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return Template;
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
const db = DB.init('testing-DB', YOUR_ID);
const categoryTableConfig = {
tableName: "CATEGORY",
historyTableName: "DELETED_CATEGORY",
fields: {
name: "string",
created_at: "date"
}
}
const productTableConfig = {
tableName: "PRODUCT",
historyTableName: "DELETED_PRODUCT",
fields: {
name: "string",
price: "number",
category_fk: "number",
created_at: "date"
}
}
const customerTableConfig = {
tableName: "CUSTOMER",
historyTableName: "DELETED_CUSTOMER",
fields: {
first_name: "string",
last_name: "string",
email: "string",
address: "string",
created_at: "date"
}
}
const orderTableConfig = {
tableName: "ORDER",
historyTableName: "DELETED_ORDER",
fields: {
customer_fk: "number",
created_at: "date"
}
}
function createSchema(){
console.log(db.createTable(categoryTableConfig));
console.log(db.createTable(productTableConfig));
console.log(db.createTable(customerTableConfig));
console.log(db.createTable(orderTableConfig));
console.log(db.createTable(orderDetailConfig))
}
console.log(db.putTableIntoDbContext(categoryTableConfig));
console.log(db.putTableIntoDbContext(productTableConfig));
console.log(db.putTableIntoDbContext(customerTableConfig));
console.log(db.putTableIntoDbContext(orderTableConfig));
const responseCreation = db.createManyToManyTableConfig({
entity1TableName : orderTableConfig.tableName,
entity2TableName : productTableConfig.tableName,
fieldsRelatedToBothEntities: {
quantity: "number"
}
})
const orderDetailConfig = responseCreation.data;
console.log(db.putTableIntoDbContext(orderDetailConfig));
/**
* ||=====================================================||
* || CRUD for CATEGORY ||
* ||=====================================================||
*/
function getCategoryRelatedRecords(foreignKey, field="category_fk", fieldIndex = 4, options={}, useCache=false){
const response = db.getRelatedRecords(
foreignKey,
productTableConfig.tableName,
field,
fieldIndex,
options,
useCache)
return JSON.stringify(response);
}
function createCategory(newCategory){
newCategory.created_at = new Date(newCategory.created_at);
const response = db.create(
categoryTableConfig.tableName,
newCategory,
Object.keys(categoryTableConfig.fields)
)
console.log(response);
return JSON.stringify(response);
}
function readCategoryTable(){
const response = db.getAll(
categoryTableConfig.tableName,
options={},
useCache = false
)
console.log(response.status)
console.log(response.message)
return JSON.stringify(response);
}
function updateCategory(updatedCategory, id){
// console.log("to update:",updatedCategory)
// console.log("id",id)
updatedCategory.created_at = new Date(updatedCategory.created_at);
const response = db.update(
categoryTableConfig.tableName,
id,
updatedCategory,
Object.keys(categoryTableConfig.fields)
)
console.log(response);
return JSON.stringify(response);
}
function readCategoryById (id){
const response = db.read(
categoryTableConfig.tableName,
id
)
console.log(response)
return JSON.stringify(response);
}
function removeCategory(id){
const response = db.remove(
categoryTableConfig.tableName,
categoryTableConfig.historyTableName,
id
)
console.log(response);
return JSON.stringify(response);
}
/**
* ||=====================================================||
* || CRUD for PRODUCT TABLE ||
* ||=====================================================||
*/
function createProduct(newProduct) {
// Convert dates as needed
if (newProduct.created_at) {
newProduct.created_at = new Date(newProduct.created_at);
}
const response = db.create(
productTableConfig.tableName,
newProduct,
Object.keys(productTableConfig.fields)
);
return JSON.stringify(response);
}
function readProductTable() {
const response = db.getAll(
productTableConfig.tableName,
{}, // options = {}
false // useCache = false
);
return JSON.stringify(response);
}
function readProductById(id) {
const response = db.read(productTableConfig.tableName, id);
return JSON.stringify(response);
}
function updateProduct(updatedProduct, id) {
if (updatedProduct.created_at) {
updatedProduct.created_at = new Date(updatedProduct.created_at);
}
const response = db.update(
productTableConfig.tableName,
id,
updatedProduct,
Object.keys(productTableConfig.fields)
);
return JSON.stringify(response);
}
function removeProduct(id) {
const response = db.removeWithCascade(
productTableConfig.tableName,
productTableConfig.historyTableName,
id
);
return JSON.stringify(response);
}
/**
* ||=====================================================||
* || CRUD for CUSTOMER TABLE ||
* ||=====================================================||
*/
function getRelatedCustomerRecords(foreignKey, field="customer_fk", fieldIndex= 2,options={}, useCache=false){
const response = db.getRelatedRecords(
foreignKey,
orderTableConfig.tableName,
field,
fieldIndex,
options,
useCache
)
return JSON.stringify(response);
}
function createCustomer(newCustomer) {
if (newCustomer.created_at) {
newCustomer.created_at = new Date(newCustomer.created_at);
}
const response = db.create(
customerTableConfig.tableName,
newCustomer,
Object.keys(customerTableConfig.fields)
);
return JSON.stringify(response);
}
function readCustomerTable() {
const response = db.getAll(
customerTableConfig.tableName,
{},
false
);
return JSON.stringify(response);
}
function readCustomerById(id) {
const response = db.read(customerTableConfig.tableName, id);
return JSON.stringify(response);
}
function updateCustomer(updatedCustomer, id) {
if (updatedCustomer.created_at) {
updatedCustomer.created_at = new Date(updatedCustomer.created_at);
}
const response = db.update(
customerTableConfig.tableName,
id,
updatedCustomer,
Object.keys(customerTableConfig.fields)
);
return JSON.stringify(response);
}
function removeCustomer(id) {
const response = db.remove(
customerTableConfig.tableName,
customerTableConfig.historyTableName,
id
);
return JSON.stringify(response);
}
/**
* ||=====================================================||
* || CRUD for ORDER TABLE ||
* ||=====================================================||
*/
function createOrder(newOrder) {
if (newOrder.created_at) {
newOrder.created_at = new Date(newOrder.created_at);
}
const response = db.create(
orderTableConfig.tableName,
newOrder,
Object.keys(orderTableConfig.fields)
);
return JSON.stringify(response);
}
function readOrderTable() {
const response = db.getAll(orderTableConfig.tableName, {}, false);
return JSON.stringify(response);
}
function readOrderById(id) {
const response = db.read(orderTableConfig.tableName, id);
return JSON.stringify(response);
}
function updateOrder(updatedOrder, id) {
if (updatedOrder.created_at) {
updatedOrder.created_at = new Date(updatedOrder.created_at);
}
const response = db.update(
orderTableConfig.tableName,
id,
updatedOrder,
Object.keys(orderTableConfig.fields)
);
return JSON.stringify(response);
}
function removeOrder(id) {
const response = db.removeWithCascade(
orderTableConfig.tableName,
orderTableConfig.historyTableName,
id
);
return JSON.stringify(response);
}
/**
* ||=====================================================||
* || CRUD for ORDER_DETAIL (Many-to-Many) ||
* ||=====================================================||
* The 'orderDetailConfig' object was generated via:
* const responseCreation = db.createManyToManyTableConfig({ ... });
* const orderDetailConfig = responseCreation.data;
*/
function createOrderDetail(newOrderDetail) {
if (newOrderDetail.created_at) {
newOrderDetail.created_at = new Date(newOrderDetail.created_at);
}
// orderDetailConfig.fields => { created_at, order_id, product_id, quantity, ... }
const response = db.create(
orderDetailConfig.tableName,
newOrderDetail,
Object.keys(orderDetailConfig.fields)
);
return JSON.stringify(response);
}
function readOrderDetailTable() {
const response = db.getAll(orderDetailConfig.tableName, {}, false);
return JSON.stringify(response);
}
function readOrderDetailById(id) {
const response = db.read(orderDetailConfig.tableName, id);
return JSON.stringify(response);
}
function updateOrderDetail(updatedOrderDetail, id) {
if (updatedOrderDetail.created_at) {
updatedOrderDetail.created_at = new Date(updatedOrderDetail.created_at);
}
const response = db.update(
orderDetailConfig.tableName,
id,
updatedOrderDetail,
Object.keys(orderDetailConfig.fields)
);
return JSON.stringify(response);
}
function removeOrderDetail(id) {
const response = db.remove(
orderDetailConfig.tableName,
orderDetailConfig.historyTableName,
id
);
return JSON.stringify(response);
}
function readOrderDetailFromOrder(sourceId){
const response = db.getJunctionRecords(
orderDetailConfig.tableName,
orderTableConfig.tableName,
productTableConfig.tableName,
sourceId,
options = {}
)
console.log(response.status);
console.log(response.message);
console.log(response.metadata);
for (record of response.data){
console.log(record);
}
return JSON.stringify(response);
}
function readOrderDetailFromProduct(sourceId){
const response = db.getJunctionRecords(
orderDetailConfig.tableName,
productTableConfig.tableName,
orderTableConfig.tableName,
sourceId,
options = {}
)
console.log(response.status);
console.log(response.message);
console.log(response.metadata);
for (record of response.data){
console.log(record);
}
return JSON.stringify(response);
}