diff --git a/esbuild.config.js b/esbuild.config.js index 2e89c74..ee3ad37 100644 --- a/esbuild.config.js +++ b/esbuild.config.js @@ -29,6 +29,7 @@ const { rm } = require('fs/promises'); 'src/lib/datasources/Swift.ts', 'src/lib/datasource.ts', 'src/scripts/read-config.ts', + 'src/scripts/import-dir.ts', ], format: 'cjs', resolveExtensions: ['.ts', '.js'], diff --git a/package.json b/package.json index 91f1076..c352f73 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "docker:run": "docker-compose up -d", "docker:down": "docker-compose down", "docker:build-dev": "docker-compose --file docker-compose.dev.yml up --build", - "scripts:read-config": "npm-run-all build:server && node dist/scripts/read-config" + "scripts:read-config": "npm-run-all build:server && node dist/scripts/read-config", + "scripts:import-dir": "npm-run-all build:server && node dist/scripts/import-dir" }, "dependencies": { "@dicedtomato/mantine-data-grid": "0.0.23", diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 9101281..29ce05f 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -364,7 +364,7 @@ export default function Layout({ children, props }) { - {user.username}{' '} + {user.username} ({user.id}){' '} {user.administrator && user.username !== 'administrator' ? '(Administrator)' : ''} } href='/dashboard/manage'> diff --git a/src/lib/recoil/user.ts b/src/lib/recoil/user.ts index 4872ec2..15e2551 100644 --- a/src/lib/recoil/user.ts +++ b/src/lib/recoil/user.ts @@ -13,6 +13,7 @@ export interface User { superAdmin: boolean; oauth: boolean; oauthProvider: 'github' | 'discord'; + id: number; } export const userState = atom({ diff --git a/src/scripts/import-dir.ts b/src/scripts/import-dir.ts new file mode 100644 index 0000000..736e159 --- /dev/null +++ b/src/scripts/import-dir.ts @@ -0,0 +1,48 @@ +import datasource from '../lib/datasource'; +import { readdir, stat } from 'fs/promises'; +import config from '../lib/config'; +import { migrations } from '../server/util'; +import { PrismaClient } from '@prisma/client'; +import { guess } from '../lib/mimes'; + +async function main() { + const directory = process.argv[2]; + if (!directory) { + console.error('no directory specified'); + process.exit(1); + } + + const files = await readdir(directory); + + const userId = Number(process.argv[3] ?? '1'); + if (isNaN(userId)) { + console.error('invalid user id'); + process.exit(1); + } + + const data = []; + + for (let i = 0; i !== files.length; ++i) { + const mime = await guess(files[i].split('.').pop()); + + data.push({ + file: files[i], + mimetype: mime, + userId, + }); + console.log(`Imported ${files[i]} (${mime} mimetype) to user ${userId}`); + } + + process.env.DATABASE_URL = config.core.database_url; + await migrations(); + + const prisma = new PrismaClient(); + + console.log('Starting transaction to database..'); + prisma.image.createMany({ + data, + }); + console.log('Finished transaction to database.'); +} + +main();