feat: initial prototype

This commit is contained in:
2026-02-13 15:52:13 +07:00
parent 134351b326
commit e8dbefde43
140 changed files with 12390 additions and 1369 deletions

View File

@@ -1,5 +1,33 @@
import { PrismaClient } from "@prisma/client";
import { PrismaPg } from "@prisma/adapter-pg";
import { Pool } from "pg";
import { PrismaClient } from "./generated/prisma";
export * from "@prisma/client";
export * from "./generated/prisma";
export type {
ReverseProxyCreateInput,
ReverseProxyServer,
ReverseProxyUpdateInput,
ReverseProxyWithEnvVars,
} from "./models/reverse-proxy";
export type {
EnvVariable,
Server,
ServerCreateInput,
ServerUpdateInput,
ServerWithEnvVars,
} from "./models/server";
export const prisma = new PrismaClient();
export type { SessionWithUser } from "./models/session";
export { isSessionExpired } from "./models/session";
export type {
CreateUserInput,
UpdateSuspensionInput,
UpdateUserInput,
} from "./models/user";
export { isUserSuspended } from "./models/user";
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const adapter = new PrismaPg(pool);
export const prisma = new PrismaClient({ adapter });

View File

@@ -0,0 +1,15 @@
import type {
CustomEnvironmentVariable,
Prisma,
ReverseProxyServer as PrismaReverseProxyServer,
} from "../generated/prisma";
export type ReverseProxyWithEnvVars = Prisma.ReverseProxyServerGetPayload<{
include: { env_variables: true };
}>;
export type ReverseProxyCreateInput = Prisma.ReverseProxyServerCreateInput;
export type ReverseProxyUpdateInput = Prisma.ReverseProxyServerUpdateInput;
export type ReverseProxyServer = PrismaReverseProxyServer;

View File

@@ -0,0 +1,17 @@
import type {
CustomEnvironmentVariable,
Prisma,
Server as PrismaServer,
} from "../generated/prisma";
export type ServerWithEnvVars = Prisma.ServerGetPayload<{
include: { env_variables: true };
}>;
export type ServerCreateInput = Prisma.ServerCreateInput;
export type ServerUpdateInput = Prisma.ServerUpdateInput;
export type EnvVariable = Pick<CustomEnvironmentVariable, "key" | "value">;
export type Server = PrismaServer;

View File

@@ -0,0 +1,11 @@
import type { Prisma, Session as PrismaSession } from "../generated/prisma";
export type Session = PrismaSession;
export type SessionWithUser = Prisma.SessionGetPayload<{
include: { user: true };
}>;
export function isSessionExpired(session: Pick<Session, "expiresAt">): boolean {
return session.expiresAt < new Date();
}

View File

@@ -0,0 +1,21 @@
import type { Prisma, User as PrismaUser } from "../generated/prisma";
export type User = PrismaUser;
export type CreateUserInput = Prisma.UserCreateInput;
export type UpdateUserInput = Prisma.UserUpdateInput;
export type UpdateSuspensionInput = Prisma.UserUpdateInput;
export function isUserSuspended(user: Pick<PrismaUser, "isSuspended" | "suspendedUntil">): boolean {
if (!user.isSuspended) {
return false;
}
if (user.suspendedUntil && user.suspendedUntil <= new Date()) {
return false;
}
return true;
}