Ver Fonte

fix: seeding script error

yusuf há 1 mês atrás
pai
commit
7d77ba54bf
6 ficheiros alterados com 41 adições e 12 exclusões
  1. 3 1
      .env.example
  2. 3 0
      TODO-PROD.txt
  3. 21 0
      docker-compose.yml
  4. 4 2
      src/lib/mailer.ts
  5. 2 2
      src/payload.config.ts
  6. 8 7
      src/scripts/seed.ts

+ 3 - 1
.env.example

@@ -1,4 +1,6 @@
-DATABASE_URL=postgresql://username:password@host:5432/database?sslmode=require
+# Local dev / pnpm seed on your machine: use 127.0.0.1 (not "postgres").
+# Inside Docker Compose network only: host can be the service name "postgres".
+DATABASE_URL=postgresql://postgres:password123@127.0.0.1:5432/postgres
 PAYLOAD_SECRET=your_payload_secret
 NODE_ENV='development'
 BLOB_READ_WRITE_TOKEN=your_vercel_blob_token

+ 3 - 0
TODO-PROD.txt

@@ -2,7 +2,10 @@
 1. setel ulang cors dan csrf
 2. buat dokumentasi security
 3. buat dokumentasi banyak-banyak
+4. docker compose --env-file .env -f docker-compose.yml up -d --build
 
+docker compose --profile seed run --rm seed
+docker compose --profile seed run --rm seed sh -c "corepack enable && corepack prepare pnpm@10.33.0 --activate && pnpm seed"
 
 
 

+ 21 - 0
docker-compose.yml

@@ -35,5 +35,26 @@ services:
       timeout: 5s
       retries: 5
 
+  # One-off DB seeding on the same Docker network as Postgres (hostname "postgres" in DATABASE_URL works).
+  # Usage: docker compose --profile seed run --rm seed
+  seed:
+    profiles:
+      - seed
+    image: node:22.17.0-alpine
+    working_dir: /app
+    volumes:
+      - .:/app
+    env_file:
+      - .env
+    environment:
+      NODE_ENV: development
+    depends_on:
+      postgres:
+        condition: service_healthy
+    command:
+      - sh
+      - -c
+      - corepack enable && corepack prepare pnpm@10.33.0 --activate && pnpm install --frozen-lockfile && pnpm seed
+
 volumes:
   pgdata:

+ 4 - 2
src/lib/mailer.ts

@@ -7,7 +7,9 @@ type SendEmailInput = {
   replyTo?: string
 }
 
-let transporter: nodemailer.Transporter | null = null
+type MailTransporter = ReturnType<typeof nodemailer.createTransport>
+
+let transporter: MailTransporter | null = null
 
 function getRequiredEnv(name: string): string {
   const value = process.env[name]?.trim()
@@ -19,7 +21,7 @@ function getRequiredEnv(name: string): string {
   return value
 }
 
-function getTransporter(): nodemailer.Transporter {
+function getTransporter(): MailTransporter {
   if (transporter) {
     return transporter
   }

+ 2 - 2
src/payload.config.ts

@@ -41,8 +41,8 @@ export default buildConfig({
   // Configuration: 500 requests per 15 minutes, trustProxy: true
   plugins: [
     vercelBlobStorage({
-      enabled: true,
-      // enabled: process.env.NODE_ENV === 'test',
+      // enabled: true,
+      enabled: process.env.NODE_ENV === 'test',
       collections: {
         media: true, // Aktifkan untuk collection 'media'
       },

+ 8 - 7
src/scripts/seed.ts

@@ -212,11 +212,10 @@ async function uploadImage(
 async function seed() {
     console.log('🌱 Starting seed process...\n')
 
-    // Initialize Payload
-    const payloadConfig = await config
-    const payload = await getPayload({ config: payloadConfig })
-
     try {
+        const payloadConfig = await config
+        const payload = await getPayload({ config: payloadConfig })
+
         // Reset collections (optional - uncomment if you want to clear existing data)
         console.log('🗑️  Clearing existing data...')
         try {
@@ -344,14 +343,16 @@ async function seed() {
         }
 
         console.log('✨ Seed process completed successfully!')
+        process.exit(0)
     } catch (error) {
         console.error('❌ Seed process failed:', error)
         process.exit(1)
     }
-
-    process.exit(0)
 }
 
 // Run seed
-seed()
+seed().catch((error) => {
+    console.error('❌ Seed process failed:', error)
+    process.exit(1)
+})