@keybittech/awayto
Version:
Deploy a fully-featured application in about 10 minutes that is primed for quick development. Do business, impress a client with a quick demo, finish your poc with time to spare; all easily achievable with Awayto.
338 lines (300 loc) • 12.1 kB
text/typescript
import { ApiModule } from 'awayto';
const deploy: ApiModule = {
/**
* @category Awayto Deploy
*/
get_deploy : {
path : 'POST/deploy',
cmnd : async (props) => {
try {
const { script } = props.event.body as { script: string };
await props.client.query(script);
console.log('successfully deployed db script');
// const tableCreation = await props.client.query(
// `
// CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
// CREATE TABLE users (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// username VARCHAR ( 500 ),
// sub VARCHAR ( 50 ) NOT NULL,
// image VARCHAR ( 250 ),
// first_name VARCHAR ( 500 ),
// last_name VARCHAR ( 500 ),
// email VARCHAR ( 500 ),
// ip_address VARCHAR ( 20 ),
// locked BOOLEAN NOT NULL DEFAULT false,
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true
// );
// CREATE TABLE groups (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// name VARCHAR ( 50 ) NOT NULL UNIQUE,
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true
// );
// INSERT INTO
// groups (name)
// VALUES
// ('system'),
// ('group1'),
// ('group2');
// CREATE TABLE uuid_groups (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// parent_uuid uuid NOT NULL,
// group_id uuid NOT NULL REFERENCES groups (id) ON DELETE CASCADE,
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true,
// UNIQUE (parent_uuid, group_id)
// );
// CREATE TABLE roles (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// name VARCHAR ( 50 ) NOT NULL UNIQUE,
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true
// );
// INSERT INTO
// roles (name)
// VALUES
// ('admin'),
// ('manager'),
// ('user');
// CREATE TABLE uuid_roles (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// parent_uuid uuid NOT NULL,
// role_id uuid NOT NULL REFERENCES roles (id) ON DELETE CASCADE,
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true,
// UNIQUE (parent_uuid, role_id)
// );
// CREATE TABLE file_types (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// name VARCHAR ( 50 ) NOT NULL UNIQUE,
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true
// );
// INSERT INTO
// file_types (name)
// VALUES
// ('images'),
// ('documents');
// CREATE TABLE files (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// uuid VARCHAR ( 50 ) NOT NULL,
// name VARCHAR ( 50 ),
// file_type_id uuid NOT NULL REFERENCES file_types (id),
// location VARCHAR ( 250 ),
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true
// );
// CREATE TABLE uuid_files (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// parent_uuid VARCHAR ( 50 ) NOT NULL,
// file_id uuid NOT NULL REFERENCES files (id),
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true,
// UNIQUE (parent_uuid, file_id)
// );
// CREATE TABLE uuid_notes (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// parent_uuid VARCHAR ( 50 ) NOT NULL,
// note VARCHAR ( 500 ),
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true,
// UNIQUE (parent_uuid, note, created_sub)
// );
// CREATE TABLE request_log (
// id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
// sub VARCHAR ( 50 ) NOT NULL,
// path VARCHAR ( 500 ),
// direction VARCHAR ( 10 ),
// code VARCHAR ( 5 ),
// payload VARCHAR ( 5000 ),
// ip_address VARCHAR ( 50 ) NOT NULL,
// created_on TIMESTAMP NOT NULL DEFAULT NOW(),
// created_sub VARCHAR ( 50 ),
// updated_on TIMESTAMP,
// updated_sub VARCHAR ( 50 ),
// enabled BOOLEAN NOT NULL DEFAULT true
// );
// `
// );
// console.log('DEPLOYED TABLE CREATION', JSON.stringify(tableCreation, null, 2));
// const viewCreation = await props.client.query(
// `
// CREATE OR REPLACE VIEW
// enabled_users
// AS
// SELECT
// u.id,
// u.first_name as "firstName",
// u.last_name as "lastName",
// u.username,
// u.sub,
// u.image,
// u.email,
// u.locked,
// u.created_on as "createdOn",
// u.updated_on as "updatedOn",
// u.enabled,
// row_number() OVER () as row
// FROM users u
// WHERE u.enabled = true;
// CREATE OR REPLACE VIEW
// enabled_groups
// AS
// SELECT
// id,
// name,
// row_number() OVER () as row
// FROM groups
// WHERE enabled = true;
// CREATE OR REPLACE VIEW
// enabled_uuid_groups
// AS
// SELECT
// id,
// parent_uuid as "parentUuid",
// group_id as "groupId",
// row_number() OVER () as row
// FROM uuid_groups
// WHERE enabled = true;
// CREATE OR REPLACE VIEW
// enabled_roles
// AS
// SELECT
// id,
// name,
// row_number() OVER () as row
// FROM roles
// WHERE enabled = true;
// CREATE OR REPLACE VIEW
// enabled_uuid_roles
// AS
// SELECT
// id,
// parent_uuid as "parentUuid",
// role_id as "roleId",
// row_number() OVER () as row
// FROM uuid_roles
// WHERE enabled = true;
// CREATE OR REPLACE VIEW
// enabled_file_types
// AS
// SELECT
// id,
// name,
// row_number() OVER () as row
// FROM file_types
// WHERE enabled = true;
// CREATE OR REPLACE VIEW
// enabled_files
// AS
// SELECT
// f.id,
// f.uuid,
// f.name,
// f.file_type_id as "fileTypeId",
// ft.name as "fileTypeName",
// f.location,
// row_number() OVER () as row
// FROM files f
// JOIN file_types ft ON f.file_type_id = ft.id
// WHERE f.enabled = true;
// CREATE OR REPLACE VIEW
// enabled_uuid_files
// AS
// SELECT
// uf.id,
// uf.parent_uuid as "parentUuid",
// uf.file_id as "fileId",
// row_number() OVER () as row
// FROM uuid_files uf
// WHERE uf.enabled = true;
// CREATE OR REPLACE VIEW
// enabled_uuid_notes
// AS
// SELECT
// un.id,
// un.parent_uuid as "parentUuid",
// un.note,
// un.created_sub as "createdSub",
// row_number() OVER () as row
// FROM uuid_notes un
// WHERE un.enabled = true;
// CREATE OR REPLACE VIEW
// enabled_groups_ext
// AS
// SELECT
// eg.*,
// ug.users,
// rls.* as roles
// FROM enabled_groups eg
// LEFT JOIN LATERAL (
// SELECT JSON_AGG(r.*) as roles
// FROM (
// SELECT er.id, er.name
// FROM enabled_uuid_roles eur
// JOIN enabled_roles er ON eur."roleId" = er.id
// WHERE eur."parentUuid" = eg.id
// ) r
// ) as rls ON true
// LEFT JOIN (
// SELECT eug."groupId", COUNT(eug."parentUuid") users
// FROM enabled_uuid_groups eug
// JOIN users u ON u.id = eug."parentUuid"
// GROUP BY eug."groupId"
// ) ug ON ug."groupId" = eg.id;
// CREATE OR REPLACE VIEW
// enabled_users_ext
// AS
// SELECT
// u.*,
// grps.*
// FROM enabled_users u
// LEFT JOIN LATERAL (
// SELECT JSON_AGG(g.*) as groups
// FROM (
// SELECT ege.*
// FROM enabled_uuid_groups eug
// JOIN enabled_groups_ext ege ON eug."groupId" = ege.id
// WHERE eug."parentUuid" = u.id
// ) g
// ) as grps ON true;
// `
// );
// console.log('DEPLOYED VIEW CREATION', JSON.stringify(viewCreation, null, 2));
return true;
} catch (error) {
throw error;
}
}
}
}
export default deploy;