You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
4.2 KiB
JavaScript

const bcrypt = require('bcrypt');
exports.up = async (pgm) => {
pgm.sql('CREATE EXTENSION IF NOT EXISTS "uuid-ossp";');
pgm.createTable('companies', {
id: {
type: 'uuid',
primaryKey: true,
},
name: {
type: 'varchar(255)',
notNull: true,
},
description: {
type: 'text',
notNull: false,
},
address: {
type: 'text',
notNull: false,
},
phone: {
type: 'varchar(16)',
notNull: false,
},
email: {
type: 'varchar(255)',
notNull: false,
},
created_at: {
type: 'timestamp',
notNull: true,
default: pgm.func('current_timestamp'),
},
updated_at: {
type: 'timestamp',
notNull: true,
default: pgm.func('current_timestamp'),
},
});
// offices
pgm.createTable('offices', {
id: {
type: 'uuid',
primaryKey: true,
},
name: {
type: 'varchar(255)',
notNull: true,
},
description: {
type: 'text',
notNull: false,
},
address: {
type: 'text',
notNull: false,
},
phone: {
type: 'varchar(16)',
notNull: false,
},
email: {
type: 'varchar(255)',
notNull: false,
},
company_id: {
type: 'uuid',
notNull: true,
},
created_at: {
type: 'timestamp',
notNull: true,
default: pgm.func('current_timestamp'),
},
updated_at: {
type: 'timestamp',
notNull: true,
default: pgm.func('current_timestamp'),
},
}, {
constraints: {
foreignKeys: [
{
references: 'companies(id)',
columns: 'company_id',
onDelete: 'CASCADE',
},
],
},
});
// warehouse
pgm.createTable('warehouses', {
id: {
type: 'uuid',
primaryKey: true,
},
name: {
type: 'varchar(255)',
notNull: true,
},
description: {
type: 'text',
notNull: false,
},
address: {
type: 'text',
notNull: false,
},
phone: {
type: 'varchar(16)',
notNull: false,
},
office_id: {
type: 'uuid',
notNull: true,
},
created_at: {
type: 'timestamp',
notNull: true,
default: pgm.func('current_timestamp'),
},
updated_at: {
type: 'timestamp',
notNull: true,
default: pgm.func('current_timestamp'),
},
}, {
constraints: {
foreignKeys: [
{
references: 'offices(id)',
columns: 'office_id',
onDelete: 'CASCADE',
},
],
},
});
// user
pgm.createTable('users', {
id: {
type: 'uuid',
primaryKey: true,
},
name: {
type: 'varchar(255)',
notNull: true,
},
email: {
type: 'varchar(255)',
notNull: false,
},
password: {
type: 'varchar(255)',
notNull: false,
},
role: {
type: 'varchar(16)',
notNull: false,
},
company_id: {
type: 'uuid',
notNull: true,
},
created_at: {
type: 'timestamp',
notNull: true,
default: pgm.func('current_timestamp'),
},
updated_at: {
type: 'timestamp',
notNull: true,
default: pgm.func('current_timestamp'),
},
}, {
constraints: {
foreignKeys: [
{
references: 'companies(id)',
columns: 'company_id',
onDelete: 'CASCADE',
},
],
},
});
// create default company, office, warehouse, users
pgm.sql("INSERT INTO companies VALUES (uuid_generate_v4(), 'Toko 1', '', 'Klaten', '089999999', 'toko1@toko.com')");
pgm.sql("INSERT INTO offices VALUES (uuid_generate_v4(), 'Toko 1', '', 'Klaten', '089999999', 'toko1@toko.com', (SELECT id FROM companies LIMIT 1))");
pgm.sql("INSERT INTO warehouses VALUES (uuid_generate_v4(), 'Toko 1', '', 'Klaten', '089999999', (SELECT id FROM offices LIMIT 1))");
const password = await bcrypt.hash('password', 10);
pgm.sql(`INSERT INTO users VALUES (uuid_generate_v4(), 'Admin', 'admin@mail.com', '${password}', 'admin', (SELECT id FROM companies LIMIT 1))`);
};
exports.down = (pgm) => {
pgm.dropTable('users');
pgm.dropTable('warehouses');
pgm.dropTable('offices');
pgm.dropTable('companies');
};