Files
ProxmoxVE-Local/src/server/api/routers/servers.ts
Michel Roegl-Brunner b793c57000 refactor: migrate from better-sqlite3 to Prisma (#170)
* refactor: migrate from better-sqlite3 to Prisma

- Install Prisma dependencies and initialize with SQLite
- Create Prisma schema matching existing database structure
- Replace database.js with Prisma-based database service
- Update all API routes, tRPC routers, and WebSocket handler
- Convert TypeScript types to match Prisma schema
- Update build process to include Prisma migrations
- Remove better-sqlite3 dependency

All database operations now use Prisma while maintaining SQLite backend.

* fix: flatten server data in installed scripts API responses

- Transform Prisma nested server objects to flattened fields expected by frontend
- Update getAllInstalledScripts, getInstalledScriptsByServer, and getInstalledScriptById
- Server names should now display correctly in the installed scripts table
- Use nullish coalescing operators for better null handling

* fix: ensure DATABASE_URL is set in .env for Prisma during updates

- Add ensure_database_url() function to update.sh
- Function checks if .env exists and creates from .env.example if needed
- Automatically adds DATABASE_URL if not present
- Call function after restore_backup_files() in update flow
- Fixes Prisma client generation error during updates
2025-10-17 09:17:20 +02:00

42 lines
1.3 KiB
TypeScript

import { z } from "zod";
import { createTRPCRouter, publicProcedure } from "~/server/api/trpc";
import { getDatabase } from "~/server/database-prisma.js";
export const serversRouter = createTRPCRouter({
getAllServers: publicProcedure
.query(async () => {
try {
const db = getDatabase();
const servers = await db.getAllServers();
return { success: true, servers };
} catch (error) {
console.error('Error fetching servers:', error);
return {
success: false,
error: error instanceof Error ? error.message : 'Failed to fetch servers',
servers: []
};
}
}),
getServerById: publicProcedure
.input(z.object({ id: z.number() }))
.query(async ({ input }) => {
try {
const db = getDatabase();
const server = await db.getServerById(input.id);
if (!server) {
return { success: false, error: 'Server not found', server: null };
}
return { success: true, server };
} catch (error) {
console.error('Error fetching server:', error);
return {
success: false,
error: error instanceof Error ? error.message : 'Failed to fetch server',
server: null
};
}
}),
});