Files
webmailserver/scripts/seed.ts
2026-05-14 14:57:15 +03:00

67 lines
1.7 KiB
TypeScript

import { prisma } from "../lib/prisma";
import { getUsers } from "../lib/users";
import "dotenv/config";
async function main() {
console.log("Seeding database...");
// 1. Migrate Users
const users = await getUsers();
for (const user of users) {
console.log(`Migrating user: ${user.email}`);
await prisma.user.upsert({
where: { email: user.email },
update: {
name: user.name,
password: user.password,
role: user.role,
domains: user.domains,
telegramId: user.telegramId,
},
create: {
email: user.email,
name: user.name,
password: user.password,
role: user.role,
domains: user.domains,
telegramId: user.telegramId,
},
});
}
// 2. Migrate Mailbox Mappings
const mappingsRaw = process.env.MAIL_USER_MAPPINGS || "{}";
try {
const mappings = JSON.parse(mappingsRaw);
for (const [email, userKey] of Object.entries(mappings)) {
const userIndex = parseInt((userKey as string).replace("USER_", ""));
const userEmail = process.env[`USER_${userIndex}_EMAIL`];
if (userEmail) {
const dbUser = await prisma.user.findUnique({ where: { email: userEmail } });
if (dbUser) {
console.log(`Creating mapping: ${email} -> ${userEmail}`);
await prisma.mailboxMapping.upsert({
where: { email },
update: { userId: dbUser.id },
create: { email, userId: dbUser.id },
});
}
}
}
} catch (e) {
console.error("Mapping migration failed:", e);
}
console.log("Seeding complete.");
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});