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: { type: "string", treatEmptyStringAsMissing: true },
created_at: { type: "date", default: "now" },
},
};
const productTableConfig = {
tableName: "PRODUCT",
historyTableName: "DELETED_PRODUCT",
fields: {
name: { type: "string", treatEmptyStringAsMissing: true },
price: "number",
category_fk: "number",
created_at: { type: "date", default: "now" },
},
};
const customerTableConfig = {
tableName: "CUSTOMER",
historyTableName: "DELETED_CUSTOMER",
fields: {
first_name: { type: "string", treatEmptyStringAsMissing: true },
last_name: { type: "string", treatEmptyStringAsMissing: true },
email: "string",
address: { type: "string", treatNullAsMissing: true },
created_at: { type: "date", default: "now" },
},
};
const orderTableConfig = {
tableName: "ORDER",
historyTableName: "DELETED_ORDER",
fields: {
customer_fk: "number",
created_at: { type: "date", default: "now" },
},
};
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) {
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);
}