56 lines
2.1 KiB
TypeScript
56 lines
2.1 KiB
TypeScript
import bcrypt from 'bcryptjs'
|
|
import { createDb } from './db'
|
|
import { runMigrations } from './migrate'
|
|
|
|
const { db, sqlite } = createDb()
|
|
runMigrations(sqlite)
|
|
|
|
// Seed reference data — units
|
|
sqlite.run("INSERT OR IGNORE INTO units (name) VALUES ('mg')")
|
|
sqlite.run("INSERT OR IGNORE INTO units (name) VALUES ('gm')")
|
|
sqlite.run("INSERT OR IGNORE INTO units (name) VALUES ('ml')")
|
|
sqlite.run("INSERT OR IGNORE INTO units (name) VALUES ('piece')")
|
|
|
|
// Seed enterprise
|
|
sqlite.run("INSERT OR IGNORE INTO enterprises (id, name, type, owner_name, mobile) VALUES (1, 'Main Pharmacy', 'Pharmacy', 'Admin User', '0000000000')")
|
|
|
|
// Seed staff (admin user)
|
|
const today = new Date().toISOString().slice(0, 10)
|
|
const adminHash = bcrypt.hashSync('admin123', 10) || ''
|
|
sqlite.run(
|
|
"INSERT OR IGNORE INTO staff (id, name, username, password, added_on, is_password_reset_needed) VALUES (1, 'Admin', 'admin', ?, ?, 1)",
|
|
[adminHash, today],
|
|
)
|
|
|
|
// Link staff to enterprise
|
|
sqlite.run("INSERT OR IGNORE INTO enterprise_staff (id, staff_id, enterprise_id) VALUES (1, 1, 1)")
|
|
|
|
// Seed roles
|
|
sqlite.run("INSERT OR IGNORE INTO roles (id, name) VALUES (1, 'Admin')")
|
|
sqlite.run("INSERT OR IGNORE INTO roles (id, name) VALUES (2, 'Pharmacist')")
|
|
sqlite.run("INSERT OR IGNORE INTO roles (id, name) VALUES (3, 'Manager')")
|
|
sqlite.run("INSERT OR IGNORE INTO roles (id, name) VALUES (4, 'Cashier')")
|
|
|
|
// Seed permissions
|
|
const permNames = [
|
|
'product.read', 'product.write',
|
|
'stock.read', 'stock.write',
|
|
'distributor.read', 'distributor.write',
|
|
'storage.read', 'storage.write',
|
|
'billing.read', 'billing.write',
|
|
'staff.read', 'staff.write',
|
|
'customer.read', 'customer.write',
|
|
]
|
|
for (let i = 0; i < permNames.length; i++) {
|
|
sqlite.run(`INSERT OR IGNORE INTO permissions (id, name) VALUES (${i + 1}, '${permNames[i]}')`)
|
|
}
|
|
|
|
// Seed role_permissions — Admin gets all
|
|
for (let i = 1; i <= permNames.length; i++) {
|
|
sqlite.run(`INSERT OR IGNORE INTO role_permissions (role_id, permission_id) VALUES (1, ${i})`)
|
|
}
|
|
|
|
// Seed staff_roles — admin gets Admin role
|
|
sqlite.run("INSERT OR IGNORE INTO staff_roles (staff_id, role_id) VALUES (1, 1)")
|
|
|
|
export { db, sqlite }
|