feat: switch panel database to sqlite

This commit is contained in:
JetSprow
2026-04-30 09:18:05 +10:00
parent 513d821414
commit 153e3954c6
21 changed files with 516 additions and 277 deletions

View File

@@ -36,8 +36,8 @@ export async function getAnnouncements(
...(q
? {
OR: [
{ title: { contains: q, mode: "insensitive" as const } },
{ body: { contains: q, mode: "insensitive" as const } },
{ title: { contains: q } },
{ body: { contains: q } },
],
}
: {}),

View File

@@ -14,11 +14,11 @@ export async function getAuditLogs(
...(q
? {
OR: [
{ action: { contains: q, mode: "insensitive" as const } },
{ targetType: { contains: q, mode: "insensitive" as const } },
{ targetLabel: { contains: q, mode: "insensitive" as const } },
{ actorEmail: { contains: q, mode: "insensitive" as const } },
{ message: { contains: q, mode: "insensitive" as const } },
{ action: { contains: q } },
{ targetType: { contains: q } },
{ targetLabel: { contains: q } },
{ actorEmail: { contains: q } },
{ message: { contains: q } },
],
}
: {}),

View File

@@ -41,8 +41,8 @@ export async function getNodeServers(
...(q
? {
OR: [
{ name: { contains: q, mode: "insensitive" as const } },
{ panelUrl: { contains: q, mode: "insensitive" as const } },
{ name: { contains: q } },
{ panelUrl: { contains: q } },
],
}
: {}),

View File

@@ -30,10 +30,10 @@ export async function getAdminOrders(
...(q
? {
OR: [
{ user: { email: { contains: q, mode: "insensitive" as const } } },
{ user: { name: { contains: q, mode: "insensitive" as const } } },
{ plan: { name: { contains: q, mode: "insensitive" as const } } },
{ tradeNo: { contains: q, mode: "insensitive" as const } },
{ user: { email: { contains: q } } },
{ user: { name: { contains: q } } },
{ plan: { name: { contains: q } } },
{ tradeNo: { contains: q } },
],
}
: {}),

View File

@@ -36,8 +36,8 @@ export async function getAdminPlans(
...(q
? {
OR: [
{ name: { contains: q, mode: "insensitive" as const } },
{ description: { contains: q, mode: "insensitive" as const } },
{ name: { contains: q } },
{ description: { contains: q } },
],
}
: {}),

View File

@@ -26,8 +26,8 @@ export async function getStreamingServices(
...(q
? {
OR: [
{ name: { contains: q, mode: "insensitive" as const } },
{ description: { contains: q, mode: "insensitive" as const } },
{ name: { contains: q } },
{ description: { contains: q } },
],
}
: {}),

View File

@@ -40,8 +40,8 @@ async function searchRelatedIds(q: string) {
prisma.user.findMany({
where: {
OR: [
{ email: { contains: q, mode: "insensitive" } },
{ name: { contains: q, mode: "insensitive" } },
{ email: { contains: q } },
{ name: { contains: q } },
],
},
select: { id: true },
@@ -51,9 +51,9 @@ async function searchRelatedIds(q: string) {
where: {
OR: [
{ id: q },
{ user: { email: { contains: q, mode: "insensitive" } } },
{ user: { name: { contains: q, mode: "insensitive" } } },
{ plan: { name: { contains: q, mode: "insensitive" } } },
{ user: { email: { contains: q } } },
{ user: { name: { contains: q } } },
{ plan: { name: { contains: q } } },
],
},
select: { id: true },
@@ -87,8 +87,8 @@ export async function getSubscriptionRiskEvents(
{ id: q },
{ userId: q },
{ subscriptionId: q },
{ ip: { contains: q, mode: "insensitive" as const } },
{ message: { contains: q, mode: "insensitive" as const } },
{ ip: { contains: q } },
{ message: { contains: q } },
...(userIds.length > 0 ? [{ userId: { in: userIds } }] : []),
...(subscriptionIds.length > 0 ? [{ subscriptionId: { in: subscriptionIds } }] : []),
],

View File

@@ -40,9 +40,9 @@ export async function getAdminSubscriptions(
...(q
? {
OR: [
{ user: { email: { contains: q, mode: "insensitive" as const } } },
{ user: { name: { contains: q, mode: "insensitive" as const } } },
{ plan: { name: { contains: q, mode: "insensitive" as const } } },
{ user: { email: { contains: q } } },
{ user: { name: { contains: q } } },
{ plan: { name: { contains: q } } },
],
}
: {}),

View File

@@ -49,9 +49,9 @@ export async function getAdminSupportTickets(
...(q
? {
OR: [
{ subject: { contains: q, mode: "insensitive" as const } },
{ category: { contains: q, mode: "insensitive" as const } },
{ user: { email: { contains: q, mode: "insensitive" as const } } },
{ subject: { contains: q } },
{ category: { contains: q } },
{ user: { email: { contains: q } } },
],
}
: {}),

View File

@@ -32,9 +32,9 @@ export async function getAdminTaskRuns(
...(q
? {
OR: [
{ title: { contains: q, mode: "insensitive" as const } },
{ errorMessage: { contains: q, mode: "insensitive" as const } },
{ targetType: { contains: q, mode: "insensitive" as const } },
{ title: { contains: q } },
{ errorMessage: { contains: q } },
{ targetType: { contains: q } },
],
}
: {}),

View File

@@ -44,9 +44,9 @@ export async function getTrafficClients(
...(q
? {
OR: [
{ user: { email: { contains: q, mode: "insensitive" as const } } },
{ inbound: { server: { name: { contains: q, mode: "insensitive" as const } } } },
{ email: { contains: q, mode: "insensitive" as const } },
{ user: { email: { contains: q } } },
{ inbound: { server: { name: { contains: q } } } },
{ email: { contains: q } },
],
}
: {}),

View File

@@ -35,10 +35,10 @@ export async function getAdminUsers(
...(q
? {
OR: [
{ email: { contains: q, mode: "insensitive" as const } },
{ name: { contains: q, mode: "insensitive" as const } },
{ inviteCode: { contains: q, mode: "insensitive" as const } },
{ invitedBy: { email: { contains: q, mode: "insensitive" as const } } },
{ email: { contains: q } },
{ name: { contains: q } },
{ inviteCode: { contains: q } },
{ invitedBy: { email: { contains: q } } },
],
}
: {}),

View File

@@ -14,11 +14,11 @@ export async function GET(req: Request) {
where: q
? {
OR: [
{ action: { contains: q, mode: "insensitive" } },
{ targetType: { contains: q, mode: "insensitive" } },
{ targetLabel: { contains: q, mode: "insensitive" } },
{ actorEmail: { contains: q, mode: "insensitive" } },
{ message: { contains: q, mode: "insensitive" } },
{ action: { contains: q } },
{ targetType: { contains: q } },
{ targetLabel: { contains: q } },
{ actorEmail: { contains: q } },
{ message: { contains: q } },
],
}
: undefined,

View File

@@ -1,10 +1,12 @@
import { PrismaClient, type Prisma } from "@prisma/client";
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
function createClient() {
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });
const adapter = new PrismaBetterSqlite3({
url: process.env.DATABASE_URL || "file:./storage/jboard.db",
});
return new PrismaClient({ adapter });
}