137 lines
No EOL
5.5 KiB
TypeScript
137 lines
No EOL
5.5 KiB
TypeScript
import { db } from "./db_index";
|
|
import { units, productInfo, deliverySlotInfo, productSlots, keyValStore, staffRoles, staffPermissions, staffRolePermissions } from "./schema";
|
|
import { eq } from "drizzle-orm";
|
|
import { minOrderValue, deliveryCharge } from '../lib/env-exporter';
|
|
import { CONST_KEYS } from '../lib/const-keys';
|
|
|
|
export async function seed() {
|
|
console.log("Seeding database...");
|
|
|
|
// Seed units individually
|
|
const unitsToSeed = [
|
|
{ shortNotation: "Kg", fullName: "Kilogram" },
|
|
{ shortNotation: "L", fullName: "Litre" },
|
|
{ shortNotation: "Dz", fullName: "Dozen" },
|
|
{ shortNotation: "Pc", fullName: "Unit Piece" },
|
|
];
|
|
|
|
for (const unit of unitsToSeed) {
|
|
const existingUnit = await db.query.units.findFirst({
|
|
where: eq(units.shortNotation, unit.shortNotation),
|
|
});
|
|
if (!existingUnit) {
|
|
await db.insert(units).values(unit);
|
|
}
|
|
}
|
|
|
|
// Seed staff roles individually
|
|
const rolesToSeed = ['super_admin', 'admin', 'marketer', 'delivery_staff'] as const;
|
|
|
|
for (const roleName of rolesToSeed) {
|
|
const existingRole = await db.query.staffRoles.findFirst({
|
|
where: eq(staffRoles.roleName, roleName),
|
|
});
|
|
if (!existingRole) {
|
|
await db.insert(staffRoles).values({ roleName });
|
|
}
|
|
}
|
|
|
|
// Seed staff permissions individually
|
|
const permissionsToSeed = ['crud_product', 'make_coupon', 'crud_staff_users'] as const;
|
|
|
|
for (const permissionName of permissionsToSeed) {
|
|
const existingPermission = await db.query.staffPermissions.findFirst({
|
|
where: eq(staffPermissions.permissionName, permissionName),
|
|
});
|
|
if (!existingPermission) {
|
|
await db.insert(staffPermissions).values({ permissionName });
|
|
}
|
|
}
|
|
|
|
// Seed role-permission assignments
|
|
await db.transaction(async (tx) => {
|
|
// Get role IDs
|
|
const superAdminRole = await tx.query.staffRoles.findFirst({ where: eq(staffRoles.roleName, 'super_admin') });
|
|
const adminRole = await tx.query.staffRoles.findFirst({ where: eq(staffRoles.roleName, 'admin') });
|
|
const marketerRole = await tx.query.staffRoles.findFirst({ where: eq(staffRoles.roleName, 'marketer') });
|
|
|
|
// Get permission IDs
|
|
const crudProductPerm = await tx.query.staffPermissions.findFirst({ where: eq(staffPermissions.permissionName, 'crud_product') });
|
|
const makeCouponPerm = await tx.query.staffPermissions.findFirst({ where: eq(staffPermissions.permissionName, 'make_coupon') });
|
|
const crudStaffUsersPerm = await tx.query.staffPermissions.findFirst({ where: eq(staffPermissions.permissionName, 'crud_staff_users') });
|
|
|
|
// Assign all permissions to super_admin
|
|
[crudProductPerm, makeCouponPerm, crudStaffUsersPerm].forEach(async (perm) => {
|
|
if (superAdminRole && perm) {
|
|
const existingSuperAdminPerm = await tx.query.staffRolePermissions.findFirst({
|
|
where: eq(staffRolePermissions.staffRoleId, superAdminRole.id) && eq(staffRolePermissions.staffPermissionId, perm.id),
|
|
});
|
|
if (!existingSuperAdminPerm) {
|
|
await tx.insert(staffRolePermissions).values({
|
|
staffRoleId: superAdminRole.id,
|
|
staffPermissionId: perm.id,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
// Assign all permissions to admin
|
|
[crudProductPerm, makeCouponPerm].forEach(async (perm) => {
|
|
if (adminRole && perm) {
|
|
const existingAdminPerm = await tx.query.staffRolePermissions.findFirst({
|
|
where: eq(staffRolePermissions.staffRoleId, adminRole.id) && eq(staffRolePermissions.staffPermissionId, perm.id),
|
|
});
|
|
if (!existingAdminPerm) {
|
|
await tx.insert(staffRolePermissions).values({
|
|
staffRoleId: adminRole.id,
|
|
staffPermissionId: perm.id,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
// Assign make_coupon to marketer
|
|
if (marketerRole && makeCouponPerm) {
|
|
const existingMarketerCoupon = await tx.query.staffRolePermissions.findFirst({
|
|
where: eq(staffRolePermissions.staffRoleId, marketerRole.id) && eq(staffRolePermissions.staffPermissionId, makeCouponPerm.id),
|
|
});
|
|
if (!existingMarketerCoupon) {
|
|
await tx.insert(staffRolePermissions).values({
|
|
staffRoleId: marketerRole.id,
|
|
staffPermissionId: makeCouponPerm.id,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
// Seed key-val store constants using CONST_KEYS
|
|
const constantsToSeed = [
|
|
{ key: CONST_KEYS.readableOrderId, value: 0 },
|
|
{ key: CONST_KEYS.minRegularOrderValue, value: minOrderValue },
|
|
{ key: CONST_KEYS.freeDeliveryThreshold, value: minOrderValue },
|
|
{ key: CONST_KEYS.deliveryCharge, value: deliveryCharge },
|
|
{ key: CONST_KEYS.flashFreeDeliveryThreshold, value: 500 },
|
|
{ key: CONST_KEYS.flashDeliveryCharge, value: 69 },
|
|
{ key: CONST_KEYS.popularItems, value: [] },
|
|
{ key: CONST_KEYS.versionNum, value: '1.1.0' },
|
|
{ key: CONST_KEYS.playStoreUrl, value: 'https://play.google.com/store/apps/details?id=in.freshyo.app' },
|
|
{ key: CONST_KEYS.appStoreUrl, value: 'https://play.google.com/store/apps/details?id=in.freshyo.app' },
|
|
{ key: CONST_KEYS.isFlashDeliveryEnabled, value: false },
|
|
{ key: CONST_KEYS.supportMobile, value: '8688182552' },
|
|
{ key: CONST_KEYS.supportEmail, value: 'qushammohd@gmail.com' },
|
|
];
|
|
|
|
for (const constant of constantsToSeed) {
|
|
const existing = await db.query.keyValStore.findFirst({
|
|
where: eq(keyValStore.key, constant.key),
|
|
});
|
|
if (!existing) {
|
|
await db.insert(keyValStore).values({
|
|
key: constant.key,
|
|
value: constant.value,
|
|
});
|
|
}
|
|
}
|
|
|
|
console.log("Seeding completed.");
|
|
} |