From 7588d18fff2d910f6fc3df9663505c137ac75023 Mon Sep 17 00:00:00 2001 From: hailin Date: Wed, 14 Jan 2026 00:40:49 -0800 Subject: [PATCH] fix(mining-wallet): fix province/city creation and add seed on startup - Use provinceCode directly instead of inferring from cityCode - Use code as name for province/city records - Add ts-node to production for seed execution - Run prisma db seed on container startup Co-Authored-By: Claude Opus 4.5 --- .../services/mining-wallet-service/Dockerfile | 5 +++-- .../mining-wallet-service/package.json | 3 +++ .../services/contribution-wallet.service.ts | 20 ++++++++----------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/backend/services/mining-wallet-service/Dockerfile b/backend/services/mining-wallet-service/Dockerfile index 66b3a09d..2c767bb4 100644 --- a/backend/services/mining-wallet-service/Dockerfile +++ b/backend/services/mining-wallet-service/Dockerfile @@ -30,14 +30,15 @@ WORKDIR /app USER nestjs COPY --chown=nestjs:nodejs package*.json ./ -RUN npm ci --only=production && npm cache clean --force +COPY --chown=nestjs:nodejs tsconfig*.json ./ +RUN npm ci --only=production && npm install ts-node typescript @types/node --save-dev && npm cache clean --force COPY --chown=nestjs:nodejs prisma ./prisma/ RUN DATABASE_URL="postgresql://user:pass@localhost:5432/db" npx prisma generate COPY --chown=nestjs:nodejs --from=builder /app/dist ./dist -RUN printf '#!/bin/sh\nset -e\necho "Running database migrations..."\nnpx prisma migrate deploy\necho "Starting application..."\nexec node dist/main.js\n' > /app/start.sh && chmod +x /app/start.sh +RUN printf '#!/bin/sh\nset -e\necho "Running database migrations..."\nnpx prisma migrate deploy\necho "Running database seed..."\nnpx prisma db seed || echo "Seed skipped or already applied"\necho "Starting application..."\nexec node dist/main.js\n' > /app/start.sh && chmod +x /app/start.sh ENV NODE_ENV=production ENV TZ=Asia/Shanghai diff --git a/backend/services/mining-wallet-service/package.json b/backend/services/mining-wallet-service/package.json index fef71cdb..b27ae1db 100644 --- a/backend/services/mining-wallet-service/package.json +++ b/backend/services/mining-wallet-service/package.json @@ -39,6 +39,9 @@ "rxjs": "^7.8.1", "swagger-ui-express": "^5.0.0" }, + "prisma": { + "seed": "ts-node prisma/seed.ts" + }, "devDependencies": { "@nestjs/cli": "^10.2.1", "@nestjs/schematics": "^10.0.3", diff --git a/backend/services/mining-wallet-service/src/application/services/contribution-wallet.service.ts b/backend/services/mining-wallet-service/src/application/services/contribution-wallet.service.ts index 427e17bb..cb2f0c0b 100644 --- a/backend/services/mining-wallet-service/src/application/services/contribution-wallet.service.ts +++ b/backend/services/mining-wallet-service/src/application/services/contribution-wallet.service.ts @@ -313,7 +313,7 @@ export class ContributionWalletService { province = await tx.province.create({ data: { code: provinceCode, - name: `${provinceCode}省`, // 默认名称,后续可更新 + name: provinceCode, status: 'ACTIVE', }, }); @@ -342,36 +342,32 @@ export class ContributionWalletService { if (!city) { // 城市不存在,需要先有省份 - // 尝试从 cityCode 推断省份(如 GD-SZ 中的 GD) - const parts = cityCode.split('-'); - const inferredProvinceCode = parts.length > 1 ? parts[0] : null; - - if (!inferredProvinceCode) { - this.logger.warn(`Cannot infer province from city code: ${cityCode}`); + if (!provinceCode) { + this.logger.warn(`Cannot create city without provinceCode: ${cityCode}`); return null; } // 找或创建省份 let province = await tx.province.findUnique({ - where: { code: inferredProvinceCode }, + where: { code: provinceCode }, }); if (!province) { province = await tx.province.create({ data: { - code: inferredProvinceCode, - name: `${inferredProvinceCode}省`, + code: provinceCode, + name: provinceCode, status: 'ACTIVE', }, }); - this.logger.log(`Auto-created province: ${inferredProvinceCode}`); + this.logger.log(`Auto-created province: ${provinceCode}`); } // 创建城市 city = await tx.city.create({ data: { code: cityCode, - name: `${cityCode}市`, // 默认名称 + name: cityCode, provinceId: province.id, status: 'ACTIVE', },