67 lines
1.7 KiB
TypeScript
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();
|
|
});
|