diff --git a/cms/.env.example b/cms/.env.example index 7aee52b..32349a9 100644 --- a/cms/.env.example +++ b/cms/.env.example @@ -3,3 +3,7 @@ DATABASE_URL=postgresql://payload:payload_dev@postgres:5432/payload_cms # Secret key for Payload (generate a random string for production) PAYLOAD_SECRET=your-secret-here + +# Initial admin/user credentials +SEED_USER_EMAIL= +SEED_USER_PASSWORD= diff --git a/cms/package.json b/cms/package.json index f2e7074..29b5468 100644 --- a/cms/package.json +++ b/cms/package.json @@ -15,7 +15,10 @@ "start": "cross-env NODE_OPTIONS=--no-deprecation next start", "test": "pnpm run test:int && pnpm run test:e2e", "test:e2e": "cross-env NODE_OPTIONS=\"--no-deprecation --import=tsx/esm\" playwright test --config=playwright.config.ts", - "test:int": "cross-env NODE_OPTIONS=--no-deprecation vitest run --config ./vitest.config.mts" + "test:int": "cross-env NODE_OPTIONS=--no-deprecation vitest run --config ./vitest.config.mts", + "seed": "tsx --env-file=.env src/seed.ts", + "migrate": "payload migrate", + "migrate:create": "payload migrate:create" }, "dependencies": { "@payloadcms/next": "3.84.1", diff --git a/cms/src/seed.ts b/cms/src/seed.ts new file mode 100644 index 0000000..478791f --- /dev/null +++ b/cms/src/seed.ts @@ -0,0 +1,32 @@ +import payload from 'payload' +import config from './payload.config' + +const seed = async () => { + await payload.init({ config }) + + const existing = await payload.find({ + collection: 'users', + where: { email: { equals: process.env.SEED_USER_EMAIL } }, + }) + + if (existing.totalDocs > 0) { + console.log('User already exists, skipping seed') + process.exit(0) + } + + await payload.create({ + collection: 'users', + data: { + email: process.env.SEED_USER_EMAIL!, + password: process.env.SEED_USER_PASSWORD!, + }, + }) + + console.log('User created') + process.exit(0) +} + +seed().catch((err) => { + console.error(err) + process.exit(1) +})