chore: migrate to PostgreSQL with Prisma

This commit is contained in:
AyrisAI
2026-05-14 14:57:15 +03:00
parent 2642d254dc
commit f328296c64
10 changed files with 253 additions and 61 deletions

View File

@@ -16,54 +16,34 @@
* USER_1_DOMAINS="aveminakarabudak.com"
*/
import { prisma } from "./prisma";
export interface AppUser {
id: string; // "user_0", "user_1", ...
name: string;
id: string;
name: string | null;
email: string;
password: string; // plain text — store hashed in prod or use secrets manager
role: "SUPER_ADMIN" | "DOMAIN_ADMIN";
domains: string[]; // ["*"] for super admin, ["domain.com"] for domain admins
telegramId?: string; // Optional Telegram ID for notifications
password: string;
role: string;
domains: string[];
telegramId?: string | null;
}
/** Load all users defined in environment variables */
export function getUsers(): AppUser[] {
const users: AppUser[] = [];
let i = 0;
while (true) {
const name = process.env[`USER_${i}_NAME`];
const email = process.env[`USER_${i}_EMAIL`];
const password = process.env[`USER_${i}_PASSWORD`];
const role = process.env[`USER_${i}_ROLE`] as AppUser["role"];
const domainsRaw = process.env[`USER_${i}_DOMAINS`] ?? "";
const telegramId = process.env[`USER_${i}_TELEGRAM_ID`];
if (!name || !email || !password) break;
users.push({
id: `user_${i}`,
name,
email,
password,
role: role ?? "DOMAIN_ADMIN",
domains: domainsRaw === "*" ? ["*"] : domainsRaw.split(",").map((d) => d.trim()).filter(Boolean),
telegramId,
});
i++;
}
return users;
/** Load all users from database */
export async function getUsers(): Promise<AppUser[]> {
const users = await prisma.user.findMany();
return users as AppUser[];
}
/** Find user by email and validate password */
export function authenticateUser(email: string, password: string): AppUser | null {
const users = getUsers();
const user = users.find((u) => u.email.toLowerCase() === email.toLowerCase());
/** Find user by email and validate password via database */
export async function authenticateUser(email: string, password: string): Promise<AppUser | null> {
const user = await prisma.user.findUnique({
where: { email: email.toLowerCase() },
});
if (!user) return null;
if (user.password !== password) return null;
return user;
return user as AppUser;
}
/** Check if a user has access to a specific domain */