health-petal/packages/data-manager-sqlite/src/db-instance.ts
2026-05-23 20:57:22 +05:30

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 }